
Alps Scheduler Projectへようこそ。当社の革新的なカーネルスケジューラは、非再審理、非常に同時、およびバースト的な性質で知られているサービスとしての機能(FAAS)ワークロードのパフォーマンスを向上させるように設計されています。 Linux完全に公正なスケジューラ(CFS)などの既存のOSスケジューラーは、サーバーレス機能の独自の要求、特に実行時間が短いものの独自の需要を満たすことができないことがよくあります。 Alpsは、残りの最短プロセス時間(SRPT)の原則をCFSの堅牢なフレームワークで近似することにより、この課題に対処し、動的なアプリケーションを意識したOSスケジューリングソリューションを提供します。
ATC'24 Artifact Reviewのレビュー担当者の努力を節約するために、レビュー担当者が専用の開発マシンを使用することを強くお勧めします。レビュー担当者がArtifactレビュープロセスを通じてマシンに完全にアクセスできるようにするためのサポートを提供します。
Linuxカーネルバージョン5.18-RC5に基づいてALPを実装しました。カーネルでアルプスをコンパイルして実行する必要があります。 Ubuntu 22.04 LTSに基づいてカーネルを構築することをお勧めします。
次のようにアルプスを構築するために使用される正確なソフトウェア:
さらに、FAASサービスを実行するために、正確なソフトウェアバイナリを変更および提供します。
apt update -y
sudo apt install build-essential
gcc --version
GO言語バイナリアーカイブをダウンロードします
wget https://go.dev/dl/go1.21.10.linux-amd64.tar.gz
sudo tar -xvf go1.12.linux-amd64.tar.gz
sudo mv go /usr/local
GOROOTやGOPATHを含むセットアップGO環境。 ~/.profileに環境変数を追加します。
export GOROOT=/usr/local/go
mkdir $HOME/project
export GOPATH=$HOME/project
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
インストールを確認します
~$ go version
~$ go version go1.21.10 linux/amd64
bpftoolリポジトリをクローンし、次のインストール命令を構築します
git clone --recurse-submodules https://github.com/libbpf/bpftool.git
aptによるスケジトールをインストールします
sudo apt-get update -y
sudo apt-get install -y schedtool
ALPSリポジトリをクローンし、Dockerバイナリを/usr/sbinにコピーします
git clone https://github.com/fishercht1995/ALPS.git
cd docker_binaries
cp binary-client/* /usr/bin/
cp binary-daemon/* /usr/bin/
OLワーカーの画像を作成します
cd experiments && make imgs/lambda
Openlambdaを変更して、 Alps JSON構成スキーマをサポートします。 experiments/でolバイナリと構成ファイルの例を提供します。 OL構成に加えて、 ALPSを使用すると、ユーザーは関数メタを定義して、次のようにカーネル内のスケジューリングを区別できます。
"seal_priority": "Function UID",
"function_name" : "Function Name",
Dockerサービスを開始します
cd experiments && ./docker.sh
アルプスフロントエンドスケジューラを実行します
cd frontend && python main.py
アルプスバックエンドを構築して実行します
mv LINUX_SOURCE /Linux
cd backend
make bpf && make alps
./alps.o
Openlambdaを実行します
cd experiments && ./ol worker --path={PATH}
今、あなたのラムダを呼び出します
curl -X POST http://localhost:5002/run/fib
-H "Content-Type: application/json"
-d '{"n":"30", "id":"20", "job":"fib"}'
アルプスのパフォーマンスをテストするために、いくつかのヘルパースクリプトを提供します。まず、複数の関数を開始および削除します。
cd experiments
./init_function.sh # init functions
./delete_function.sh # delete function workers
次に、フロントエンドとバックエンドを開始します。
cd frontend && python3 main.py --alpha 1 --beta 1 --ml avg --exp_result ../experiments/seals
cd backend && ./alps.o
HTTPクライアントからベンチマークリクエストを送信します
go build run.go
cd http_client && ./test.sh
フロントエンドスケジューラは、ポリシーの微調整を制御するための2つのパラメーターを提供します。 Defaulyにより、ポリシーの微調整が有効になります
python3 main.py
そして、ユーザーは予測不可能性の微調整を無効にし、Finetuningを過負荷にすることができます
python3 main.py --unpred --overload
ユーザーはポリシーパラメーターを制御できます
python3 main.py --alpha 1 --beta 1 --theta 50 --gamma 1
ユーザーは機械学習方法を変更することもできます
python3 main.py --ml avg
python3 main.py --ml LR
さまざまなトレースワークロードをテストするには、 http_clientフォルダーのワークロードファイル(EXP)を交換します。デフォルトでは、ワークロードはHuawei Traceによって生成され、同じフォルダーにAzureで生成されたワークロード(Azure)を提供します。