이 페이지의 목표는 다음 논문의 결과를 재현하는 단계와 코드를 제공하는 것입니다.
M. Savasci, et al., "Slo-Power : 웹 서비스에 대한 SLO 및 전력 인식 탄성 스케일링", 2024 년 IEEE/ACM 24RD 국제 클러스터, 클라우드 및 인터넷 컴퓨팅 (CCGRID), Philadelphia, USA, 2024.
아래는 자세히 설명합니다.
우리는 물리적 서버에서 Ubuntu Ubuntu 20.04 lts를 실행합니다. 아래에 설명 된 구성은 해당 특정 버전의 운영 체제에 대해서만 테스트되었습니다.
우리는 설정에서 Python 버전 3.8.10을 사용했습니다. 따라서 동일한 버전을 사용하는 것이 좋습니다.
SLO-Power에는 다음과 같은 파이썬 모듈이 필요합니다.
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
SLO-Power Manager가 클러스터의 기계를 알 수 있도록 json 파일을 제공합니다. 이를 위해 Cluster_Machines.json 또는 Single_Machine.json 파일을 참조하십시오.
실험을 위해, 우리는 독일 미디어 위키를 memcached와 함께 사용했습니다. 여기에서 이미지를 다운로드 할 수 있습니다.
또는 다음 gdown 명령을 사용하여 다운로드 할 수 있습니다.
gdown 1nZ0pMFGASFhaA4tthHhLlgdFP-RGt5tH
gdown 의 설치 세부 정보는 Gdown Github Repo를 참조하십시오.
컨테이너 이미지 Tarball을 다운로드 한 후에는 컨테이너를 복원하고 만들어야합니다. 이렇게하려면 다음 명령을 실행하십시오.
추신 위의 명령을 실행하기 전에 초기화 목적으로 lxd init 실행해야합니다.
lxc image import mediawiki_german_with_memcached.tar.gz --alias {IMAGE_NAME}
lxc launch {IMAGE_NAME} {CONTAINER_NAME}
컨테이너가 올라 있는지 확인하려면 실행하십시오
lxc list
쉼표로 컨테이너가 실행되는지 확인하십시오.
위의 단계 외에도 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
/workspace 디렉토리에 위치한 바이너리를 사용하여 httpmon 워크로드 생성기를 시작하고, single_node_level_scaled_wikipedia_traces.out 의 흔적을 사용하고, 0.0.0.0 의 IP에서 Haproxy 호스팅에 요청을 보내고 (네트워크 구성에 따라 변경) v1 Postfix를 사용한 워크로드 발전기 출력을 저장합니다. 기본적으로 워크로드 생성기 출력은 /tmp 디렉토리 아래에 저장됩니다.
우리는 Wikipedia와 Azure 흔적의 두 가지 실제 작업량 흔적을 사용했습니다. 우리는 클러스터 크기를 고려하여 Wikipedia와 Azure 흔적을 모두 확장했습니다. Wikipedia의 경우 60에서 240 사이의 흔적을 조정하는 반면, 우리는 Azure 트레이스의 경우 100에서 240 사이의 스케일링을했습니다. 이 모든 흔적은 Workload-Traces 디렉토리 아래에 있습니다. 클러스터 레벨 워크로드 흔적 외에도 동일한 폴더에서 단일 노드 레벨 워크로드 트레이스를 제공했습니다. 설정에 따라 그에 따라 선택해야합니다.
SLO-Power의 소스 코드는 SRC 디렉토리 아래에 있습니다. 다음에서는 슬로 파워를 실행하는 방법을 보여줄 것입니다.
우리의 슬로 그는 파워 캡퍼와 코어 할당 자의 두 가지 모듈이 있습니다.
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
/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 스크립트를 실행해야합니다.
예를 들어 다음 두 명령
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 로 설정되었으며 기계마다 다릅니다.
마지막으로, 실험이 단일 기계 레벨 또는 클러스터 레벨에서 실행되는 경우 설정 해야하는 두 개의 구성 파일을 제공합니다. 이 구성 파일은 Single_Machine.json 및 Cluster_Machines.json입니다. 이 파일은 자체 설정에 따라 수정해야합니다. 이 구성 파일을 slo_power_manager.py에서 line 28 에서 machines_config_file = "./single_machine.json" 으로 하드 코딩했습니다. 이 줄은 설정, 즉 단일 노드 설정 또는 클러스터 설정을 기반으로하는 구성 파일로 업데이트되어야합니다. 이 구성 파일의 경로는 파일을 찾을 수없는 경우에 변경 될 수 있습니다.
또한 SLO-Power에는 설정 할 매개 변수가 있습니다. 이 매개 변수는 구성 파일에서 설정할 수 있습니다. 이 구성 파일에서 몇 가지 매개 변수는 설정 (단일 기계 레벨 또는 클러스터 레벨)에 따라 다릅니다. 이 매개 변수는 아래에 주어져 있으며 그에 따라 설정해야합니다.
cluster_size 실험에 얼마나 많은 기계가 사용되는지를 언급하는 것입니다 ( single_machine.json , IE, 1 또는 cluster_machines.json 에서 언급 된 기계 수).
service_rate 설정 하에서 응용 프로그램의 서비스 속도를 유지합니다.
ps power_manager_config.json은 line 29 에서 config_file = "./power_manager_config.json 으로 하드 코딩되었습니다. 파일이없는 경우 현재 작업 디렉토리를 기반으로 경로를 업데이트해야 할 수도 있습니다.