В статье «Грядет революция в ЦОДостроении» была обоснована необходимость в дезагрегации ресурсов на уровне сервера и уровне ЦОДа в целом.
Но на пути к всеобщей дезагрегации есть очевидный барьер. Он связан с сохраняющимися ограничениями по скорости и по времени задержки при передаче данных между процессором, памятью и СХД. Теоретический анализ этой проблемы выполнен в статье «Network Requirements for Resource Disaggregation»[1]. Работа написана весьма авторитетным коллективом авторов из Калифорнийского университета Беркли, среди них Петер Гао и Скотт Шенкер — признанные отцы программно-ориентированного подхода к SDN-сетям. На 2017 год SDN стал классикой, при том что еще в 2010 году словосочетание «программно-ориентированный» казалось экзотикой[2].
В статье из Беркли подчеркивается:
Ключевым блокирующим или обеспечивающим фактором для дезагрегации станут сети, поскольку отделение процессоров от памяти и дисков потребует от межресурсных коммуникаций производительности не меньше той, которая была в серверах. Сетевые инфраструктуры должны обеспечивать скорость передачи и задержку, сравнимые с теми, которые есть внутри серверов. Потребуются кремниевая фотоника с соответствующими коммутаторами, коммутаторы PCIe s и многое другое. Это совершено новые технологии, и им придется конкурировать с существующими, которые благодаря массовости предлагаются по доступным ценам |
О кремниевой фотонике читайте отдельную статью TAdviser «Почему кремниевую фотонику считают источником следующей информационной революции».
Если проблема производительности сетей будет решена, то можно осуществить полную дезагрегацию, и тогда обновленный ЦОД будет выглядеть не сборкой серверов, как это показано на рис.1 (а), а в виде трех автономных пулов ресурсов (b). Однако по состоянию сетевых технологий на 2017 год осуществить полную дезагрегацию в ближайшее время очень сложно. Тем не менее, именно она выбрана в качестве претенциозной цели в европейском проекте dReDBox, о других пока не известно. К dReDBox мы вернемся в конце статьи.
В то же время, нет больших проблем с усеченным вариантом, где дезагрегация ограничена двумя пулами — один образуют процессоры, интегрированные с памятью, а во второй объединяются накопители различных типов. Этот подход абсолютно прагматичен, он может быть реализован в ближайшее время, и по этому пути идут несколько компаний. Он реализуется в проектах: Intel RSD, HP TheMachine, Facebook Disaggregated Rack, Huawei DC3.0, Ericsson 8000. Они находятся на разных уровнях завершенности, о них мы будем говорить в следующей статье.
Здесь мы рассмотрим то, что называют дезагрегацией памяти (memory disaggregation). Посредством дезагрегации этого типа можно преодолеть так называемую стену памяти (memory wall)[3]. У стены памяти два проявления. Первое — по скорости память всегда отстает от процессоров, к тому же ускорение работы процессоров происходит быстрее, чем ускорение работы памяти. Второе — ограниченная скорость обмена данными между процессором и памятью (bandwidth wall).
Пока еще дезагрегация по водоразделу CPU-memory остается в большей степени научной, чем инженерной проблемой, в основном ею занимаются представители академического сообщества. Будем надеяться, что их труды смогут найти свое практическое применение в недальней перспективе. Скорее всего абсолютная дезагрегация CPU-memory невозможна, всегда останется какой-то относительно небольшой фрагмент памяти, который будет находиться рядом с процессором и играть роль кэша, а вся остальная память может быть интегрирована в общий пул.
Решения задачи дезагрегации памяти могут различаться по степени радикальности, то есть быть программными с использованием существующего аппаратного обеспечения, быть развитием традиционного аппаратного обеспечения и быть совершенно новыми.
В условиях, когда актуальна необходимость в удовлетворении потребностей «жадных до памяти» современных технологий, таких как VoltDB, Memcached, PowerGraph, GraphX или Apache Spark, но нет технологической возможности средствами дезагрегации собрать в общий пул большие объемы памяти, приходится идти на искусственные приемы для увеличения доступной памяти, которые можно назвать псевдо-дезагрегацией. Эти изрядно забытые приемы известны с давних времен, один из них — свопинг, другой — NUMA.
Свопинг память-память
Свопингом называют механизм виртуализации памяти, служащий для перемещения неактивного содержимого памяти на внешний носитель, диск или флэш, и для возвращения в память данных, ставших актуальными. В основе свопинга лежит страничная организация памяти. Впервые свопинг был реализован в британском суперкомпьютере Atlas, запущенном в эксплуатацию в 1962 году. Это был один из первых в мире компьютеров на германиевых триодах. В последующем свопинг активно использовался в мини-компьютерах PDP компании DEC. Тогда память была чрезвычайно дорогой (в Atlas и первых PDP она была еще на ферритовых сердечниках), для свопинга были экономические причины. Теперь, когда нет причин для экономии памяти, свопинг призван увеличить доступный процессору объем памяти, поэтому пространством для свопинга служит память. Возможны два варианта — обращение к неиспользуемой памяти других серверов или создание отдельного массива памяти, используемого серверами.
По первому пути пошли авторы системы Infiniswap, разработанной в Мичиганском университете. Ее суть выражена в названии — неограниченный свопинг[4].
Infiniswap — это программное решение с открытым кодом, которое создает доступный приложениям большой пул памяти с использованием протокола Remote Direct Memory Access (RDMA). Протокол был изначально для HPC и InfiniBand, но уже портирован и на Ethernet. RDMA (удаленный прямой доступ к памяти) позволяет передавать данные между серверами напрямую из памяти одного приложения в память другого без участия центральных процессоров. На экспериментальной площадке Infiniswap работает под управлением Linux 3.13 на кластере из 32 серверов, объединенных адаптером 56 Gb/sec ConnectX-3 InfiniBand от Mellanox.
Еще Infiniswap может работать по RDMA на Converged Ethernet (RoCE). RoCE (RDMA over Converged Ethernet) — это эффективной метод передачи данных с очень низкой задержкой в сетях Ethernet без потерь.
В среднем благодаря Infiniswap использование памяти улучшилось на 42%, а скорость обмена возросла в 16 раз.
Второй подход к свопингу демонстрирует совместное решение специалистов из HP, AMD и Мичиганского университета[5]. В нем используются стандартные, не модифицированные серверы-лезвия в сочетании с дополнительными, созданными авторами проекта специализированными лезвиями памяти.
Авторы этого в большей мере аппаратного, чем программного решения, стремились добиться высокой эффективности использования памяти, собранной в пул, применяя для этой цели в основном имеющиеся на рынке готовые компоненты. Изюминкой в данном случае является запрограммированный на FPGA контроллер, реализующий алгоритмы свопинга. В статье приведены результаты проверки на 12 стандартных тестах. Они свидетельствуют о том, что в среднем производительность повышается на порядок, а производительность в пересчете на вложенные средства — на 87%.
Развитие традиционного решения NUMA
Опыт прошлого лежит и в основе проекта Эдинбургского университета Scale-Out NUMA (soNUMA)[6]. Создание общего пула памяти не есть что-то совершенно новое, первые попытки обнаруживаются в классических симметричных системах (Symmetrical Multiprocessing, SMP), где реализуется схема UMA (Uniform Memory Access), в которой у процессоров равные права на доступ к общей памяти. Но такие системы предполагают физически близкое размещение памяти и процессоров и не могут быть масштабированы, поэтому их нельзя рассматривать в качестве прототипа.
Необходимость в более дешевом горизонтальном масштабировании привела к схеме с распределенной общей памятью (Disributed Shared Memory, DSM) — у каждого процессора имеется своя локальная память, и некоторая часть ее доступна всем остальным узлам для удаленного доступа, а совокупность всех общедоступных регионов памяти образует распределенную общую память, время обращения к которой зависит от того, насколько далеко отстоит соответствующий узел.
Компромиссом между UMA и DSM стала архитектура с неоднородным доступом к памяти NUMA (Non-Uniform Memory Access), где время доступа к памяти определяется положением по отношению к процессору. В чистом виде NUMA не получила заметного распространения. Более практичной оказалась модификация NUMA с когерентным кэшем, известная как ccNUMA, но и она оказалась достаточно сложна, использовалась только в отдельных высокопроизводительных компьютерах.
В soNUMA реализуется модернизированная NUMA, где несвойственное модели, но востребованное современными приложениями горизонтальное масштабирование поддерживается контроллерами удаленного доступа RMA (Remote Memory Controller).
Проект dReDBox
Все три описанные выше решения являются паллиативами, хотя они и позволяют интерпретировать некоторый объем памяти как общий пул, но только логически, а не физически. Проект dReDBox[8] отличается тем, что здесь все «по-честному» — есть пул процессоров, есть пул памяти и есть соединения между ними. Точнее будет сказать, поскольку проект пребывает в стадии разработки, он щедро финансируется в рамках европейской программы перспективного развития Horizon 2020[9].
В dReDBox участвует более 10 крупных европейских университетов. Проект явно некоммерческий, поэтому прекрасно документирован, на сайте www.dredbox.eu можно найти несколько десятков полноценных статей[10]. Общее представление о проекте можно получить из обзорного материала «Rack-scale Disaggregated cloud data centers: The dReDBox project vision».
В dReDBox задуманы два уровня дезагрегации — на уровне стойки и на уровне ЦОДа. Качественная новизна dReDBox — в отказе от традиционных материнских плат, то есть от статичной парадигмы проектирования mainboard-as-a-unit, в пользу гибкой, программно-ориентированной парадигмы, где основой служит block-as-a-unit, который образно называют brick (кирпич). Кирпичи собираются в стойку с использованием подносов (tray), из отдельных кирпичей складывается здание ЦОДа.
Два типа кирпичей объединяются реконфигурируемым коммутатором Optical Circuit Switch (OCS). Компьютерный кирпич, помимо процессора, содержит FPGA, обеспечивающий адресацию к памяти. Кирпич памяти получает от FPGA адреса и обеспечивает обмен данными в пакетном режиме. Этот подход отличается от принятого теперь, когда данные передаются по фиксированному пути и с заданной пропускной способностью. Пакетизация позволяет выбирать оптимальный путь, как это делается в любых сетях с коммутацией пакетов, а пропускная способность является гибкой, она определяется возможностями и их количеством.
По своей грандиозности замысел dReDBox напоминает принятое в семидесятые годы решение о строительстве конкурентоспособных авиалайнеров. Если поставленные цели будут достигнуты, объединенная Европа станет реальным конкурентом нынешним лидерам рынка.
Читайте также
Intel против всех. Началась война за сетевой интерконнект между процессором и памятью.
Примечания
- ↑ Network Requirements for Resource Disaggregation
- ↑ SDN — первое знакомство
- ↑ Hitting the Memory Wall: Implications of the Obvious
- ↑ Efficient Memory Disaggregation with INFINISWAP
- ↑ Disaggregated Memory for Expansion and Sharing in Blade Servers
- ↑ Scale-Out NUMA
- ↑ Scale-Out NUMA
- ↑ Проект dReDBox
- ↑ «Горизонт 2020» (англ. Horizon 2020, нем. Horizont 2020), или Восьмая рамочная программа Европейского Союза по развитию научных исследований и технологий (РП8)
- ↑ Сайт www.dredbox.eu, раздел Publications