Система распределения нагрузки на процессоры Shenango — как она работает

Технологии
19.08.2019
77
10 min

Система распределения нагрузки на процессоры Shenango — как она работает

#функциональность

[caption id="attachment_5960" align="aligncenter" width="1300"]

Система распределения нагрузки на процессоры Shenango — как она работает

/ фото

The Nigmatic

Unsplash[/caption] Говорим о балансировщике нагрузки от инженеров MIT, который планируют использовать в ЦОД. В статье — о принципах работы и возможностях решения.


Цель разработки

Аналитики одного из крупных облачных провайдеров

говорят

, что мировые ЦОД используют треть имеющихся у них вычислительных ресурсов. В исключительных случаях этот показатель может вырастать до 60%. Из-за неэффективного расходования мощностей в машинных залах появляются так называемые серверы-зомби. Они не выполняют полезную работу (находятся в состоянии «комы») и лишь впустую расходуют электричество. По данным Uptime Institute, без работы стоит около 10 млн серверов (это 30% всех машин). На поддержание их работоспособности ежегодно уходит 30 млрд долларов. Инженеры из Массачусетского технологического института (MIT) решили исправить ситуацию. Они разработали балансировщик нагрузки, который в теории повысит эффективность использования ресурсов процессоров до 100%. Система получила название Shenango.

Как работает балансировщик

Shenango — это Linux-библиотека на языке программирования C (есть

биндинги

на Rust и C++). Она мониторит буфер задач CPU и распределяет процессы между свободными ядрами. В основе системы лежит алгоритм IOKernel. Он запускается на отдельном ядре процессора и управляет запросами к CPU, которые поступают

по сетевому интерфейсу NIC

. Для этих целей IOKernel использует фреймворк DPDK (Data Plane Development Kit). Фреймворк дает приложениям возможность «общаться» с сетевыми картами напрямую. Когда процессору поступает новая задача, IOKernel самостоятельно выбирает, какому ядру (или ядрам) ее передать. При этом для каждого процесса выделяются основные ядра (guaranteed) и вспомогательные (burstable) — последние подключаются только в том случае, если количество запросов резко возрастает. Алгоритм проверяет буфер задач с интервалом в 5 мкс. Он ищет «застрявшие» процессы, которые CPU уже долгое время не может обработать. Если таковые обнаруживаются, они сразу же назначаются свободным ядрам (или другим серверам в дата-центре). Приоритет отдается ядрам, на которых уже выполнялся аналогичный процесс и часть информации о котором осталась в кэше. Чтобы повысить эффективность балансировки, Shenango также использует метод

work stealing

. Ядра, работающие с одним приложением, автоматически снимают друг с друга часть нагрузки, если выполняют свои задачи раньше остальных. Общую схему работы алгоритма IOKernel и системы Shenango можно представить следующим образом:

Общая схема работы алгоритма IOKernel и системы Shenango

Код проекта и примеры приложений вы можете найти в официальном

репозитории на GitHub

.

Возможности

Разработчики говорят, что Shenango способен обрабатывать 5 млн запросов в секунду. Среднее время реакции при этом составляет 37 мкс. Эксперты ИТ-индустрии отмечают, что система поможет оптимизировать работу веб-приложений, например онлайн-магазинов. По статистике, секундная задержка при загрузке страницы снижает количество просмотров на 11%, что в дни распродаж может быть критично. Эффективное распределение нагрузки поможет обслужить большее количество клиентов. Сейчас инженеры из MIT работают над устранением недостатков и расширением функциональности своего решения. Пока что Shenango не умеет работать с многопроцессорными NUMA-системами. В них чипы подключены к различным модулям памяти и не могут взаимодействовать друг с другом напрямую. Такой подход усложняет распределение нагрузки: IOKernel может контролировать работу отдельного кластера процессоров, но не все устройства сервера.

Кто еще разрабатывает балансировщики нагрузки на CPU

Не только в MIT занимаются разработкой систем распределения нагрузки на процессоры. В качестве еще одного примера можно привести систему Arachne — это библиотека C++ для Linux (код

есть на GitHub

, документацию по API можно найти

на официальном сайте

). Arachne рассчитывает, сколько ядер понадобится конкретному приложению, и выделяет необходимое количество при запуске соответствующего процесса. [caption id="attachment_5962" align="aligncenter" width="1300"]

Кто еще разрабатывает балансировщики нагрузки на CPU

/ фото

Brian Kostiuk

Unsaplsh[/caption] Еще одним примером балансировщика может служить

ZygOS

— специализированная операционная система, которая использует структуры данных с общей памятью, NIC с несколькими очередями и межпроцессорные прерывания для распределения нагрузки между ядрами. Как и Shenango (

в отличие от Arachne

), решение также использует подход work stealing. Код проекта можно

найти на GitHub

. Современные дата-центры становятся все крупнее. В мире уже построено более четырехсот гипермасштабируемых ЦОД. В ближайшее время их число вырастет еще на 30%. Технологии балансировки нагрузки позволят эффективнее расходовать вычислительные ресурсы. Поэтому решения подобные Shenango, ZygOS и Arachne будут становиться все более востребованными — уже сейчас их внедряют крупные корпорации.

Что еще почитать в нашем блоге по теме:




Павел Игнатьев
Профильный эксперт