Цель этой страницы состоит в том, чтобы предоставить шаги и коды для воспроизведения результатов для следующей статьи:
M. Savasci, et al., «SLO Power: SLO и мощное упругое масштабирование для веб-сервисов», в 2024 году IEEE/ACM 24-й международный симпозиум по кластеру, облачным и интернет-вычислениям (CCGRID), Филадельфия, США, 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, сначала клонируйте репо
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 или sint_machine.json.
Для наших экспериментов мы использовали немецкую Mediawiki с Memcached. Вы можете скачать изображение отсюда:
В качестве альтернативы, вы можете скачать его, используя следующую команду gdown :
gdown 1nZ0pMFGASFhaA4tthHhLlgdFP-RGt5tH
Подробности установки gdown , см. GTHON 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 ):
./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, используя Binary, расположенный AT /workspace Directory, используя следы single_node_level_scaled_wikipedia_traces.out , отправляя запросы на хостинг HAPROXY на IP 0.0.0.0 (измените его в соответствии с конфигурацией вашей сети) и сохранение генератора рабочей нагрузки с помощью v1 PostFix. По умолчанию выход генератора рабочей нагрузки сохраняется в каталоге /tmp .
Мы использовали два реальных трассах рабочей нагрузки: Википедия и лазурные следы. Мы масштабировали как Википедию, так и лазурные следы, учитывая наш размер кластера. Для Википедии мы масштабировали следы между 60 и 240, в то время как мы масштабировали от 100 до 240 для трассов Azure. Все эти следы находятся в каталоге рабочей нагрузки. В дополнение к трассам рабочей нагрузки на уровне кластера, мы также предоставили трассировки рабочей нагрузки на одну узла и в одной и той же папке. Вы должны выбрать их соответственно в зависимости от вашей настройки.
Исходные коды Slo-Power расположены в Directory SRC. Далее мы покажем, как запустить Slo Power.
У нашего Slo-Agent есть два модуля: Power Capper и Allocator.
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 и информацию о контейнере, такую как измерение использования ЦП. Эти два сервиса могут быть выполнены следующими.
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 убедитесь, что приложение нагревается, отправляя запросы из генератора рабочей нагрузки. Например, следующая команда
/workspace/httpmon --url http://0.0.0.0/gw/index.php/Mehmed_II. --concurrency 40 --thinktime 1 --open
Инициирует генератор рабочей нагрузки HTTPMON, используя Binary, расположенный AT /workspace Directory, отправляя запросы на хостинг HAPROXY на IP 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 вам может потребоваться изменить команду 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 мс с результатами при гранулярности 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 , т.е. 1 или в cluster_machines.json )
service_rate сохраняет ставку обслуживания приложения в соответствии с настройкой.
PS Power_manager_config.json жестко кодируется в line 29 как config_file = "./power_manager_config.json . Вам, возможно, потребуется обновить его путь на основе вашего текущего рабочего каталога, если у вас есть ошибка, не найденный файл.