Как подключить power supply control
Подключение управлямых блоков питания, сенсоров и реле к серверным материнским платам. Без Arduino
После установки сервера в самодельную конструкцию порой хочется подключить к нему ещё чего-нибудь: например, датчики температуры, давления, влажности, ЖК-экранчики или даже ШИМ-драйверы моторчиков. Бывают глючные внешние устройства, которые приходится удалённо и жёстко сбрасывать с помощью реле, не уровнив при этом весь сервер целиком. А может, читателю просто захотелось гребёнку GPIO с гирляндой светодиодов? Если это не одноплатник типа Raspberry Pi, а полноразмерный сервер, приходится навешивать микроконтроллер и возиться с ним: писать прошивку, тестировать, налаживать стык с хостом и т.д. Иногда это интересно само по себе, но бывает и наоборот: скорей бы скриптину написать да запустить, наконец, лишь бы работало.
Необычные разъёмы на железе всегда вызывали у автора смешанные чувства инженерно-технического зуда и вентиляторного фетишизма. Об этих занимательных разъёмах здесь и речь.
DISCLAIMER
Если вы читаете эту статью где-то за пределами портала Geektimes, рекомендую через недельку-другую заглянуть по аутентичной ссылке. Дело в том, что наиболее интересные комментарии читателей появятся там (т.е. тут) во врезках, я уже не говорю об устранении недочётов и ляпов. Бывает, что плохую статью рассерженные резиденты клуба буквально рвут на клочки, попутно отправляя автора в кармическую бездну. Другими словами, если аутентичная ссылка не открывается, то не стоит и читать дальше этого места.
Автор передаёт привет Дальнему Востоку (прямо из неба над Северной Атлантикой), а также приносит извинения вдалельцам уважаемых торговых знаков: они настолько не нуждаются в рекламе, что я придумываю им шуточные названия. Таким образом, статья применима к изделиям Супер Мирон, но автор практически не сомневается в наличии аналогичных механизмов на изделиях Харлампий-Панкрат, Иван Брал Марью, Ильтан, Долян и других: занимательные коннекторы чаще всего можно встретить на блоках питания и дисковых корзинах. Заодно попытаемся разоблачить и хвалёный Кобзарь Линк.
Уважаемые специалисты по серверным платформам, IPMI, I²C, SMBus и PMBus, поправляйте, если что не так. Обычно автор выражает признательность креативным читателям кармическими баллами, но приносит извинения тем резидентам клуба, кому благодарность уже была выписана ранее, просто НЛО не велит делать это дважды. Желаю приятного прочтения.
Из того, что было
Автор не стыдится покупать за копейки серверные материнские платы б/у и давать им вторую жизнь. Старая, шумная серверная механика (с блоками питания) отправляется в утиль и заменяется на новые изделия, хоть и потребительского класса, но качественные и тихие. Зато даже из винтажных серий Супер Мирон X8 и X9 до сих получаются просто офигенские NAS для малого бизнеса, сочетающие enterpise-функции, файловую «машину времени» против троянов-вымогателей и репликацию по сети…
Вообще, лет 20 назад для колхозинга в качестве GPIO умельцы использовали параллельный порт для принтера, но попробуйте сейчас его найти. Мир изменился, как по мне — так в лучшую сторону:)
Визуальный осмотр
У меня уже почти ископаемое, но вполне рабочее изделие X9SCM-F (Intel C204 Express), плюс на соседнем объекте уже пару лет трудится его младший брат X9SCL-F (C202). Если повернуть изделие, как в документации, 24-контактным разъёмом питания ATX к северу, то SATA-порты окажутся где-то в районе Хабаровска. Ещё восточнее, подобно Петропавловску-Камчатскому, находится пара разъёмов T-SGPIO 1 и 2, привлекающих внимание сочетанием букв «GPIO». На это сочетание автор и повёлся, но рефлексы геолога-исследователя ископаемой электроники оказались ложные. На самом деле ключевое слово здесь SGPIO, это дуплексная сигнальная шина с разделением каналов по времени, использующая кадры постоянной длины. Шина по очереди передаёт по три бита для каждого SATA-порта: на HBA — состояние корзины, а на корзину — состояние дисков (активен, отказал, локатор). Это устаревшая технология, современные корзины используют I²C. Я не копал очень глубоко, но похоже, что 6 бортовых SATA-портов разделили на группы из двух северных и четырёх южных, и каждой группе повесили свою гребёнку T-SGPIO. Громоздко, неуклюже, а для колхозинга ещё и бесполезно. Идём дальше, есть маленький разъёмчик JWF1 в районе Южно-Сахалинска, но это просто питание 5В для накопителя SATA DOM, которого у меня нет. На Дальнем Востоке больше делать нечего. Вдоль южных границ раскинулась целая гряда парных 9-контактных разъёмов USB и второй порт RS232, с ними всё понятно. На Северо-Западе от COM2 обнаружилась пара перемычек JI2C1/JI2C2, открывающих доступ к устройствам PCIe. Этот инструментарий для меня пока остался загадкой, но я почти уверен, что по факту JI2C1/JI2C2 суть живые выводы SCL и SDA, просто отделённые от питания 3.3В и «земли», которые и так есть в PCIe. Оставим пока. Коннектор JTPM больно мудрёный, это на крайний случай. А от коннектора передней панели JF1 можно отжать разве что UID LED, подключив его к оптореле. Кстати, это м.б. даже удобно: ограничительный резистор уже встроен в цепь, включил UID LED — открыл (закрыл) реле. Для удалённого сброса внешнего устройства, пожалуй, хватит. Главное, чтобы оператор, зайдя спустя год в веб-интерфейс BMC, не включил UID LED просто так, заодно сбросив и внешнее устройство. Ладно, возвращаемся на крайний сервер север, именно там, возле ATX-питания, и расположился разъём JPI2C.
Надо сказать, что документация по поводу JPI2C довольно оптимистична. Из неё следует, что это выход шины I²C для мониторинга здоровья «родного» блока питания. Физически JPI2C суть 5-контактный разъём Molex типа SL с шагом 0.1″ (2.54мм) и ключём защиты от дурака перепутанной полярности, предположительно код по каталогу 70543-0004. Ответная часть (на картинке слева внизу) — это Molex 70066-0179 под обжим кримпером (aka ). Я подозреваю, что на всех материнских платах Супер Мирон шина I²C используется для мониторинга здоровья серверного блока питания и выведена именно 5-контактным разъёмом Molex SL (). Забегая вперёд, скажу, что некоторые пользователи преуспели в реверсной инженерии и нашли способ вынимать из родных блоков питания Супер Мирон всякие полезности вроде температуры и вольт с амперами, читайте дальше.
Power Supply I²C Connector
Power Supply I²C Connector, located at JPI2C, monitors the status of the power supply, fan and system temperature. See the table on the right for pin definitions.
Пустой разъём JPI2C откровенно дразнил стандартными контактами шины I²C: SCL, SDA, GND и VCC. Посередине — аварийный сигнал отказа блока питания. Забегая вперёд, рискну предположить, что этот Power Fail — единственный способ поднять тревогу по внешнему событию, не используя внешний микроконтроллер. Затем нашлась и статья FAQ ID 9492 от 30 марта 2010г, явно намекающая на возможность опрашивать шину I²C прямо из командной строки. Раз уж BMC явно участвует в мониторинге здоровья блока питания, а команда ipmitool явно способна «разговаривать» по шине I²C с блоками питания, ничто не должно мешать подключить к JPI2C ещё что-нибудь эдакое.
Работа с устройствами по I²C из командной строки
Скрипт перебирает только чётные адреса и не трогает зарезервированные. В I²C самый младший бит является признаком чтения-записи: каждое устройство как бы занимает два адреса (чтение по нечётным, запись — по чётным). Статья FAQ ID 9492 меня запутала, потому что опрашивает только чётные. Но ведь в случае ipmitool чтение или запись определяются не адресом, но контекстом команды, верно? Увесистая спецификация IPMI 2.0 поставила всё на места: младший бит адреса в команде Master Read-Write ( 0x06 0x52 ) вообще зарезервирован и должен быть сброшен (равняться нулю).
Висящая просто так шина I²C неинтересна ни в воздухе, ни тем более в сферическом вакууме. Известная площадка по запросу «i2c sensor» предложит уважаемому читателю широкий ассортимент датчиков, уже обвязанных на мини-платах. Обычно остаётся только контактную гребёнку припаять, для этого достаточно желания и паяльника на 30Вт с припоем и флюсом, навыки не требуются. Для проверки теории я решил померить температуру датчиком BMP180, но это оказалось несколько сложнее, чем я думал: датчик является примером сложного stateful-устройства, и правильнее будет сказать «извлечь показания температуры и давления из прецизионного измерителя с учётом калибровочных коэффициентов». Но сперва всё-таки отдадим должное уважаемому вендору.
Сразу оговорюсь, что данная задача м.б. интересна, например, для профилировании фактической мощности серверов при эксплуатации центров обработки данных: если группа серверов подключена к одному распределителю, поди разберись, сколько потребляют серверы А и Б без учёта В и Г, даже при наличии навороченного ИБП, питающего стойку. Это всё и предлагается выяснить через IPMI, получая прямо по сети мгновенные значения с выбранных серверов. Для DIY кроме подбора ИБП и построения системы охлаждения с обратной связью лично мне в голову ничего не приходит.
Отдадим должное пользователю Andrew Grekhov, смело ринувшемуся в неравный бой со сложным и недокументированным (как ему показалось) устройством. К счастью, он не забыл упомянуть PMBus, что и навело меня на официальный сайт и соотв. спецификации. Ведь PMBus суть специализированная надстройка над SMBus для управления системами питания, а сама SMBus, в свою очередь, является развитием I²C. Можно предположить, что большинство современных управляемых блоков питания используют ту или иную спецификацию PMBus. Потому как глядя на все имеющиеся навороты PMBus и готовые микросхемы, возникает простой вопрос: какой смысл изобретать велосипед? Но повторю, это моё предположение.
Итак, копнув чуть глубже, можно найти описание команд (регистров), используемых управляемыми блоками питания, например, по PMBus rev 1.1. Если ссылка не открывается, зайдите на сайт www.pmbus.org, откройте раздел со старыми спецификациями и найдите PMBus Specification Part II Rev. 1.1. Это документ с описанием команд, см. Таблицу 26 в разделе APPENDIX I. Command Summary. Обратите внимание, например, на команды-регистры 0x78 (STATUS_BYTE), 0x88 (READ_VIN), 0x89 (READ_IIN), 0x95 (READ_FREQUENCY) и другие: они в точности совпадают с результатами реверсной инженерии, опубликованных на форуме по ссылке выше. Возвращаясь в таблицу 26, справа дана разрядность регистра (Read Byte или Read Word) с количеством считываемых байт. Просто на всякий случай, а вдруг читатель забыл разницу между byte и word?
Но остаётся вопрос: можно ли вообще считать по I²C калибровочные коэффициенты командой 0x30 (COEFFICIENTS), использующей пакетную операцию стандарта SMBus? Это нужно, чтобы преобразовать сферически-вакуумные регистры в реальные вольты, амперы и т.д. Если я всё верно понял, то с точки зрения шины SMBus нужно отправить пакет с командой 0x30 и счётчиком байт 2, тело пакета суть два байта с кодом интересущего регистра (0x88 для READ_VIN) и признаком направления, который для считывания должен быть равен единице. В ответ устройство должно выдать пакет из 1 + 5 + 1 байт с параметрами m, B и R, которые используются для пересчёта в физические вольты. Первый байт — длина, последний — PEC (если используется). Т.е. интрига заключается в том, можно ли передать простой пакет SMBus по I²C, например, таким способом:
Сенсор BMP180 измеряет давление и температуру. Он выдаёт показания через двухбайтные регистровые пары, предварительно выбираемые записью однобайтного номера регистра по IPMI-адресу 0xee с последующим чтением пары байт оттуда же. Именно поэтому я называю BMP180 stateful-устройством, т.е. имеющим селекторы состояния (это м.б. важно с точки зрения конфликтологии). Предком BMP180 является BMP085, а потомком — BMP280, измеряющим ещё и влажность.
Как и в случае с алкотестером, измерения не происходят сами по себе, но запускаются командой. Для измерения только температуры следует записать код 0x2e в регистр 0xf4 :
Стоит поблагодарить пользователя 41j за материал.
Ограничения
Все эксперименты я проводил с помощью команды ipmitool(1) v1.8.15, работающей через хостовый (ядерный) интерфейс FreeBSD 10. Если использовать эту команду в скриптах, придётся парсить её вывод, причём stderr, а не stdout. Я специально избегаю парсеры в этой статье. Буду признателен, если кто-либо из читателей поделится проверенными библиотеками для работы с IPMI через хостовый интерфейс на популярных скриптовых языках (perl, Python), хотя бы в режиме raw-команд.
Хотя ipmitool(1) и может работать по сети (623/tcp), при выключенном хосте на JPI2C дежурного питания нет, шина обесточена. Запитывать сенсоры отдельно и опрашивать их через сетевой интерфейс IPMI при выключенном хосте не пробовал. Но если нужны автономные сенсоры, подключенные к сети, лучше уж задействовать одноплатник, например, тот же Малиновый Прог (простите, так я обозвал Raspberry Pi в своей статье про защиту microSD-карточек от преждевременного износа путём перехода на файловую систему read-only).
Как уже говорилось, описанный здесь способ без внешнего микроконтроллера практически исключает реакцию на прерывания по внешним событиям, кроме сигнала «отказ блока питания». Теоретически, по сигналу Power Fail можно сгенерировать SNMP-событие, но я не пробовал. И тут снова хочется сказать: если нужны прерывания от сенсоров, то нужен микроконтроллер или, на худой конец, выделенный одноплатник. Кесарю — кесарево.
Конфликтология I²C
У меня появилась теория относительно IPMI и его роли в доступе к I²C: если все команды записи только выбирают регистр для последующего чтения, то каждое взаимодействие с устройством укладывается в одну команду Master Write-Read протокола IPMI. Из весьма увесистой спецификации IPMI 2.0 я рекомендую ознакомиться с параграфом 22.11, который эту команду описывает. В моём понимании, операция по шине I²C — это либо чтение, либо запись последовательности байт по одному адресу. Но спецификация IPMI командой Master Write-Read вводит нечто большее: удобная для сенсоров пара операций «запись-чтение» напоминает полноценную транзакцию, причём IPMI оговаривает максимальные длины буферов (порядка 30 байт). Я также исхожу из того, что (а) BMC всегда является главным устройством на шине I²C и (б) BMC имеет встроенный механизм блокировок, т.е. он не попытается отобрать шину у самого себя посередине транзакции.
Если исходить из того, что команда IPMI Master Write-Read (из двух операций) действительно является неделимой транзакцией, то BMC выполняет нечто большее, чем просто отображение I²C: он является транзакционной надстройкой над I²C, причём с хостовым или сетевым интерфейсом. Другими словами, получается что-то вроде примитивного 4-уровневого стека протоколов для работы с I²C-сенсорами через интерфейс IPMI, который я и рискнул нарисовать. Если уважаемому читателю не понравилась картина, представьте, что я художник, и вижу мир именно так, возражайте по существу, пожалуйста:)
Кстати, шина SMBus, помимо дополнительных контактов, отличается от I²C именно пакетным режимом, и в ней определена операция Write/Read Block. Но это уже часть протокола самой шины SMBus, IPMI в этом случае сыграл бы роль простой операционной обёртки, а не транзакционной надстройки. Впрочем, максимальные длины блоков в спецификациях IPMI и SMBus настолько схожи, что я предполагаю между ними прямую связь, даже не погружаясь глубоко в тему.
Безопасность
BMC-контроллер, подключенный к вычислительной сети, является сервером и потенциально уязвим. Именно поэтому, например, следует усиливать меры безопасности на «локальной» консоли ОС, которая через виртуальный KVM де-факто экспонируется в сеть. Старые прошивки BMC-контроллеров Супер Мирон содержат неприятную уязвимость, поэтому эксплуатацию стоит начинать и с обновления прошивки BMC (помимо BIOS).
Климат-контроль с обратной связью
Некоторые производители доводят висящую, так сказать, в воздухе идею охлаждения с обратной связью прямо-таки до культа, изрядно припудренного маркетингом c завесой тайны:
In some ways, Corsair Link is one of our best kept secrets. It had a very rocky start, but continued and continuing development has turned it into an extremely useful combination of hardware and software. It allows you to connect several products within our ecosystem to a software-based control panel, but there’s so much more to it than that.
Наверное, это отличный способ увеличить средний чек, предложив потребителю комбинацию из дорогого блока питания, сенсоров, охлаждения и ёлочной гирлядны, заодно внушив причастность к великой тайне. Красиво, но эти яблочные подходы с превращением всего и вся в закрытую проприетарщину лично меня отталкивают.
Предполагаю, что контроллер Corsair Link Commander Mini представляет собой устройство USB HID, использующее для связи с сенсорами шину SMBus, поверх которой для управления «фирменным» блоком питания используется PMBus, причём не самая новая. Любопытно было бы подключить блок питания напрямую к микроконтроллеру с поддержкой SMBus, найти адрес сканированием и прочитать однобайтный регистр 0x98 (PMBUS_REVISION). Если отзовётся разумным кодом, берём соотв. спецификацию PMBus с сайта и получаем увлекательный квест на тему управления блоками питания Кобзарь в собственной системе с обратной связью. Хотя вместо Кобзаря лично я предпочитаю блоки питания Чистяк, хоть они и не столь занимательны, зато (по моему опыту) с основной задачей справляются лучше.
Возможно, лучше было бы открыть «экосистему» и нанять группу людей для поддержки community-проектов через социальные сети, со свободным обменом скриптами. У меня ощущение, что выросло бы количество чеков, т.е. продаж блоков питания. Но маркетологам, конечно, виднее.
Тем временем, community не остаёт:
Пользователь Kevin Horton предложил для FreeNAS систему с обратной связью в виде скрипта на языке Perl. Эту идею затем развил другой пользователь. Всё базируется на встроенном функционале материнских плат Супер Мирон, имеющих двухзонный климат-контроль, предположительно, серии X10 или более новых. Обратная связь при желании собирается откуда угодно, включая термодатчики жёстких дисков через SMART. Обороты вентиляторов регулируются на уровне ШИМ, нехитрыми командами контроллеру. Без ёлочных гирлянд.
Но у меня на старой однопроцессорной плате Супер Мирон X9 (socket 1155) это не работает: на моделях X9SCL/X9SCM у меня не получалось нельзя переключать режим работы климата с «лёгкого» на «полный» иначе как через BIOS с полной перезагрузкой системы (ссылка). Увы, IPMI тут бессилен.
Альтернативы IPMI I²C — преобразователи интерфейсов
А что, если замечательных разъёмов с I²C на системной плате совсем нет? Есть неплохие варианты USB-преобразователей I²C/SMBus, экспонирующие устройства как USB HID.
Помню, несколько лет назад я, разбирая USB стек в статье на хабре, уже рисовал перспективы USB HID как удобного способа работы с сенсорами и датчиками. Досталось мне тогда от резидентов клуба: дескать, не надо использовать HID, это вообще для клавиатуры, правильно использовать CDC, т.е. виртуальный COM-порт. Но абстракция USB HID нативно дробит сложное устройство на простые составляющие. Она позволяет в ряде случаев даже обходится без драйверов, пользуясь готовыми библиотеками, например для Python. И пока я отстаивал идею USB HID, Microchip уже выкладывала драйверы под Linux, с разницей в пару месяцев. Я тогда этого не знал, но рынок сам всё расставил по местам:)
Как сервер работает с отверткой в блоке питания
PSU firmware is outdated.
Когда я впервые увидел такую надпись при опросе версий прошивок HP DL380, то был несколько обескуражен. Эм, ну ладно, если очень нужно – скачай и поставь. Но что за софт может быть в банальном блоке питания? Оказалось, что для диагностики местной системы жизнеобеспечения и обработки отказов по питанию. Там натуральный кластер из блоков питания, со своим арбитром и логикой. Под катом рассказ об устройстве такого «кластера» и о том, почему 2 x 1400 = 2300W.
Два блока питания – в два раза выше надежность? Не всегда, потому что зависит от настроек системы электропитания. Вот о ней подробнее и поговорим. В качестве предметов рассказа я выбрал оборудование среднего серверного класса, вроде такого:
То есть, не блейды и не мейнфреймы – у них все иначе устроено. Обратите внимание, форм-фактор сервера не имеет значения для наличия или отсутствия дополнительных блоков питания.
Надежность или удобство
Начнем с ответа на вопрос «зачем сколько БП, если можно просто хранить небольшой запас запчастей». Системы с резервированием в сервере всегда полезны, даже если не рассматривать отказоустойчивость. Например, они повышают удобство обслуживания и позволяют нам не ночевать в серверной при замене дисков или тех же блоков питания.
Например, второй блок питания поможет, если:
Выйдет из строя ИБП;
Дорожные рабочие найдут месторождение электричества;
Возникнет необходимость переноса сервера в другую стойку;
Два блока питания дают больше гибкости при проектировании серверной комнаты. Например, рабочая схема подключения у одного клиента: в серверной две фазы, подключены к разным блокам питания серверов. Одна фаза подключена к UPS, а вторая работает только через стабилизаторы. Но эта линия идет от генератора с автозапуском. При отключении электричества дизель стартует и серверы продолжают работать, даже если UPS разрядятся. Это всего лишь один из вариантов, подобранный с учетом пожеланий клиента и возможностей бюджета.
Итого, несколько БП нужны для удобства администратора, повышения надежности системы и обеспечения большей мощности.
Теория «на коленке»
Простейший вариант систем с двумя блоками питания выглядит как запитывание отдельных комплектующих компьютера от разных блоков, при этом один из них управляющий и питает материнскую плату. Подобные решения практикуют геймеры и майнеры, потому что для установки трех и более видеокарт одного источника питания не хватит. Для подключения используют такие адаптеры:
При нажатии на Power замыкаются зеленый сигнальный провод с «землей», давая команду на запуск обоим блокам питания.
Помню, когда-то давно был у меня компьютер уровня Pentium III с набором SCSI дисков. Штатного блока питания перестало хватать, и я подключил старый АТ-блок отдельно для жестких дисков. Запуск чудо-машины происходил так: нажимаем на кнопку дополнительного питания и ждем жужжания дисков, затем включаем основной БП и начинается загрузка.
Даже в эпоху всепроникающего Китая для «самоделкиных» существует множество схем подключения двух блоков питания своими руками, чтобы получилась похожая конфигурация:
Но вернемся к промышленным серверным решениям.
Устройство питания по своей логике довольно простое. Блоки подключаются к специальной корзине Power Distribution Backplane, где также присутствует микроконтроллер Power Distribution Unit (не путайте с распределителем питания для серверной стойки). Контроллер отвечает за схему использования доступных БП: одновременно или в режиме primary-backup.
Настройка и логика работы
Столь продвинутую подсистему питания можно настраивать под конкретные потребности. При использования сервера с двумя блоками питания доступно несколько режимов работы:
Резервирование, при котором один блок питания нагружен постоянно, а второй готов подхватить нагрузку в случае сбоя;
Очень напоминает RAID – его отказоустойчивый уровень 1 и производительный 0.
Большинство производителей позволяют администратору выбрать необходимый режим. Например, в таком сервере HP настройка через BIOS выглядит следующим образом:
Изображение немного устарело, так как в новых системах используется настройка через iLO, но для понимания сути ее достаточно.
Посмотрим на выдаваемую мощность пары блоков питания HP DL360 при разных режимах настройки и небольшой нагрузке. Для этого используем консольную утилиту hpasmcli.
Не обманул производитель, блоки питания выдают примерно одинаковую мощность.
И правда, при использовании режима распределения нагрузки блоки нагружены примерно одинаково. Но при включении отказоустойчивости используется только один блок питания, а второй переводится в Standby и расходует минимум энергии.
Своеобразный «спящий режим» нужен для того, чтобы избежать холодного старта при подключении резервного БП, сэкономить время и минимизировать риски выхода блока питания из строя в процессе его активизации. Как и в случае с бытовыми лампочками, при любом холодном включении образуются пиковые нагрузки на элементную базу электроцепи, что может привести к ее порче.
Настройка режимов работы у каждого производителя выполняется по-своему. Например, у Lenovo (IBM) в системах с двумя блоками питания настройка через GUI выглядит следующим образом:
На выбор предлагаются три режима работы:
Отказоустойчивость без снижения энергопотребления – вернемся к нему позже;
Отказоустойчивость с понижением мощности;
Generic-серверы, вроде Intel и Supermicro, не всегда хорошо документированы и открытой информации о настройках режимов работы БП не оказалось. Пришлось обратиться к нашим инженерам и форумам. Оказалось, что подобные системы обычно работают они в режиме балансировки нагрузки.
Если вы плотно работали с подобными платформами и владеете другой информацией – поделитесь в комментариях, пожалуйста.
Еще интереснее обстоят дела с системами из трех и более БП.
Три, четыре – кто больше?
Как и в аналогии с RAID, большее число узлов открывает более изощренные схемы использования. Например, у сервера Supermicro с тремя блоками штатно используется режим работы 2+1, то есть работают одновременно два, а третий в резерве.
В случае с четырьмя БП в Lenovo можно настроить использование блоков питания более гибко. Интерфейс даже считает показатели мощности самостоятельно:
С точки зрения баланса производительности и надежности, подобные конфигурации из 4 БП оправданы только при использовании «прожорливых» комплектующих. В остальных случаях запас по мощности будет избыточным, а удобство и запас надежности обеспечивают 2 блока питания с разными подводами электричества.
На мой взгляд, в таких платформах интереснее вместо третьего и четвертого БП поставить резервные батареи (примеры для Supermicro и HP). Они подстрахуют от проблем с UPS и минут на 5 повысят время работы без электричества в сети. Кроме того, с подобными модулями удобнее заниматься обслуживанием железа: выдернул кабель – и спокойно перенес сервер в другой шкаф. Время работы сервера от встроенной батареи составляет около пяти минут.
Один на 800 или два по 400
Опыт инженеров Сервер Молл показывает, что блоки питания на втором месте по выходу из строя, после жестких дисков. По крайней мере, в ходе восстановления серверов эти компоненты часто меняются из-за применения в их конструкции электролитических конденсаторов.
Если к сбоям дисковой подсистемы мы привыкли и держим запасной диск наготове, то замена для системы питания встречается на полках ЗИП реже. Ситуацию в какой-то степени спасает гарантия и возможность получить замену отказавшего БП через пару дней с курьером, но Закон Мерфи со счетов сбрасывать не стоит. В моей практике был случай, когда во время ожидания замены отказавшего БП вышел из строя оставшийся. Хорошо, что на сервере ничего жизненно-важного не было.
Если оставить в стороне надежность, то остается вопрос с мощностью. Как правило, лучше взять сразу два блока питания, каждый с достаточным запасом выходной мощности. Но если бюджет таких вольностей не позволяет, то придется взвешивать потребности более детально и учитывать проседания мощности источников питания. Обратимся к руководству от HP, в котором представлен график КПД системы питания в разных конфигурациях:
В случае низкой нагрузки машины КПД одного блока питания выше, но картина меняется, если у нас высоконагруженный сервер.
Что же будет, если один из блоков питания выйдет из строя, а мощности оставшегося не хватит?
У многих вендоров предусмотрен механизм снижения энергопотребления на случай сбоя – PowerSafe Guard у Fujitsu, Throttling у Lenovo. Использование подобных механизмов не всегда спасает ситуацию, да и существенное падение производительности порой хуже простоя.
Есть еще один нюанс: возрастает нагрузка на второй блок питания, что повышает вероятность его выхода из строя. Лучше исходить из того, что один блок питания из пары должен обеспечивать сервер целиком, хотя бы при штатных нагрузках. Разница в стоимости блоков питания разной мощности не так уж велика, поэтому стоит выбирать более производительные модели. Например, вот цены на варианты от Supermicro:
Блок питания PWS-406P-1R на 400 Ватт стоит в среднем 12 000 ₽;
Цены взяты с Яндекс маркета, так что в реальности они могут быть даже ниже. Экономия 4 000 ₽ в ущерб отказоустойчивости выглядит так себе даже для небольшого сервера.
Так что там с прошивками
Современный блок питания содержит набор диагностических механизмов для контроля внутренней системы охлаждения, напряжения, силы тока и массы внутренних состояний.
Помимо автоматического отключения при перегреве, полезно иметь возможность подключить к централизованному мониторингу показатели работы подсистемы питания. Например, с их помощью можно прогнозировать выход из строя определенного БП или выявить нестабильный подвод электричества. Все это обеспечивают микроконтроллеры, внутреннюю логику которых производитель периодически совершенствует в новых обновлениях.
А теперь о минусах
При всех описанных преимуществах, у решений с несколькими блоками питания есть и отрицательные стороны:
Необходимость покупать более дорогие проприетарные блоки питания. Как правило, они должны быть одинаковыми, что может вызвать проблемы с заменой для очень старых серверов;
Узким местом становится управляющий блоками питания контроллер и плата, к которой они подключаются (Power Distribution Backplane);
При малой нагрузке больший расход электроэнергии, как следствие специфического алгоритма использования;
Если у вас есть собственный негативный опыт работы с конфигурациями из нескольких блоков питания – было бы интересно почитать в комментариях.
В завершение приведу несколько полезных ссылок на калькуляторы мощности популярных вендоров:
Если вам тоже лень оценивать мощность при выборе очередного нового сервера, то эти инструменты помогут при расчете как мощности блоков питания, так и энергопотребления всего ЦОД.