จุดประสงค์ของหน้านี้คือการจัดทำขั้นตอนและรหัสเพื่อทำซ้ำผลลัพธ์สำหรับกระดาษต่อไปนี้:
M. Savasci, et al., "SLO-Power: SLO และ SLO และการปรับสเกลยืดหยุ่นที่รับรู้ด้วยพลังงานสำหรับบริการเว็บ" ในปี 2024 IEEE/ACM 24 RD Symposium International International เกี่ยวกับคลัสเตอร์, คลาวด์และอินเทอร์เน็ตคอมพิวเตอร์ (CCGRID), Philadelphia, USA, 2024
ด้านล่างเราอธิบายรายละเอียด:
เราเรียกใช้ Ubuntu Ubuntu 20.04 LTS บนเซิร์ฟเวอร์ทางกายภาพของเรา การกำหนดค่าที่อธิบายไว้ด้านล่างได้รับการทดสอบเฉพาะสำหรับระบบปฏิบัติการรุ่นนั้นเท่านั้น
เราใช้ Python เวอร์ชัน 3.8.10 ในการตั้งค่าของเรา ดังนั้นเราขอแนะนำให้คุณใช้เวอร์ชันเดียวกัน
Slo-Power ต้องใช้โมดูล Python ต่อไปนี้:
เราสร้างข้อกำหนด. txt สำหรับโมดูล Python ที่ต้องการยกเว้นโมดูล Rapl เนื่องจากเป็นโมดูลภายนอกที่ได้รับจากที่นี่
เราขอแนะนำให้คุณสร้างสภาพแวดล้อมเสมือนจริงของ Python และติดตั้งโมดูลภายในสภาพแวดล้อมเสมือนจริงนี้ หากต้องการติดตั้งจาก requirements.txt ให้เรียกใช้คำสั่งต่อไปนี้:
pip install -r /path/to/requirements.txt
ในการติดตั้งโมดูล rapl ให้โคลน repo ก่อน
git clone https://github.com/wkatsak/py-rapl.git
จากนั้นไปที่ด้านในของไดเรกทอรีและวิ่ง
pip install .
คำสั่งนี้จะใช้ setup.py เพื่อติดตั้งโมดูล rapl
เราใช้ LXD เวอร์ชัน 5.19 สำหรับการจัดกลุ่มและดังนั้นการปรับใช้แอปพลิเคชัน LXD สามารถติดตั้งได้โดยใช้ SNAP Package Manager เพื่อติดตั้ง
sudo snap install lxd --channel=5.19/stable
หากคุณมี LXD อยู่แล้วในเครื่องของคุณคุณสามารถเปลี่ยนเป็นเวอร์ชัน 5.19 โดยใช้คำสั่งต่อไปนี้
sudo snap refresh lxd --channel=5.19/stable
เราจัดเตรียมไฟล์ json เพื่อให้ SLO-Power Manager ทราบเครื่องจักรในคลัสเตอร์ เพื่อจุดประสงค์นี้โปรดดูและอัปเดตไฟล์ cluster_machines.json หรือ single_machine.json
สำหรับการทดลองของเราเราใช้ Mediawiki เยอรมันกับ Memcached คุณสามารถดาวน์โหลดภาพได้จากที่นี่:
หรือคุณสามารถดาวน์โหลดได้โดยใช้คำสั่ง gdown ต่อไปนี้:
gdown 1nZ0pMFGASFhaA4tthHhLlgdFP-RGt5tH
สำหรับรายละเอียดการติดตั้งของ gdown โปรดดู GTHEN GITHUB Repo
หลังจากคุณดาวน์โหลดภาพคอนเทนเนอร์ Tarball คุณต้องกู้คืนและสร้างคอนเทนเนอร์จากมัน ในการทำเช่นนี้ให้เรียกใช้คำสั่งต่อไปนี้:
PS ก่อนเรียกใช้คำสั่งด้านบนคุณต้องตรวจสอบให้แน่ใจว่าคุณเรียกใช้ lxd init เพื่อจุดประสงค์ในการเริ่มต้น
lxc image import mediawiki_german_with_memcached.tar.gz --alias {IMAGE_NAME}
lxc launch {IMAGE_NAME} {CONTAINER_NAME}
หากต้องการดูว่าคอนเทนเนอร์นั้นขึ้นหรือไม่โปรดเรียกใช้
lxc list
commmand และตรวจสอบให้แน่ใจว่าคอนเทนเนอร์ทำงาน
นอกเหนือจากขั้นตอนข้างต้นเราเพิ่มพร็อกซีลงในคอนเทนเนอร์เพื่อรับคำขอจาก Haproxy โดยทั่วไปเราจะส่งต่อพอร์ตที่นี่
หากต้องการเพิ่มพร็อกซีโปรดเรียกใช้คำสั่งต่อไปนี้
lxc config device add {CONTAINER_NAME} {PROXY_NAME} proxy listen=tcp:0.0.0.0:{PORT_NUMBER} connect=tcp:127.0.0.1:80
เราใช้ Haproxy v2.7.10 ต่อหน้าเซิร์ฟเวอร์แบ็กเอนด์เพื่อโหลดบาลานซ์ คุณต้องติดตั้ง Haproxy ก่อน สามารถติดตั้งได้
sudo apt install haproxy=2.7.10-1ppa1~bionic
ในการตรวจสอบว่ามีการติดตั้งให้ดำเนินการ:
haproxy -v
คำสั่งนี้ควรแสดงหมายเลขเวอร์ชันของ haproxy ที่ติดตั้ง
หลังจากติดตั้ง Haproxy ไฟล์การกำหนดค่าที่อยู่ที่ /etc/haproxy/haproxy.cfg จะต้องแก้ไข เพื่อความสะดวกเราได้พิสูจน์ไฟล์การกำหนดค่านี้เป็น haproxy.cfg ในไฟล์นี้พารามิเตอร์ของ CONTAINER_NAME , IP_ADDRESS_OF_MACHINE_HOSTING_CONTAINER และ PORT_NUMBER_OF_CONTAINER ที่นี่ CONTAINER_NAME เป็นคอนเทนเนอร์ที่เราสร้างขึ้นก่อนหน้านี้แอปพลิเคชันโฮสต์ Mediawiki นอกจากนี้ PORT_NUMBER_OF_CONTAINER จะต้องเหมือนกันเมื่อสร้างพร็อกซีสำหรับคอนเทนเนอร์
เราเริ่มต้นพารามิเตอร์ข้างต้นด้วยค่าบางอย่างในภาพนี้ ดังนั้นคุณต้องตั้งค่าด้วยค่าที่ถูกต้อง
นอกจากนี้เรายังให้ภาพ Haproxy LXC เพื่อความสะดวกของคุณ สามารถดาวน์โหลดได้จากที่นี่
หรือคุณสามารถดาวน์โหลดได้โดยใช้คำสั่ง gdown ต่อไปนี้:
gdown 1KtDZeMU-2enfnRhV5l147G-VW8CjHJHE
หลังจากคุณดาวน์โหลดภาพคอนเทนเนอร์ Tarball คุณต้องกู้คืนและสร้างคอนเทนเนอร์จากมัน ในการทำเช่นนี้ให้เรียกใช้คำสั่งต่อไปนี้:
lxc image import haproxy_container.tar.gz --alias {IMAGE_NAME}
lxc launch {IMAGE_NAME} {CONTAINER_NAME}
เครื่องกำเนิดเวิร์กโหลดมีให้ในไดเรกทอรี Workload-Generator เครื่องกำเนิดเวิร์กโหลดของเราขึ้นอยู่กับเครื่องกำเนิดเวิร์กโหลด HTTPMON สำหรับรายละเอียดการติดตั้งโปรดดูที่นี่ การใช้งานเครื่องกำเนิดเวิร์กโหลดมีดังนี้ (สมมติว่ามันเรียกว่าภายในไดเรกทอรี workload-generator ):
./generator $1 $2 $3 $4 where
$1 --> path to the binary of the httpmon
$2 --> IP address of HAProxy server (Listening port number can be provided as `IP_address:port_number`)
$3 --> workload trace file
$4 --> version of the workload generator's output that is logged
ตัวอย่างเช่นคำสั่งต่อไปนี้
./generator.sh /workspace/httpmon 0.0.0.0 /SLO-Power/workload-traces/single_node_level_scaled_wikipedia_traces.out v1
เริ่มต้นเครื่องกำเนิดเวิร์กโหลด HTTPMON โดยใช้ไบนารีที่อยู่ v1 ไดเรกทอรี /workspace โดยใช้ร่องรอยของ single_node_level_scaled_wikipedia_traces.out , ส่งคำขอไปยัง HAProxy Hosting บน IP 0.0.0.0 (เปลี่ยนตามการกำหนดค่าเครือข่ายของคุณ) โดยค่าเริ่มต้นเอาต์พุตเครื่องกำเนิดเวิร์กโหลดจะถูกบันทึกภายใต้ไดเรกทอรี /tmp
เราใช้ร่องรอยเวิร์กโหลดจริงสองรายการ: ร่องรอย Wikipedia และ Azure เราปรับสัดส่วนทั้ง Wikipedia และ Azure ตามขนาดคลัสเตอร์ของเรา สำหรับวิกิพีเดียเราปรับขนาดร่องรอยระหว่าง 60 และ 240 ในขณะที่เราปรับขนาดระหว่าง 100 และ 240 สำหรับร่องรอยสีฟ้า ร่องรอยทั้งหมดเหล่านี้อยู่ภายใต้ไดเรกทอรีเวิร์กโหลดร่องรอย นอกเหนือจากร่องรอยเวิร์กโหลดระดับคลัสเตอร์แล้วเรายังให้ร่องรอยเวิร์กโหลดระดับโหนดเดียวในโฟลเดอร์เดียวกันเช่นกัน คุณควรเลือกตามการตั้งค่าของคุณ
รหัสแหล่งที่มาของ SLO-Power อยู่ภายใต้ไดเรกทอรี SRC ในต่อไปนี้เราจะแสดงวิธีเรียกใช้ SLO-Power
SLO-Agent ของเรามีสองโมดูล: Power Capper และ Core LoLocator
sudo ) usage: power_capper_server.py [-h] [-p PORT] [-w WORKERS] [-e POWER]
Power Capping Server
optional arguments:
-h, --help show this help message and exit
-p PORT, --port PORT Network port (default: 8088)
-w WORKERS, --workers WORKERS
Max Number of workers (default: 10)
-e POWER, --power POWER
Default power (default: 85000000)
usage: dynamic_core_allocator.py [-h] [-H HOST] [-p PORT] [-w WORKERS] [-d DOMAIN] [-c CORES]
Dynamic Core Allocator
optional arguments:
-h, --help show this help message and exit
-H HOST, --host HOST Network host (default: 0.0.0.0)
-p PORT, --port PORT Network port (default: 8090)
-w WORKERS, --workers WORKERS
Max number of workers (default: 10)
-d DOMAIN, --domain DOMAIN
Default container (default: mediawiki-51-1)
-c CORES, --cores CORES
Default number of cores (default: 16)
นอกจากนี้เรายังพัฒนาบริการสองบริการเพื่อให้การวัดพลังงานผ่านอินเตอร์เฟส Intel Rapl และข้อมูลคอนเทนเนอร์เช่นการวัดการใช้ CPU บริการทั้งสองนี้สามารถทำงานได้ดังนี้
sudo ) usage: rapl_power_monitor_server.py [-h] [-p PORT] [-w WORKERS]
Container Service Server
optional arguments:
-h, --help show this help message and exit
-p PORT, --port PORT Network port (default: 8091)
-w WORKERS, --workers WORKERS
Max Number of workers (default: 10)
usage: container_service_server.py [-h] [-H HOST] [-p PORT] [-w WORKERS]
Container Service Server
optional arguments:
-h, --help show this help message and exit
-H HOST, --host HOST Network host (default: 0.0.0.0)
-p PORT, --port PORT Network port (default: 8089)
-w WORKERS, --workers WORKERS
Max Number of workers (default: 10)
คำเตือน: ก่อนที่จะเรียกใช้ SLO-Power Manager ตรวจสอบให้แน่ใจว่าแอปพลิเคชันได้รับการอุ่นเครื่องโดยการส่งคำขอจากเครื่องกำเนิดเวิร์กโหลด ตัวอย่างเช่นคำสั่งต่อไปนี้
/workspace/httpmon --url http://0.0.0.0/gw/index.php/Mehmed_II. --concurrency 40 --thinktime 1 --open
เริ่มต้นเครื่องกำเนิดเวิร์กโหลด HTTPMON โดยใช้ไบนารีที่อยู่ที่ไดเรกทอรี /workspace , ส่งคำขอไปยัง HAPROXY HOSTING บน IP 0.0.0.0 ด้วยเส้นทางแอปพลิเคชันของ gw/index.php/ และขอ Mehmed_II. หน้า 40 times per second รายละเอียดเพิ่มเติมของคำสั่งนี้สามารถพบได้ที่นี่
เรามีสคริปต์ทุบตีเพื่อเรียกใช้ไฟล์ SLO-Power Manager Python การใช้สคริปต์มีดังนี้:
./run_slo_power_manager $1 $2 $3 $4 where
$1 --> filepath where experiment files are saved to
$2 --> target SLO (in terms of ms)
$3 --> time granularity that SLO-Power works (1s in our experiments)
$4 --> filepath where HAProxy log file is (Default is /var/log/haproxy.log)
ใน run_slo_power_manager คุณอาจต้องเปลี่ยนคำสั่ง python ที่บรรทัด 31 ตามการตั้งค่าของคุณ ตัวอย่างเช่นหากการโทร python ของคุณเป็น python3 ให้แทนที่ python ด้วย python3 นอกจากนี้ตรวจสอบให้แน่ใจว่าคุณเรียกใช้สคริปต์ run_slo_power_manager.sh ภายในไดเรกทอรี src
ตัวอย่างเช่นคำสั่งสองคำต่อไปนี้
cd SLO-Power/src/
./run_slo_power_manager.sh artifact_eval/test2/ 250 1 /var/log/haproxy.log
การเปลี่ยนแปลงไดเรกทอรีการทำงานปัจจุบันเป็น SLO-Power/src เริ่มต้นการทดลองบันทึกผลลัพธ์ในไดเรกทอรี artifact_eval/test2/ ในขณะที่การกำหนดค่าเป้าหมายเป็น 250 ms พร้อมผลลัพธ์ที่ความละเอียด 1 วินาที ตัวอย่างเอาต์พุตจะผลิต:
Min core: 2, Max core: 16
Current core info of containers: {('192.168.245.51', 'mediawiki-51-1'): 3}
Controller max power limit for node: {('192.168.245.51', 'mediawiki-51-1'): 55}
Target response time of the application: 250 ms
Ref_input: 250
slo_guard: 0.8
Guarded SLO target: 200.0
HAProxy log file is cleared for the initialization purpose.
Initial resource calibration is in progress...
Arrival rate: 41, service rate: 9, expected response time: 0.2 s
Proactive estimated number of core is 11.
Proactively estimated number of core for cluster: 11
{('192.168.245.51', 'mediawiki-51-1'): 0.06}
{('192.168.245.51', 'mediawiki-51-1'): 11}
11 core(s) has been allocated to mediawiki-51-1 hosted on 192.168.245.51.
Power has been set to 77 Watts on 192.168.245.51 due to change in number of core by the proactive scaler.
Initial resource calibration is done :)
Iteration: 1, Estimated number of request: 41, Average response time: 125.66666666666667, Tail response time: 140.9
Proactively scaling up decision is gonna be taken...
To be increased # cores: 0
12 core(s) has been allocated to mediawiki-51-1 hosted on 192.168.245.51.
Power is being set to 80 Watts (increase)
Power has been set to 80 Watts on 192.168.245.51 (Due to inner power scaler loop).
โปรดทราบว่า IP ของเราถูกตั้งค่าเป็น 192.168.245.51 และแตกต่างกันระหว่างเครื่องจักร
สุดท้ายเรามีไฟล์การกำหนดค่าสองไฟล์ซึ่งจำเป็นต้องตั้งค่าหากการทดสอบทำงานที่ระดับเครื่องเดียวหรือระดับคลัสเตอร์ ไฟล์การกำหนดค่าเหล่านี้คือ single_machine.json และ cluster_machines.json ไฟล์เหล่านี้ควรได้รับการแก้ไขตามการตั้งค่าของคุณเอง เราเก็บรหัสการกำหนดค่านี้ไว้ใน slo_power_manager.py ที่ line 28 เป็น machines_config_file = "./single_machine.json" บรรทัดนี้ควรได้รับการอัปเดตด้วยไฟล์การกำหนดค่าที่ขึ้นอยู่กับการตั้งค่าของคุณเช่นการตั้งค่าโหนดเดี่ยวหรือการตั้งค่าคลัสเตอร์ พา ธ ของไฟล์การกำหนดค่านี้อาจมีการเปลี่ยนแปลงในกรณีที่ไม่พบข้อผิดพลาดไฟล์
นอกจากนี้ SLO-Power ยังมีพารามิเตอร์ในการตั้งค่า พารามิเตอร์นี้สามารถตั้งค่าได้ที่ไฟล์ config จากไฟล์การกำหนดค่านี้พารามิเตอร์สองสามตัวนั้นเฉพาะเจาะจงสำหรับการตั้งค่า (ระดับเครื่องเดียวหรือระดับคลัสเตอร์) พารามิเตอร์เหล่านี้ได้รับด้านล่างและควรตั้งค่าตามนั้น
cluster_size พูดถึงจำนวนเครื่องที่ใช้ในการทดลอง (จำนวนเครื่องทั้งหมดที่กล่าวถึงใน single_machine.json , IE, 1 หรือใน cluster_machines.json )
service_rate รักษาอัตราการบริการของแอปพลิเคชันภายใต้การตั้งค่า
ps power_manager_config.json เป็น hardcoded at line 29 เป็น config_file = "./power_manager_config.json คุณอาจต้องอัปเดตพา ธ ตามไดเรกทอรีการทำงานปัจจุบันของคุณหากคุณไม่มีข้อผิดพลาดใด ๆ