このページの目的は、次の論文の結果を再現するための手順とコードを提供することです。
M. Savasci、et al。、「Slo-Power:SLOおよびPower-Aware Elastic Scaling for Web Services」、2024 IEEE/ACM 24rd International Symposium on Cluster、Cloud and Internet Computing(CCGRID)、フィラデルフィア、米国、2024年。
以下では、詳細に説明してください。
物理サーバーでUbuntu Ubuntu 20.04 LTSを実行します。以下で説明する構成は、その特定のバージョンのオペレーティングシステムについてのみテストされました。
セットアップでPythonバージョン3.8.10を使用しました。したがって、同じバージョンを使用することをお勧めします。
SLO-Powerには、次のPythonモジュールが必要です。
ここから取得した外部モジュールであるため、RAPLモジュールを除く必要なPythonモジュールの要件を生成しました。
Python仮想環境を作成し、この仮想環境内にモジュールをインストールすることをお勧めします。 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を使用しました。 LXDは、SNAPパッケージマネージャーを使用してインストールできます。インストールするには、
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ファイルを参照して更新してください。
実験では、ドイツのメディアウィキをmemcachedで使用しました。ここから画像をダウンロードできます。
または、次のgdownコマンドを使用してダウンロードできます。
gdown 1nZ0pMFGASFhaA4tthHhLlgdFP-RGt5tH
gdownのインストールについては、GDOWS Github Repoを参照してください。
コンテナイメージのターボールをダウンロードした後、復元してコンテナを作成する必要があります。これを行うには、次のコマンドを実行します。
PS上記のコマンドを実行する前に、初期化の目的でlxd initを実行することを確認する必要があります。
lxc image import mediawiki_german_with_memcached.tar.gz --alias {IMAGE_NAME}
lxc launch {IMAGE_NAME} {CONTAINER_NAME}
容器が上がっているかどうかを確認するには、実行してください
lxc list
commhandとコンテナが実行されることを確認してください。
上記の手順に加えて、コンテナにプロキシを追加して、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/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
コンテナイメージのターボールをダウンロードした後、復元してコンテナを作成する必要があります。これを行うには、次のコマンドを実行します。
lxc image import haproxy_container.tar.gz --alias {IMAGE_NAME}
lxc launch {IMAGE_NAME} {CONTAINER_NAME}
ワークロードジェネレーターは、WorkLoad-Generator Directoryで提供されます。ワークロードジェネレーターは、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
single_node_level_scaled_wikipedia_traces.outのtracesを使用して、 /workspaceディレクトリにあるバイナリを使用して、httpmonワークロードジェネレーターを開始し、 0.0.0.0のIPでHaproxyホスティングにリクエストを送信します(ネットワーク構成に応じて変更)、 v1 POSTFIXでワークロードジェネレーター出力を節約します。デフォルトでは、ワークロードジェネレーター出力は/tmpディレクトリの下に保存されます。
ウィキペディアとAzureトレースの2つの実際のワークロードトレースを使用しました。クラスターサイズを考慮して、ウィキペディアとAzureトレースの両方をスケーリングしました。 Wikipediaの場合、Azureトレースで100〜240の間でスケーリングされ、60〜240のトレースをスケーリングしました。これらのトレースはすべて、ワークロードトレースディレクトリの下にあります。クラスターレベルのワークロードトレースに加えて、同じフォルダーにシングルノードレベルのワークロードトレースも提供しました。セットアップに基づいてそれに応じて選択する必要があります。
SLO-Powerのソースコードは、SRCディレクトリの下にあります。以下では、SLO-Powerの実行方法を示します。
SLO-Agentには、Power CapperとCore Allocatorの2つのモジュールがあります。
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使用率測定などのコンテナ情報を介して電力測定を提供する2つのサービスを開発しました。これらの2つのサービスは次のように実行できます。
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
/workspaceディレクトリにあるバイナリを使用して、httpmonワークロードジェネレーターを開始し、 gw/index.php/のアプリケーションパスで0.0.0.0のIPでHaproxyホスティングにリクエストを送信し、 Mehmed_II. 40 times per second 。このコマンドの詳細については、こちらをご覧ください。
Slo-Power Manager Pythonファイルを実行するBASHスクリプトを提供します。スクリプトの使用は次のとおりです。
./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と同じ場合は、 python python3に置き換えます。また、 srcディレクトリ内でrun_slo_power_manager.shスクリプトを実行するようにしてください。
たとえば、次の2つのコマンド
cd SLO-Power/src/
./run_slo_power_manager.sh artifact_eval/test2/ 250 1 /var/log/haproxy.log
現在のワーキングディレクトリをSLO-Power/srcに変更し、実験を開始し、ディレクトリartifact_eval/test2/の結果を節約し、 1秒の粒度で結果でターゲットを250ミリ秒に設定します。サンプル出力が生成されます。
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に設定されており、マシン間で異なることに注意してください。
最後に、実験が単一のマシンレベルまたはクラスターレベルで実行された場合に設定する必要がある2つの構成ファイルを提供します。これらの構成ファイルは、single_machine.jsonとcluster_machines.jsonです。これらのファイルは、独自のセットアップに基づいて変更する必要があります。この構成ファイルを、 line 28のslo_power_manager.pyで、 machines_config_file = "./single_machine.json"としてハードコードしました。この行は、セットアップ、IE、シングルノードのセットアップ、またはクラスターのセットアップに基づいた構成ファイルで更新する必要があります。この構成ファイルのパスは、ファイルが見つからない場合に変更される場合があります。
さらに、SLO-Powerにはセットアップするパラメーターがあります。このパラメーターは、構成ファイルで設定できます。この構成ファイルから、いくつかのパラメーターがセットアップに固有のものです(シングルマシンレベルまたはクラスターレベル)。これらのパラメーターを以下に示し、それに応じて設定する必要があります。
cluster_size 、実験で使用されるマシンの数に言及することです( single_machine.json 、ie、1またはcluster_machines.jsonで言及されているマシンの総数)
service_rate 、セットアップの下でアプリケーションのサービスレートを保持します。
PS Power_manager_config.jsonは、 config_file = "./power_manager_config.jsonとしてline 29にハードコードされています。エラーが見つからない場合は、現在のワーキングディレクトリに基づいてパスを更新する必要があります。