
مرحبا بكم في مشروع جدولة جبال الألب. تم تصميم جدولة kernel المبتكرة الخاصة بنا لتعزيز أداء أعباء عمل الوظيفة كخدمة (FAAS) ، والتي تشتهر بطبيعتها الفائقة ، المتزامنة للغاية ، والهشفية. غالبًا ما يفشل جدولة نظام التشغيل الحاليين ، مثل Linux Fair Scheduler (CFS) ، في تلبية المتطلبات الفريدة للوظائف بدون خادم ، وخاصة تلك التي لديها وقت تنفيذ قصير. يعالج ALPs هذا التحدي من خلال تقريب مبادئ أقصر وقت العملية المتبقية (SRPT) مع الإطار القوي على CFS ، مما يقدم حل جدولة نظام التشغيل الديناميكي والدرع في التطبيق.
بالنسبة إلى ATC'24 Artifact Review ، لإنقاذ جهود المراجعين ، نوصي بشدة أن يستخدم المراجعون آلة التطوير المخصصة لدينا. سنقدم الدعم للتأكد من أن المراجعين لديهم وصول كامل إلى الجهاز خلال عملية مراجعة Artifact.
لقد قمنا بتنفيذ جبال الألب بناءً على إصدار Linux kernel 5.18-RC5. يجب عليك تجميع وتشغيل جبال الألب على النواة. نوصي بناء kernel على أساس Ubuntu 22.04 LTS.
البرنامج الدقيق المستخدم لبناء جبال الألب على النحو التالي:
بالإضافة إلى ذلك ، نقوم بتعديل ونوفر ثنائيات برامج دقيقة لتشغيل خدمة FAAS.
apt update -y
sudo apt install build-essential
gcc --version
قم بتنزيل أرشيف Go Language Binary
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 . إضافة متغيرات البيئة إلى ~/.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/
بناء صورة العامل
cd experiments && make imgs/lambda
نقوم بتعديل OpenLambda لدعم مخطط تكوين ALPS JSON. نحن نقدم ol ثنائي ومثال على ملف التكوين في experiments/ . بالإضافة إلى تكوين OL ، يسمح ALPs للمستخدم بتحديد وظيفة META لتمييز الجدولة في النواة على النحو التالي:
"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}
الآن استدعاء 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
يقدم جدولة الواجهة الأمامية معلمة للتحكم في صياغة السياسة. بحلول Defauly ، يتم تمكين ضبط السياسة
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
لاختبار أعباء العمل المختلفة ، استبدل ملف عبء العمل (EXP) في مجلد HTTP_CLIENT . بشكل افتراضي ، يتم إنشاء عبء العمل بواسطة Huawei Trace ، ونحن نقدم عبء عمل تم إنشاؤه بواسطة Azure (Azure) في نفس المجلد.