此頁面的目的是提供步驟和代碼,以重現以下論文的結果:
M. Savasci等人,“ Slo-Power:SLO和Power-Waise Web服務的彈性縮放”,2024年IEEE/ACM 24屆國際集群,雲和Internet Computing(CCGRID)的國際研討會,美國費城,美國,2024年。
下面,我們詳細描述:
我們在物理服務器上運行Ubuntu Ubuntu 20.04 LTS。以下所述的配置僅針對該特定版本的操作系統進行了測試。
我們在設置中使用了Python版本3.8.10。因此,我們建議您使用相同的版本。
SLO-Power需要以下Python模塊:
我們生成了要求的python模塊,除了RAPL模塊外,我們生成了需求。因為它是從此處獲得的外部模塊。
我們建議您創建一個虛擬環境並在此虛擬環境中安裝模塊。要從requirements.txt安裝,請運行以下命令:
pip install -r /path/to/requirements.txt
要安裝RAPL模塊,請首先克隆回購
git clone https://github.com/wkatsak/py-rapl.git
然後,轉到目錄的內部並運行
pip install .
此命令將使用setup.py安裝RAPL模塊。
我們使用LXD版本5.19進行聚類,因此使用了應用程序部署。可以使用SNAP軟件包管理器安裝LXD。要安裝它,
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的安裝詳細信息,請參閱GDown 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是我們之前創建的容器,哪個host 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}
工作負載生成器在工作負載生成器目錄中提供。我們的工作負載生成器基於HTTPMON Workload Generator。有關安裝詳細信息,請參閱此處。使用工作負載生成器的使用如下(假設它在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
使用位於/workspace目錄的二進製文件啟動HTTPMON Workload Generator,使用single_node_level_scaled_wikipedia_traces.out的痕跡,將請求發送到IP上的Haproxy Hosting 0.0.0.0 (根據您的網絡配置進行更改)(根據您的網絡配置),並保存Workload General Exputator fation v1 portfix portfix。默認情況下,工作負載生成器輸出在/tmp目錄下保存。
我們使用了兩個真正的工作負載軌跡:Wikipedia和Azure Traces。考慮到我們的集群大小,我們縮放了Wikipedia和Azure痕跡。對於Wikipedia,我們在60到240之間縮放了痕跡,而我們為Azure痕跡縮放了100至240。所有這些痕跡都在工作負載軌跡目錄下。除了群集級別的工作負載軌跡外,我們還提供了同一文件夾中的單節點級別工作負載跟踪。您應該根據您的設置相應地選擇它們。
SLO-Power的源代碼位於SRC目錄下。在下文中,我們將展示如何運行Slo-Power。
我們的Slo-Agent有兩個模塊:電源帽和核心分配器。
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-PTOR經理之前,請確保通過從工作負載生成器發送請求來加熱應用程序。例如,以下命令
/workspace/httpmon --url http://0.0.0.0/gw/index.php/Mehmed_II. --concurrency 40 --thinktime 1 --open
使用位於/workspace目錄的二進製文件啟動HTTPMON Workload Generator,將請求發送給IP上的Haproxy託管0.0.0.0 ,並帶有gw/index.php/的應用程序路徑,並請求Mehmed_II. 40 times per second 。此命令的更多詳細信息可以在此處找到。
我們提供一個BASH腳本來運行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中,您可能需要根據設置在第31行更改python命令。例如,如果您的python調用為python3 ,請用python3替換python 。另外,請確保您在src目錄中執行run_slo_power_manager.sh腳本。
例如,以下兩個命令
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 s。樣本輸出將產生:
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。這些文件應根據您自己的設置進行修改。我們在line 28中的slo_power_manager.py中的該配置文件進行了硬編碼,以machines_config_file = "./single_machine.json" 。該行應使用基於您的設置,即,單節設置或群集設置的配置文件更新。如果找不到錯誤,可以更改此配置文件的路徑。
此外,SLO-Power還需要設置參數。可以在配置文件上設置此參數。從此配置文件中,一些參數特定於設置(單機級或群集級別)。這些參數在下面給出,應相應設置。
cluster_size是在實驗中使用多少機器( single_machine.json中提到的機器總數,即,1或cluster_machines.json )
service_rate保留設置下的申請的服務率。
PS power_manager_config.json在line 29中為config_file = "./power_manager_config.json 。