Tujuan dari halaman ini adalah untuk memberikan langkah dan kode untuk mereproduksi hasil untuk makalah berikut:
M. Savasci, dkk., "SLO-Power: SLO dan SCHARE ELASTS SCALING UNTUK LAYANAN WEB," Pada 2024 IEEE/ACM Simposium Internasional ke-24 tentang Cluster, Cloud dan Internet Computing (CCGRID), Philadelphia, USA, 2024.
Di bawah ini, kami menjelaskan secara rinci:
Kami menjalankan Ubuntu Ubuntu 20.04 LTS di server fisik kami. Konfigurasi yang dijelaskan di bawah ini hanya diuji untuk versi tertentu dari sistem operasi.
Kami menggunakan Python versi 3.8.10 dalam pengaturan kami. Karena itu, kami sarankan Anda untuk menggunakan versi yang sama.
SLO-Power membutuhkan modul python berikut:
Kami menghasilkan persyaratan.txt untuk modul python yang diperlukan kecuali modul rapl karena modul eksternal diperoleh dari sini.
Kami menyarankan Anda untuk membuat lingkungan virtual Python dan menginstal modul di dalam lingkungan virtual ini. Untuk menginstal dari requirements.txt , jalankan perintah berikut:
pip install -r /path/to/requirements.txt
Untuk menginstal modul rapl, klon repo terlebih dahulu
git clone https://github.com/wkatsak/py-rapl.git
Kemudian, pergi ke bagian dalam direktori dan lari
pip install .
Perintah ini akan menggunakan setup.py untuk menginstal modul rapl.
Kami menggunakan LXD Versi 5.19 untuk pengelompokan dan oleh karena itu penyebaran aplikasi. LXD dapat diinstal menggunakan Snap Package Manager. Untuk menginstalnya,
sudo snap install lxd --channel=5.19/stable
Jika Anda sudah memiliki LXD di mesin Anda, Anda dapat beralih ke versi 5.19 menggunakan perintah berikut
sudo snap refresh lxd --channel=5.19/stable
Kami menyediakan file json untuk memberi tahu SLO-Power Manager untuk mengetahui mesin di cluster. Untuk tujuan ini, silakan lihat dan perbarui file cluster_machines.json atau single_machine.json.
Untuk percobaan kami, kami menggunakan Mediawiki Jerman dengan memcached. Anda dapat mengunduh gambar dari sini:
Atau, Anda dapat mengunduhnya menggunakan perintah gdown berikut:
gdown 1nZ0pMFGASFhaA4tthHhLlgdFP-RGt5tH
Untuk detail instalasi gdown , silakan lihat Github Github Repo.
Setelah Anda mengunduh tarball gambar wadah, Anda perlu memulihkan dan membuat wadah darinya. Untuk melakukan ini, jalankan perintah berikut:
PS Sebelum menjalankan perintah di atas, Anda perlu memastikan bahwa Anda menjalankan lxd init untuk tujuan inisialisasi.
lxc image import mediawiki_german_with_memcached.tar.gz --alias {IMAGE_NAME}
lxc launch {IMAGE_NAME} {CONTAINER_NAME}
Untuk melihat apakah wadah sudah habis, silakan jalankan
lxc list
Perdagangan dan pastikan wadah berjalan.
Selain langkah -langkah di atas, kami menambahkan proxy ke wadah untuk menerima permintaan dari Haproxy. Kami pada dasarnya melakukan penerusan port di sini.
Untuk menambahkan proxy, silakan jalankan perintah berikut.
lxc config device add {CONTAINER_NAME} {PROXY_NAME} proxy listen=tcp:0.0.0.0:{PORT_NUMBER} connect=tcp:127.0.0.1:80
Kami menggunakan haproxy v2.7.10 di depan server backend untuk penyeimbangan beban. Anda perlu menginstal Haproxy terlebih dahulu. Itu bisa diinstal
sudo apt install haproxy=2.7.10-1ppa1~bionic
Untuk memverifikasi itu diinstal, jalankan:
haproxy -v
Perintah ini harus menampilkan nomor versi Haproxy yang diinstal.
Setelah Haproxy diinstal, file konfigurasinya yang terletak di /etc/haproxy/haproxy.cfg perlu diedit. Untuk kenyamanan, kami membuktikan file konfigurasi ini sebagai haproxy.cfg. Dalam file ini, parameter CONTAINER_NAME , IP_ADDRESS_OF_MACHINE_HOSTING_CONTAINER , dan PORT_NUMBER_OF_CONTAINER harus disediakan. Di sini, CONTAINER_NAME adalah wadah yang kami buat sebelumnya yang host aplikasi Mediawiki mana. Selain itu, PORT_NUMBER_OF_CONTAINER harus sama dengan yang saat membuat proxy untuk wadah.
Kami menginisialisasi parameter di atas dengan beberapa nilai dalam gambar ini. Karena itu, Anda perlu mengaturnya dengan nilai yang benar.
Kami juga menyediakan gambar LXC Haproxy untuk kenyamanan Anda. Itu bisa diunduh dari sini
Atau, Anda dapat mengunduhnya menggunakan perintah gdown berikut:
gdown 1KtDZeMU-2enfnRhV5l147G-VW8CjHJHE
Setelah Anda mengunduh tarball gambar wadah, Anda perlu memulihkan dan membuat wadah darinya. Untuk melakukan ini, jalankan perintah berikut:
lxc image import haproxy_container.tar.gz --alias {IMAGE_NAME}
lxc launch {IMAGE_NAME} {CONTAINER_NAME}
Generator beban kerja disediakan di Direktori Generator Beban Kerja. Generator beban kerja kami didasarkan pada generator beban kerja httpmon. Untuk detail instalasi, silakan lihat di sini. Penggunaan generator beban kerja adalah sebagai berikut (anggap itu disebut direktori 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
Misalnya, perintah berikut
./generator.sh /workspace/httpmon 0.0.0.0 /SLO-Power/workload-traces/single_node_level_scaled_wikipedia_traces.out v1
Memulai generator beban kerja httpmon, menggunakan biner yang terletak di /workspace Directory, menggunakan jejak single_node_level_scaled_wikipedia_traces.out , mengirim permintaan ke hosting haphoxy di IP 0.0.0.0 (ubah sesuai dengan konfigurasi jaringan Anda), dan menghemat output generator v1 . Secara default, output generator beban kerja disimpan di bawah /tmp Directory.
Kami menggunakan dua jejak beban kerja nyata: jejak Wikipedia dan Azure. Kami meningkatkan jejak Wikipedia dan Azure mengingat ukuran cluster kami. Untuk Wikipedia, kami meningkatkan jejak antara 60 dan 240, sementara kami meningkatkan antara 100 dan 240 untuk jejak Azure. Semua jejak ini berada di bawah direktori jejak beban kerja. Selain jejak beban kerja level cluster, kami menyediakan jejak beban kerja level simpul tunggal di folder yang sama juga. Anda harus memilihnya berdasarkan pengaturan Anda.
Kode sumber kekuatan SLO terletak di bawah direktori SRC. Berikut ini, kami akan menunjukkan cara menjalankan SLO-Power.
Slo-agent kami memiliki dua modul: Power Capper dan Core Alocator.
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)
Kami juga mengembangkan dua layanan untuk memberikan pengukuran daya melalui antarmuka Intel Rapl dan informasi kontainer seperti pengukuran pemanfaatan CPU. Kedua layanan ini dapat dijalankan sebagai berikut.
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)
PERINGATAN: Sebelum menjalankan SLO-Power Manager, pastikan aplikasi itu dipanaskan dengan mengirimkan permintaan dari generator beban kerja. Misalnya, perintah berikut
/workspace/httpmon --url http://0.0.0.0/gw/index.php/Mehmed_II. --concurrency 40 --thinktime 1 --open
Memulai generator beban kerja httpmon, menggunakan biner yang berlokasi di /workspace Directory, mengirimkan permintaan ke hosting Huraproxy di IP 0.0.0.0 dengan jalur aplikasi gw/index.php/ , dan meminta Mehmed_II. halaman 40 times per second . Rincian lebih lanjut dari perintah ini dapat ditemukan di sini.
Kami menyediakan skrip bash untuk menjalankan file python manajer slo-power. Penggunaan skrip adalah sebagai berikut:
./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)
Di run_slo_power_manager , Anda mungkin perlu mengubah perintah python di baris 31 berdasarkan pengaturan Anda. Misalnya, jika panggilan python Anda adalah sebagai python3 , maka ganti python dengan python3 . Juga, pastikan Anda mengeksekusi run_slo_power_manager.sh skrip di dalam direktori src .
Misalnya, dua perintah berikut
cd SLO-Power/src/
./run_slo_power_manager.sh artifact_eval/test2/ 250 1 /var/log/haproxy.log
Mengubah Direktori Kerja Saat Ini ke SLO-Power/src , memulai percobaan, menyimpan hasil dalam direktori artifact_eval/test2/ , sambil mengkonfigurasi target menjadi 250 ms dengan hasil pada granularitas 1 detik. Output sampel akan menghasilkan:
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).
Perhatikan bahwa IP kami diatur ke 192.168.245.51 dan berbeda antara mesin.
Akhirnya, kami menyediakan dua file konfigurasi yang diperlukan untuk mengatur jika percobaan berjalan pada level mesin tunggal atau level cluster. File konfigurasi ini adalah single_machine.json dan cluster_machines.json. File -file ini harus dimodifikasi berdasarkan pengaturan Anda sendiri. Kami hardcoded file konfigurasi ini di slo_power_manager.py di line 28 sebagai machines_config_file = "./single_machine.json" . Baris ini harus diperbarui dengan file konfigurasi yang didasarkan pada pengaturan Anda, yaitu, pengaturan simpul tunggal atau pengaturan cluster. Jalur file konfigurasi ini dapat diubah jika file tidak ditemukan kesalahan.
Selain itu, SLO-Power memiliki parameter untuk diatur. Parameter ini dapat diatur pada file konfigurasi. Dari file konfigurasi ini, beberapa parameter khusus untuk pengaturan (level mesin tunggal atau level cluster). Parameter ini diberikan di bawah ini dan harus ditetapkan sesuai.
cluster_size untuk menyebutkan berapa banyak mesin yang digunakan dalam percobaan (jumlah total mesin yang disebutkan dalam single_machine.json , yaitu, 1 atau di cluster_machines.json )
service_rate menjaga tingkat layanan aplikasi di bawah pengaturan.
PS Power_Manager_config.json hardcoded di line 29 sebagai config_file = "./power_manager_config.json . Anda mungkin perlu memperbarui jalurnya berdasarkan direktori kerja Anda saat ini jika Anda memiliki file yang tidak ditemukan kesalahan.