О процессе создания сервера – от идеи к деталям
Здравствуйте! Меня зовут Алексей, я руковожу созданием оборудования в компании YADRO – координирую работу всех, кто так или иначе вовлечен в процесс разработки.
В конце прошлой статьи Максим maxf75 немного коснулся особенностей расположения разъёмов памяти. Сегодня я расскажу в целом про то, как мы пришли к тому варианту архитектуры и компоновки, над которыми работаем сейчас.
Вид проектируемого сервера сзади со снятой задней решёткой.
При проектировании мы исходили из ключевого требования: обеспечить максимальный объём памяти. Вообще это тема отдельной статьи, как компания занялась разработками на основе OpenPOWER, определила целевые задачи для сервера и пришла к этому требованию. Между остальными публикациями мы расскажем и эту историю. А пока примем за отправную точку проектирования: сервер на основе OpenPOWER с максимальным объёмом памяти.
Надо отметить, что решения, которые доступны на рынке сейчас и которые позволяют обеспечить действительно большой объём памяти, обладают одним существенным недостатком – стоимость сервера в разы превышает стоимость установленной в нём памяти. Именно поэтому мы приняли решение создать сервер, который сломает эту традицию и позволит предоставить в одной машине до 8 ТБ памяти при сохранении низкой общей (насколько это возможно вообще учитывая стоимость собственно 8 ТБ DDR4) стоимости решения.
Вместе с целью максимизации объёма памяти сразу возникло стремление обеспечить высокую плотность – иногда это оказывается важным фактором, определяющим конкурентное преимущество при сравнении с другими серверами. После пары недель размышлений и прикидок на бумажках у меня возникло ощущение, что мы сможем уложить все это в стандартное 19” шасси высотой 2U.
Память
Учитывая целевой объём памяти и общее количество планок, её размещение — определяющий фактор при построении компоновки сервера. Понятно, что разместить 128 модулей DIMM на системной плате просто невозможно как исходя из банальной геометрии (плата будет гигантских размеров), так и исходя из требований Signal Integrity. Очевидно, что для упихивания нашего количества памяти нужно делать вертикально размещаемые в шасси райзеры, которые подключаются к системной плате. На райзерах необходимо разместить коннекторы под DIMM’ы и буфер памяти Centaur, который содержит кэш и обеспечивает доступ процессора к памяти (один процессор поддерживает до 4-х буферов памяти).
Первая идея компоновки райзера подразумевала размещение модулей с одной стороны, а буфера памяти сбоку рядом с ними, как на картинке. Но, во-первых, мы уперлись в ограничение по длине трасс от буфера к DIMM’ам, а во-вторых поняли, что будут проблемы с их выравниванием.
Первоначальная схема компоновки райзера памяти
Пришлось делать иначе — размещать чип буфера памяти между двумя группами DIMM’ов. Сначала было немножко неочевидно, пройдет ли такое решение по высоте, но аккуратно посчитав высоту райзера, мы поняли, что при размещении компонентов с минимальными допусками получившаяся плата как раз по высоте проходит между дном и крышкой 2U-корпуса. Таким образом, коннектор для подключения к системной плате необходимо было вынести вбок, и райзер получился таким:
Плата сложная, 18 слоев.
Локальное хранилище и вентиляторы охлаждения
Дальше занялись построением общей компоновки сервера. Традиционно в передней части шасси располагаются диски для локального хранилища. Для шасси высотой 2U наиболее стандартными вариантами являются либо 24 × 2.5”, либо 12 × 3.5”. Мы выбрали первый – 3.5” диски нас в данном проекте не сильно интересуют, поскольку мы ориентируемся скорее на SSD.
Позади дисков классически размещаются вентиляторы — тут тоже не было особенных вопросов: поставили 5 вентиляторов распространённого размера 80 × 38 мм – собственно, максимум, который помещался по ширине. Тут тоже были задачи, с которыми пришлось повозиться – при размещении пяти вентиляторов практически не остается места под коннекторы (необходимо же обеспечить возможность их замены на ходу). Выкрутились, найдя очень компактные коннекторы и разместив их фактически в объёме, занимаемом самими вентиляторами.
Подключение вентиляторов. Для удобства отображения скрыт ближний вентилятор и ближняя направляющая рамка.
Вентиляторы подключаются к лежащей под ними плате, которая разводит линии питания и управления оборотами. У каждого вентилятора свой канал управления. На картинке видны шины питания, ведущие к плате — они проходят вдоль левой стороны сервера, если развернуть его блоками питания к себе. По правой стороне проходит шлейф для передачи управляющих сигналов ШИМ от системной платы.
С подключением локальных дисков тоже все не так просто. Нам очень нравится стандарт NVMe, и мы в целом считаем, что за ним будущее. Какие бы новые типы памяти не появились в обозримом периоде (тот же 3D-XPoint от союза Intel и Micron), скорее всего они найдут применение и в варианте NVMe дисков, поскольку PCI Express сегодня является наиболее коротким путем подключить что бы то ни было к процессору (да, мы знаем про NV-DIMM, но это очень дорогой компромисс, который к тому же отъедает ценные для нас слоты под память). С другой стороны, нам бы не хотелось окончательно и бесповоротно отказываться от поддержки SAS/SATA. Эти соображение достаточно логичным образом привели нас к решению о том, что на системной плате мы будем размещать коннекторы, позволяющие нам вывести шину PCI Express кабелем к дисковым контроллерам, будь то коммутатор PCI Express или SAS HBA/RAID контроллер.
В качестве наиболее подходящей для нас пары разъём-кабель было выбрано решение NanoPitch от Molex (на самом деле это просто реализация активно продвигаемого PCI SIG стандарта OCuLink). Кабели для внутренних подключений достаточно компактны и позволяют по одному кабелю прокидывать до 8 лэйнов PCIe Gen3.
Дальше возник вопрос о том, а где собственно размещать дисковые контроллеры. На бэкплэйне, к которому подключаются диски, сделать это просто невозможно (чипы что SAS-контроллеров, что PCIe коммутаторов слишком большие для этого). После внимательного изучения размеров дисков, максимально допустимой высоты шасси и проработки разных вариантов конструкции дисковых треев стало понятно, что в целом есть возможность разместить плату с контроллерами над дисками. Такое размещение, во-первых, упрощает её подключение к дисковому бэкплейну (можно применить стандартные CardEdge коннекторы), а во-вторых, позволяет снизить высоту дисковых треев за счет отказа от световодов и размещения всей индикации на плате контроллера.
В итоге получилась такая схема подключения:
Для разнообразия — художества от руки. Схема подключения дисков. Магнитная доска, маркеры, 2016 год.
Плата с PCIe-коммутатором или SAS-контроллером располагается над дисками, подключается к системной плате кабелем. Сама плата подключена к дисковому бэкплейну, в который воткнуты диски.
Блоки питания
Блоки питания обычно ставят в левом или правом заднем углу корпуса. Нам было удобнее, исходя из дизайна PDB (Power Distribution Board), расположить их в левом (если смотреть сзади). Блоки питания решили использовать стандарта CRPS, основными преимуществами которого являются высокая удельная мощность блоков питания (2 кВт уже сегодня, до 2,4 – почти завтра), высокий КПД, а самое главное — это не какой-то проприетарный стандарт одного вендора, а стандарт, инициатором которого был в свое время Intel и который был поддержан значительным количеством компаний. Два двухкиловаттных блока питания в нашем случае расположены друг над другом.
Ещё немного про память
Поскольку на каждом райзере мы размещаем по одному буферу памяти и по 8 DIMM’ов (максимально поддерживаемое Centaur’ом количество), то получается, что нам требуется четыре райзера на процессор, то есть всего 16 в шасси. Исходя из высоты стандартных модулей DDR4 RDIMM в ширину таких райзеров в шасси можно разместить не более 11 (да и то, приходится использовать Ultra-low seating DIMM-сокеты и ужиматься, считая десятые доли миллиметров). Поэтому ещё 5 райзеров пришлось поставить в другое место, на заднюю часть системной платы. Собственно, это и привело в итоге к разворачиванию одного процессора на 180 градусов (последняя Ктулху-картинка в прошлой статье). Учитывая высоту наших райзеров памяти от дна до крышки сервера, к ограничениям формы системной платы добавился ещё один вырез.
После этого осталось только разместить разъёмы для стандартных карт PCI Express, количество которых однозначно определилось свободным местом. Получилось разместить 5 слотов, плюс отдельный коннектор для платы менеджмента (для разгрузки системной платы мы решили вынести на отдельную карту BMC, USB и Ethernet — всё это поместили на отдельную небольшую плату, которая устанавливается в тот самый шестой разъём).
Общая схема
В итоге получилась такая картина расположения компонентов (вид сверху, плата с контроллерами над дисками не показана, чтобы диски не заслонять):
Легенда:
0. Системная плата.
1. Процессоры IBM POWER8 SCM Turismo.
2. Райзеры памяти с DIMM’ами.
3. 24 × 2.5” диска и дисковый бэкплейн
4. Слоты для карт расширения (поддерживаются только HHHL, то есть низкопрофильные карты).
5. Плата управления.
6. Вентиляторы системы охлаждения.
7. Блоки питания.
Вот эти соображения, которые я описал, и определили облик сервера. Итого: стандартное 19” шасси высотой 2U, 4 сокета для процессоров POWER8, 16 разъёмов для райзеров с планками памяти (всего до 128 модулей DIMM во всём сервере, по 8 на каждом райзере), 5 стандартных PCI Express слотов для карт расширения и одна карта управления.