Новый балансировщик нагрузки на CPU от MIT +15



Систему Shenango планируют использовать в дата-центрах.


/ фото Marco Verch CC BY

По данным одного из провайдеров, дата-центры используют всего 20–40% доступных вычислительных мощностей. При высоких нагрузках этот показатель может достигать 60%. Подобное распределение ресурсов ведет к появлению так называемых «зомби-серверов». Это машины, которые большую часть времени простаивают, впустую расходуя электроэнергию. Сегодня 30% серверов в мире стоят без работы, потребляя электричество на $30 млрд в год.

Бороться с неэффективным расходованием вычислительных ресурсов решили в MIT.

Команда инженеров разработала систему балансировки нагрузки на процессоры под названием Shenango. Её цель — мониторить состояние буфера задач и перераспределять «застрявшие» процессы (которые не могут получить процессорное время) на свободные машины.

Как работает Shenango


Shenango представляет собой Linux-библиотеку на языке C с байндингами Rust и C++. Код проекта и тестовые приложения опубликованы в репозитории на GitHub.

Основу решения составляет алгоритм IOKernel, который запускается на выделенном ядре мультипроцессорной системы. Он управляет запросами к CPU с помощью фреймворка DPDK, который позволяет приложениям напрямую взаимодействовать с сетевыми устройствами.

IOKernel решает, каким ядрам передать конкретную задачу. Алгоритм также решает, сколько ядер понадобится. Для каждого процесса определяются основные ядра (guaranteed) и дополнительные (burstable) — вторые запускаются в случае резкого увеличения числа запросов к CPU.

Очередь запросов IOKernel организована в виде кольцевого буфера. Каждые пять микросекунд алгоритм проверяет, все ли задачи, назначенные ядру, выполнены. Для этого он сравнивает текущее местоположение «головы» буфера с предыдущей позицией его «хвоста». Если оказывается, что хвост уже был в очереди на момент предыдущей проверки, система отмечает перегрузку буфера и выделяет под процесс дополнительное ядро.

При распределении нагрузки приоритет отдаётся ядрам, на которых такой же процесс выполнялся раньше и частично остался в кэш-памяти, или любым бездействующим ядрам.



Shenango дополнительно использует подход work stealing. Ядра, выделенные для работы одного приложения, следят за количеством задач друг у друга. Если одно ядро заканчивает свой список заданий раньше остальных, то оно «снимает» часть нагрузки с соседей.

Достоинства и недостатки


По словам инженеров из MIT, Shenango способен обрабатывать пять миллионов запросов за секунду и поддерживать среднее время реакции в 37 микросекунд. Специалисты утверждают, что в некоторых случаях технология способна повысить коэффициент использования процессоров в дата-центрах до 100%. В результате операторы ЦОД смогут экономить на покупке и обслуживании серверов.

Потенциал решения отмечают и специалисты из других университетов. По мнению профессора из корейского института, система из MIT поможет сократить задержки в работе веб-сервисов. Например, она пригодится в работе онлайн-магазинов. В дни распродаж даже секундная задержка загрузки страницы приводит к снижению числа просмотров сайта на 11%. Оперативное распределение нагрузки поможет обслужить больше клиентов.

У технологии пока есть недостатки — она не поддерживает многопроцессорные NUMA-системы, в которых чипы подключены к разным модулям памяти и не «общаются» между собой. В этом случае IOKernel может регулировать работу отдельной группы процессоров, но не все чипы сервера.


/ фото Tim Reckmann CC BY

Аналогичные технологии


Среди других систем балансировки нагрузки на процессоры можно выделить Arachne. Она рассчитывает, сколько ядер понадобится приложению в момент его запуска, и распределяет процессы в соответствии с этим показателем. По оценкам авторов, максимальная задержка работы приложения в Arachne составляет около 10 тыс. микросекунд.

Технология реализована в виде библиотеки C++ для Linux, а её исходный код есть на GitHub.

Ещё один инструмент-балансировщик — ZygOS. Как и Shenango, технология использует для перераспределения процессов метод work stealing. По данным авторов ZygOS, средняя задержка в работе приложений при использовании инструмента составляет около 150 микросекунд, а максимальная — около 450 микросекунд. Код проекта также находится в открытом доступе.

Выводы


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



Посты из Первого блога о корпоративном IaaS:

Вы можете помочь и перевести немного средств на развитие сайта



Комментарии (6):

  1. Revertis
    /#19995320

    Сегодня 30% серверов в мире стоят без работы, потребляя электричество на $30 млрд в год.
    И как эта технология позволяет выключать сервера и включать их вновь? :)

    • mediaman
      /#19995484

      Причем здесь выключение серверов? Система просто будет нагружать существующие машины более эффективно. И один и тот же набор задач можно выполнить на меньшем количестве серверов. А если адаптируют систему для глобальных систем, то можно будет дополнительно экономить на электричестве – сильнее нагружать дата-центры в тех регионах, где электричество дешевле. Собственно, MIT в этом направлении уже как-то работали

      • Revertis
        /#19995506

        Но так проблема сформулирована вот так:

        Сегодня 30% серверов в мире стоят без работы, потребляя электричество на $30 млрд в год.
        А данный софт разработан не для управления серверами, а для управления ядрами процессора, ведь так?

      • jaguard
        /#19996100 / +1

        >>Система просто будет нагружать существующие машины более эффективно

        Т.е. простаивать будет уже не 30%, а 40% серверов, да?

        • fedorro
          /#20004106

          Нет, не так. При увеличении нагрузки можно или закупить еще серверов, которые тоже будут простаивать на 30%, или при помощи этого планировщика распихать возросшую нагрузку по этим 30%, и тогда простаивать будет 0% серверов, в идеале.

          Ну или поставить этот планировщик и выключить 30% серверов, получим 0% простоя при той же нагрузке.

  2. achekalin
    /#19995672

    Будем честны: затраты энергии учтены в бизнес-план ах и заложены в тарифы. А когда распределение улучшится, цены вниз не пойдут не только на 30%, но даже на копейку.


    И, да, у больших игроков разгон виртуалок с хостов и выключение хостов, а затем включение их обратно давно реализованы. Вопрос только в алгоритме: новый может освобождать ещё больше хост-машин, полагаю.