Достижение большей эффективности для быстрой работы центра обработки данных

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

Современные центры обработки данных съедают и тратят много энергии, отвечая на запросы пользователей максимально быстро, с задержкой всего в несколько микросекунд. Новая система, разработанная исследователями MIT, повышает эффективность высокоскоростных операций за счет лучшего распределения чувствительной ко времени обработки данных между ядрами центрального процессора (ЦП) и обеспечения продуктивной работы оборудования.

Центры обработки данных работают как распределенные сети, а многочисленные веб-приложения и мобильные приложения реализованы на одном сервере. Когда пользователи отправляют запросы в приложение, биты хранимых данных извлекаются из сотен или тысяч служб на столько же серверов. Перед отправкой ответа приложение должно дождаться, пока самый медленный сервис обработает данные. Это время задержки известно как задержка хвоста.

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

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

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

«В центрах обработки данных существует компромисс между эффективностью и задержкой, и вам действительно нужно перераспределять ядра с более тонкой гранулярностью, чем каждую миллисекунду», — говорит первый автор Эми Оустерхаут, аспирант Лаборатории компьютерных наук и искусственного интеллекта (CSAIL). Shenango позволяет серверам «управлять операциями, которые происходят в очень короткие сроки и делают это эффективно».

Экономия энергии и затрат будет зависеть от центра обработки данных, в зависимости от размера и рабочих нагрузок. Но общая цель — повысить загрузку ЦП центра обработки данных, чтобы каждое ядро было эффективно использовано. Наилучшие показатели использования ЦП сегодня составляют около 60 процентов, но исследователи говорят, что их система потенциально может повысить этот показатель до 100 процентов.

«Сегодня использование ЦОД довольно низкое», — говорит соавтор Адам Белэй, доцент кафедры электротехники и компьютерных наук и исследователь CSAIL. «Это очень серьезная проблема, которую нельзя решить в одном месте в центре обработки данных. Но эта система является одним из важнейших факторов, способствующих росту использования».

К работе над документами присоединились Хастер Балакришнан, профессор кафедры электротехники и компьютерных наук Fujitsu, а также аспиранты CSAIL Джонатан Беренс и Джошуа Фрид.

Эффективное обнаружение заторов

В реальном центре обработки данных Shenango — алгоритм и программное обеспечение — будет работать на каждом сервере в центре обработки данных. Все серверы смогут общаться друг с другом.

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

Это кажется достаточно простым. Но структура очереди важна для обнаружения перегруженности микросекундного масштаба. Традиционное мышление означало, что программа проверяла временную метку каждого поставленного в очередь пакета данных, что занимало бы слишком много времени.

Исследователи внедряют очереди в эффективные структуры, известные как «кольцевые буферы». Эти структуры могут быть визуализированы как различные слоты вокруг кольца. Первый введенный пакет данных входит в начальный интервал. По мере поступления новых данных они попадают в последующие слоты вокруг кольца. Обычно эти структуры используются для обработки данных «первым пришел — первым обслужен», извлекают данные из начального слота и работают в направлении конечного слота.

Система исследователей, однако, только кратко хранит пакеты данных в структурах, пока приложение не сможет их обработать. Между тем, хранимые пакеты могут использоваться для проверки перегрузки. Алгоритму нужно только сравнить две точки в очереди — местоположение первого пакета и место, где последний пакет был пять микросекунд назад — чтобы определить, встречаются ли пакеты с задержкой.

«Вы можете посмотреть на эти две точки и отслеживать их прогресс каждые пять микросекунд, чтобы увидеть, сколько данных было обработано», — говорит Фрид. Поскольку структуры просты, «вы должны делать это только один раз для каждого ядра. Если вы смотрите на 24 ядра, вы делаете 24 проверки за пять микросекунд, что хорошо масштабируется».

Умное распределение

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

Например, IOKernel может видеть входящий пакет данных для определенного приложения, которое требует микросекундных скоростей обработки. Если приложение перегружено из-за нехватки ядер, IOKernel немедленно выделяет приложению незанятое ядро. Если он также увидит другое приложение с ядрами с менее чувствительными ко времени данными, он получит некоторые из этих ядер и перераспределит их в перегруженном приложении. Сами приложения также помогают: если приложение не обрабатывает данные, оно предупреждает IOKernel о том, что его ядра могут быть перераспределены. Обработанные данные возвращаются в IOKernel для отправки ответа.

«IOKernel концентрируется на том, какие приложения нуждаются в ядрах, в которых их нет», — говорит Беренс. «Он пытается выяснить, кто перегружен и нуждается в большем количестве ядер, и дает им ядра как можно быстрее, чтобы они не отставали и имели огромные задержки».

Тесная связь между IOKernel, алгоритмом, приложениями и серверным оборудованием является «уникальной в центрах обработки данных» и позволяет Shenango бесперебойно функционировать, говорит Белэй: «Система имеет глобальный обзор того, что происходит на каждом сервере. Она видит аппаратное обеспечение, обеспечивающее пакеты, что работает, где в каждом ядре, и насколько заняты каждое из приложений. И это происходит в масштабе микросекунд».

Затем исследователи совершенствуют Shenango для реального внедрения центра обработки данных. Для этого они гарантируют, что программное обеспечение может обрабатывать очень высокую пропускную способность и имеет соответствующие функции безопасности.