
欢迎使用阿尔卑斯山计划项目。我们的创新内核调度程序旨在增强功能 - 服务(FAAS)工作负载的性能,这些功能以其拼写,高度并发和爆发性质而闻名。现有的OS调度程序(例如Linux完全公平的调度程序(CFS))通常无法满足无服务器功能的独特需求,尤其是那些执行时间较短的功能。阿尔卑斯山通过使用CFS上的稳健框架近似剩余过程时间(SRPT)的原理来解决这一挑战,并提供动态的,应用吸引的OS调度解决方案。
对于ATC'24 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
设置GO环境,包括GOROOT和GOPATH 。将环境变量添加到~/.profile 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安装Schedtool
sudo apt-get update -y
sudo apt-get install -y schedtool
克隆阿尔卑斯座存储库,并将Docker二进制文件复制到/usr/sbin
git clone https://github.com/fishercht1995/ALPS.git
cd docker_binaries
cp binary-client/* /usr/bin/
cp binary-daemon/* /usr/bin/
建立工人形象
cd experiments && make imgs/lambda
我们修改OpenLambda以支持Alps JSON配置模式。我们提供ol二进制文件和experiments/中的配置文件的示例。除了OL配置外,阿尔卑斯山还允许用户定义函数meta以区分内核中的调度如下:
"seal_priority": "Function UID",
"function_name" : "Function Name",
启动Docker服务
cd experiments && ./docker.sh
运行Alps前端调度程序
cd frontend && python main.py
构建和运行阿尔卑斯山后端
mv LINUX_SOURCE /Linux
cd backend
make bpf && make alps
./alps.o
运行Openlambda
cd experiments && ./ol worker --path={PATH}
现在调用你的lambda
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
前端调度程序提供两个参数来控制策略微调。在授予政策微调的情况下启用了
python3 main.py
用户可以通过
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)。默认情况下,工作负载是由华为跟踪生成的,我们在同一文件夹中提供了Azure生成的工作负载(Azure)。