Что такое bmc в сервере
Что такое bmc в сервере
Всем привет сегодня расскажу что такое IPMI порт управления, как его системный инженер может использовать у себя на работе в повседневные будни, упрощая себе жизнь просто до безобразия.
Возможности IPMI
Как работает контроллер BMC
Давайте посмотрим схему работы BMC контроллера. И так Baseboard Management Controller это интерфейс для удаленного управления и мониторинга состояния сервера. По сути Baseboard Management Controller это однокристальная система, как ее правильно называть System-on-a-Chip, SoC. У BMC есть встроенное графическое ядро, которое обращается и взаимодействует с основными компонентами материнской платы серверного железа, через всевозможные интерфейсы, нужные для работы стандарта IPMI. Чем хорош IPMI, так это, то что он не зависит от операционной системы хостового сервера. Лично я использую IPMI, для прошивки BIOS у серверов и установки серверной операционной системы.
Так же IPMI может работать за NAT, например в цодах, людям дают возможность управлять так своим сервером, полезно если он завис. Для NAT потребуется открыть вот такие порты:
Как выглядит на серверах IPMI-порт
Приведу пример того, как на физическом сервере SuperMicro выглядит данный порт управления. Я выделил его стрелкой, чаще всего он располагается над портами USB.
Далее вам необходимо все сконфигурировать, как настроить IPMI на серверах Supermicro в BIOS или через утилиту ipmicfg, я уже рассказывал, на этом я не останавливаюсь.
Пароль по умолчанию на IPMI
Стандартным логином и паролем для IPMI будет ADMIN / ADMIN, именно большими буквами.
Перед вами появится страница со сводной информации о системе, которую вы можете себе лицезреть на картинке, она дает вам обзор системы, IP-адреса, номера версии прошивки, версии BIOS, а также предварительного просмотра удаленной консоли. Тут же вы вообще можете включить сервер, если он не работает. Я много раз пользовался IPMI интерфейсом, чтобы включить сервер, после того, как его случайно погасили.
На экране информации об оборудовании вы можете просмотреть различные компоненты оборудования, чтобы увидеть спецификации и т. д.
С помощью раздела Configuration вы можете выполнить целый ряд задач, включая оповещения, аутентификацию RADIUS, сетевую конфигурацию (для самого IPMI), настройку SMTP для предупреждений, контроль доступа по IP, системные журналы и т. д.
Раздел удаленного управления (Remote ControL) является одной из наиболее интересных вещей, так как, скорее всего, вам будет интересно иметь удаленный доступ к серверу, если вы в первую очередь заходите на IPMI.
В разделе дистанционного управления (Remote Control ), меню управления питанием позволяет:
Меню Launch SOL позволяет запустить консоль SOL.
Для запуска консоли удаленного управления в IPMI (Remote Console), кликните по превью изображению, у вас должен скачаться java файл. Браузер может на него ругаться, нажмите «Keep», чтобы подтвердить загрузку.
Во всплывающем окне нажмите «Continue»
далее для запуска консоли управления нажмите «Run». Может выскочить несколько разновидностей ошибок:
Использование IPMI
Для удобства такие опции IPMI, как перезагрузка и выключение сервера, а также возможность перезапуска консоли выведены и на главную страницу панели управления аккаунтом.
Подключение
Реквизиты доступа
Для доступа к IPMI необходимо использовать IP-адрес и реквизиты, полученные от наших специалистов. Они также доступны на главной странице панели управления. По умолчанию мы предоставляем пользователям доступ к IPMI уровня Operator. Он позволяет выполнять все необходимые действия с сервером, однако ограничивает часть функционала в целях безопасности. При возникновении сложностей в работе IPMI, которые вы не можете решить самостоятельно, пожалуйста, свяжитесь с нашей службой поддержки.
Подключиться к интерфейсу вы можете с помощью браузера или специальной утилиты IPMI View от SuperMicro.
Веб-интерфейс
Для использования веб-интерфейса необходимо кликнуть на ссылку «Перейти в IPMI» в панели управления либо вручную ввести в адресной строке IP-адрес IPMI и указать логин и пароль доступа.
Для корректного выхода из IPMI после завершения работы используйте кнопку Logout в верхнем правом углу перед закрытием окна браузера.
IPMI View
Для использования IPMI View ее необходимо скачать и установить.
Далее необходимо указать имя сервера (произвольное) и его IP-адрес.
Чтобы сервер сохранился в настройках при следующем запуске утилиты, нажмите на значок дискеты (опция «Save configuration»).
Кликните дважды на имя сервера в меню слева и введите логин и пароль в окне авторизации. Как только подключение будет установлено, отобразится надпись Connected, а в нижней части окна появятся вкладки с опциями управления сервером.
Основные операции
Управление питанием
В IPMIView управление питанием располагается на вкладке IPMI Device:
Здесь вам доступны следующие опции:
В зависимости от текущего состояния сервера могут быть доступны все или часть указанных выше опций.
Работа с консолью
В IPMI View перейдите на вкладку KVM Console и нажмите Launch Console, после чего консоль будет запущена.
При первом запуске, вероятно, будет выведено уведомление от системы безопасности Java:
В этом случае вам необходимо внести IP-адрес IPMI (как по протоколу http://, так и https://) в исключения безопасности в настройках Java (подробная инструкция доступна на сайте Java). После вы сможете запустить консоль.
Особенности работы с консолью:
При возникновении проблем в работе консоли в первую очередь попробуйте выполнить ее перезапуск. Это можно сделать из вашей панели управления аккаунтом по кнопке «IKVM reset». Если проблема сохранится, свяжитесь с нами.
Подключение образа
При работе с консолью вы можете подключить образ ISO с вашего локального компьютера.
В открывшемся окне:
В поле «Статус» должно отобразиться сообщение об успешном подключении образа, после чего окно Virtual Storage можно закрыть. Далее необходимо перезагрузить сервер.
Иногда может потребоваться изменить порядок загрузки в BIOS сервера, чтобы загрузиться с ISO-образа. Это можно сделать так же, как при обычном физическом подключении к серверу.
Мониторинг
Через интерфейс IPMI вы также можете производить мониторинг температуры, напряжения и системы охлаждения сервера.
IPMI ― обзор технологии
Что такое IPMI
Аббревиатура IPMI расшифровывается как Intelligent Platform Management Interface (интеллектуальный интерфейс управления платформой). Через IPMI можно удаленно подключиться к серверу и управлять его работой:
IPMI хорош тем, что перечисленные выше функции доступны вне зависимости от работы процессора, BIOS или операционной системы (ОС) управляемой платформы. Например, можно удаленно перезагрузить сервер, если зависла ОС, или поискать причину выхода из строя CPU в журнале системных событий. Управлять можно даже выключенным сервером ― достаточно того, что сервер подключен к электрической сети.
После того как сервер смонтировали и подключили к сети, инженеры Selectel настраивают BIOS и IPMI. Дальше можно выйти из шумной серверной и продолжить настраивать оборудование удаленно. Как только первоначальная настройка закончена, клиенты Selectel могут управлять работой выделенных серверов и серверов произвольной конфигурации через IPMI.
Историческая справка
Первую версию спецификации IPMI v1.0 разработали совместно компании Intel, Dell, NEC и Hewlett-Packard в 1998 году. На практике обнаружились уязвимости и недостатки, которые исправили в последующих версиях IPMI v1.5 и v2.0.
Производитель | Технология на основе IPMI |
---|---|
Cisco | Cisco IMC (Integrated Management Controller) |
DELL | iDRAC (Integrated Dell Remote Access Card) |
HP | iLO (Integrated Lights-Out) |
IBM | IMM (Integrated Management Module) |
Lenovo | IMM (Integrated Management Module) |
Supermicro | SIM (Supermicro Intelligent Management) |
Компании устанавливают свои цены на предоставляемую технологию. Если стоимость реализации IPMI увеличивается, цена аренды сервера растет, так как напрямую зависит от стоимости расходников.
Решения производителей отличаются между собой:
Хотя производители предоставляют измененный и доработанный IPMI, реализация его архитектуры остается схожей. Разберемся, из чего состоит технология, опираясь на официальную спецификацию компании Intel.
Базовые компоненты любого IPMI
Контроллеры управления
В центре архитектуры — «мозг» IPMI, микроконтроллер BMC (Baseboard Management Controller). Через него как раз и происходит удаленное управление сервером. По сути, BMC ― это отдельный компьютер со своим программным обеспечением и сетевым интерфейсом, который распаивают на материнской плате или подключают как плату расширения по шине PCI management bus.
BMC питается от дежурного напряжения материнской платы, то есть работает всегда, вне зависимости от состояния сервера.
К BMC можно подключить дополнительные контроллеры управления (Management Controllers, MCs), чтобы расширить возможности базового управления. Например, в то время как основная система управляется функциями BMC, MCs подключаются для мониторинга различных подсистем: резервных источников питания, RAID-накопителей, периферийных устройств.
MCs поставляются самостоятельными платами, отдельными от центрального BMC, поэтому их также называют Satellite Controllers. Дополнительных контроллеров может быть несколько, а вот центральный BMC — один.
К BMC контроллеры подключаются через интерфейс IPMB (Intelligent Platform Management Bus ― шина интеллектуального управления платформой). IPMB ― это шина на основе I2C (Inter-Integrated Circuit), по которой BMC перенаправляет команды управления к различным частям архитектуры:
Кроме передачи команд на BMC можно настроить автоматическое выполнение действий контроллером с помощью следующих механизмов:
PEF (Platform Event Filtering) | BMC хранит таблицу событий с информацией о том, на какие события реагировать и какие действия предпринять. Когда BMC получает сообщение о событии, он сравнивает данные с таблицей и выбирает, как реагировать на событие. Реакция включает такие действия, как выключение, перезагрузка системы, формирование оповещения |
Watchdog Timer | Таймер настраивается на выполнение действия по истечении заданного промежутка времени. Действия включают в себя выключение, перезагрузку сервера, прерывание процессов. Если в качестве таймаута задать значение 0, действие будет выполнено сразу же. В зависимости от реализации Watchdog может опрашивать систему о состоянии раз в заданный временной интервал. Если система не отвечает (например, при зависании), инициируется действие |
Firmware Firewall | Некоторые действия BMC, реализуемые в отдельно стоящем сервере, могут нарушить работу модульных платформ (например, блейд-сервера). Чтобы предотвратить возможные проблемы, файрвол позволяет BMC блокировать настройки, команды IPMI и операции записи, поступающие через системный интерфейс. Файервол также содержит набор команд, через которые можно узнать, какие команды и функции управления доступны для конкретной платформы |
Энергонезависимое хранилище
Энергонезависимое хранилище остается доступным даже при сбое CPU сервера, например, через локальную сеть; состоит из трех областей:
К реализации SEL есть обязательные требования:
Сообщение о событии несет в себе информацию из областей SDR Repository и FRU Info.
Записи SDR — это данные о типах и количестве сенсоров, их возможности генерировать события, типы показаний. SDR также содержат записи о количестве и типах устройств, подключенных к IPMB. Записи SDR хранятся в области памяти, которая называется SDR Repository (Sensor Data Records Repository).
Записи FRU содержат информацию о серийных номерах и моделях деталей различных модулей системы — процессора, платы памяти, платы ввода-вывода, контроллерах управления.
Информация FRU может предоставляться через MC (командами IPMI) либо через доступ к чипам энергонезависимой памяти SEEPROM (Serial Electrically Erasable Programmable Read Only Memory), подключенным по шине Private Management Bus. По этой шине контроллеры общаются через низкоуровневые I2C-команды с устройствами, которые не поддерживают IPMI-команды.
Практическое применение
Допустим, клиент жалуется на зависания сервера, но в логах операционной системы всё в порядке. Смотрим SEL ― видим ошибки по одной из планок оперативной памяти с указанием информации о слоте, в котором она находится. Меняем ― сервер начинает работать как часы.
Выше мы разобрали основные модули архитектуры IPMI. Теперь обратимся к структуре передаваемых команд и посмотрим, по каким интерфейсам происходит удаленное подключение.
Структура IPMI-команд
IPMI передает сообщения в формате запрос-ответ. Запросы — это команды. Команды инициируют действия и устанавливают значения. Формат запрос-ответ делает возможным одновременное общение нескольких контроллеров по одной шине.
Сообщения IPMI содержат базовый набор полей, единый для всех команд:
Каналы, по которым передаются сообщения, можно разделить на три категории с соответствующими интерфейсами:
Интерфейсы удаленного доступа
В начальной версии IPMI удаленная консоль подключалась к модулю BMC через последовательный интерфейс (Serial Interface). Спецификация IPMI v2.0 базируется на использовании сетевого интерфейса (LAN Interface).
Интерфейс LAN предоставляется через выделенный сетевой порт BMC со своим IP-адресом. При передаче через LAN сообщения IPMI проходят несколько этапов инкапсуляции:
Последовательный интерфейс для подключения удаленной консоли к BMC уже не используется, однако он нужен для реализации двух функций:
Serial-over-LAN нужен для взаимодействия с компонентами системы, которые понимают только последовательный интерфейс общения. Еще можно из консоли сервера посылать команды напрямую к устройствам сервера (чипам, картам, дискам и так далее). SoL реализован так, чтобы работать совместно с функцией Serial Port Sharing.
Сеанс и аутентификация
Для LAN и последовательного интерфейса началу передачи IPMI-сообщений предшествует установление сеанса, в ходе которого формируются пакеты данных IPMI Session.
Установление сеанса ― это аутентификация конкретного пользователя. Сеанс должен быть активирован перед началом передачи IPMI-сообщений по следующему алгоритму:
Доступ к BMC можно заблокировать, отправив одновременно множество запросов об активации сеанса, тогда все ресурсы будут использоваться для отслеживания сессий, требующих активации. Чтобы предотвратить возможную атаку, в реализации BMC рекомендуется применять алгоритм LRU (Last Recently Used). Алгоритм утверждает ID сеанса для наиболее раннего запроса активации сеанса. Например, удаленная консоль запускается через браузер в noVNC-сессии. Если открыть несколько вкладок с запущенными сессиями, текстовый ввод будет доступен в наиболее ранней открытой вкладке.
Когда IPMI становится недоступен
IPMI помогает восстановить работоспособность сервера при его сбое. Однако может случиться так, что становится недоступна система удаленного управления. Сбои в работе IPMI можно разделить на четыре категории:
IPMI на практике
Управлять сервером по IPMI можно через веб-браузер, утилиты, предоставляемые производителями, и утилиты с открытым исходным кодом.
Веб-интерфейс у каждой реализации IPMI свой, но принцип доступа остается одинаковым:
Возможности веб-интерфейса также реализованы в графической утилите Supermicro IPMIView:
Чтобы управлять оборудованием через Linux-консоль, устанавливается соответствующая утилита (например, Ipmitool для локального и удаленного управления или IPMICFG для локального). Далее при помощи консольных команд добавляется IPMI-устройство и конфигурируется BMC.
Клиентам Selectel доступен IPMI для выделенных серверов и серверов произвольной конфигурации. IPMI реализован в виде KVM-консоли, которая запускается в noVNC-сессии через панель управления. Для этого в карточке с информацией о сервере надо нажать на значок консоли в правом верхнем углу:
Консоль открывается в браузере и подстраивается под размер экрана. При желании консоль можно использовать даже через телефон или планшет.
Сессия прерывается, если выйти из панели.
Заключение
IPMI ― это полностью автономный компонент серверной платформы, который не зависит ни от операционной системы, ни от BIOS, ни от CPU сервера.
Благодаря IPMI, затраты на обслуживание серверных систем сокращаются, а жизнь системных администраторов становится проще. Нет необходимости постоянного присутствия рядом с оборудованием ― его работа контролируется удаленно по сети.
В этой статье мы рассмотрели основные компоненты IPMI. Однако детали технологии обширны. Талантливые разработчики, опираясь на спецификацию, могут создавать свое IPMI-оборудование и open-source инструменты, попутно устраняя недостатки текущей спецификации и открывая новые возможности удаленного управления.
Взгляд изнутри на OpenBMC применительно к системам OpenPOWER
В одной из предыдущих статей Максим затронул аппаратную часть платы BMC (Baseboard Management Controller). Я хочу продолжить повествование и рассказать о нашем подходе к BMC и участии в проекте OpenBMC.
Для полноты истории придётся начать немного издалека и рассказать о назначении сервисных процессоров и роли BMC в работе сервера, затронуть протокол IPMI и программную часть. После этого кратко опишу, как BMC участвует в загрузке систем на POWER8. Закончу обзором проекта OpenBMC и нашим отношением к вопросу. Опытные в теме сервисных процессоров читатели могут сразу отмотать на нижние разделы.
Сервисные процессоры — что, зачем и как
Сервисный процессор — это отдельный специализированный контроллер, встраиваемый в сервер. Его чип может быть напаян на материнскую плату, расположен на отдельной карте или, к примеру, размещён в блейд-шасси для управления ресурсами всей системы в целом (и тогда это может называться уже SMC — System Management Controller). BMC — частный случай сервисного процессора для управления отдельным хостом, и дальше по тексту будем говорить только о них и использовать термин «сервисный процессор» только в значении «BMC». При этом, говоря «BMC», в целом имеем в виду как собственно чип, так и управляющую прошивку. В некоторых случаях отдельно будем указывать, что речь идёт о аппаратной либо программной части.
BMC запитан отдельно от основной системы, включается автоматически при подаче дежурного (standby) питания на сервер и работает, пока питание не отключится. Почти все сервисные процессоры умеют управлять питанием хоста, предоставлять доступ к консоли главной операционной системы через Serial Over LAN (SoL), считывать показания системных датчиков (скорость вентиляторов, напряжение на блоках питания и VRM, температура компонентов), следить за исправностью компонентов, хранить аппаратный лог ошибок (SEL). Многие предоставляют возможности удаленного KVM, виртуальных медиа (DVD, ISO), поддерживают различные протоколы out-of-band подключения (IPMI/RMCP, SSH, RedFish, RESTful, SMASH) и прочее.
Сейчас удалённоe управление повсеместно распространилось. Оно облегчает управление большим парком серверов, повышает доступность из-за сокращения времени простоя, и улучшает операционную эффективность датацентров. Как следствие, наличие широких возможностей удалённого менеджмента учитывается заказчиками при выборе поставщика аппаратной платформы.
Пользователями BMC в основном являются сисадмины для удалённого управления, восстановления после сбоев, сбора логов, установки ОС и т.д. Данными из сервисного процессора пользуется техподдержка. Для нее BMC часто является единственным источником информации при устранении сбоев и выявлении неисправных компонентов для замены.
В современной инфраструктуре BMC является не просто приятной дополнительной опцией удалённого управления сервера (хотя не ходить в серверную, где холодно, шумно, негде присесть и плохо ловит мобильный — это приятно). Во многих ситуациях это критический компонент инфраструктуры. Когда операционная система или приложение не отвечает или находится в непонятном состоянии, сервисный процессор является единственным источником информации и способом быстро восстановить работу.
Для подключения к сервисному процессору используют выделенный сетевой порт (out-of-band), или же BMC делит сетевой порт с основной системой (sideband). То есть один физический Ethernet-коннектор, но два независимых MAC и два IP-адреса. Для первоначальной настройки часто используют консольное RS-232 подключение.
Краткая справка
Исторически, программная часть BMC разрабатывалась вместе с аппаратной платформой сервера и теми же разработчиками. Как следствие, для каждой платформы ПО сервисного процессора было уникальным. У одного и того же вендора могло быть несколько вариантов прошивок BMC для разных линеек продуктов. Несмотря на распространение open source, прошивки BMC оставались долгое время исключительно проприетарными.
Обычно сервисный процессор основан на специализированных системах на кристалле (System-on-Chip, SoC), и стандартом де-факто описания требований к архитектуре аппаратной части является спецификация IPMI (Intelligent Platform Management Interface). Это достаточно старый стандарт, ещё в 1998 году группа компаний разработала первую спецификацию IPMI для стандартизации управления сервером.
IPMI предусматривает общий интерфейс сообщений для доступа ко всем управляемым компонентам в системе и описывает большой набор интерфейсов для разных типов операций — например, мониторинга температуры, напряжения, скорости вентиляторов, или получения доступа к консоли ОС. Также предусмотрены методы для управления питанием всего комплекса, получения аппаратных логов SEL (System Event Log), считывания данных сенсоров (SDR), реализации аппаратных watchdog’ов. IPMI предоставляет замену или абстракцию для отдельных методов доступа к сенсорам, таких как System Management Bus (SMBus) или Inter Integrated Circuit (I2C). В большинстве BMC используют проприетарный IPMI стек от небольшого числа вендоров.
Претензии к IPMI
К протоколу накопилось много претензий, в том числе в части безопасности при доступе по сети (IPMI over LAN). Периодически сеть сотрясают истории, подобные этой. Дело вот в чем — получив доступ к сервисному процессору, мы получаем полный контроль над сервером. Ничто не мешает перезагрузиться в recovery mode и поменять пароль для ‘root’-учётки. Единственным надёжным средством от подобной уязвимости является правило, что IPMI траффик (UDP порт 623) не должен выходить за пределы специально выделенной сети или VLAN. За активностью в управляющей сети должен быть строгий контроль.
Кроме проблем c безопасностью, аппаратный ландшафт датацентров сильно изменился за минувшие годы. Распространились виртуализация, дезагрегация компонентов, облака. В протокол IPMI сложно добавлять что-то новое. Чем больше серверов надо администрировать, тем выше значение автоматизации процедур. Появляются спецификации API, призванные заменить IPMI over LAN. Многие возлагают надежды на RedFish.
Этот API использует современные JSON и HTTPS протоколы и RESTful интерфейс для доступа к данным ‘out-of-band’. Цель разработки нового API — предложить отрасли единый стандарт, который подходил бы для гетерогенных датацентров. Причем и для одиночных сложных enterprise серверов и для облачных датацентров из множества commodity серверов. И этот API должен отвечать актуальным требованиям безопасности.
При этом на аппаратном уровне стандартом является поддержка IPMI, который участвует во всем рабочем цикле сервера, начиная от включения питания, загрузки операционной системы и заканчивая восстановлением после сбоя (зависания, паники, и т.д.).
Роль BMC в жизни сервера. На этой картинке SMS означает «System Management Software». Картинка взята отсюда.
Роль BMC в загрузке системы OpenPOWER
В сердце аппаратной части протокола IPMI находится чип BMC. Он задействован в работе сервера, начиная с момента подачи питания и участвует в процессе начальной загрузки сервера на OpenPOWER. То есть BMC необходим для включения системы. В то же время перезагрузка/падение BMC не влияет на уже работающую операционную систему.
BMC и процессор POWER8 соединены шиной LPC (Low Pin Count). Эта шина предназначена для связи процессора с периферийными, относительно медленными устройствами. Она работает на частоте до 33 МГц. Через LPC центральный процессор (то есть микрокод Hostboot/OPAL) общается с IPMI-стеком BMC по BT ( стр. 104) интерфейсу. По этой же шине POWER8 получает загрузочный микрокод из PNOR (Processor NOR chip) через LPC → SPI (Serial Peripheral Interface) соединение.
Первый этап загрузки начинается, как только блоки питания включены в сеть и заканчивается на стадии, когда BMC полностью включился и готов начать загрузку всего хоста. Забегая вперёд, отмечу, что отсюда и далее описываю работу ПО BMC на OpenPOWER-системах вообще, но конкретно в нашем сервере эти функции выполняет OpenBMC. При подаче питания BMC начинает выполнять код из SPI флэш, загружает u-boot и затем ядро Linux. На данном этапе на BMC работает IPMI, шина LPC подготовлена для доступа хоста к PNOR памяти (монтируется через mtdblock). Cам чип POWER8 на данном этапе выключен. В этом состоянии можно подключиться к сетевому интерфейсу BMC и что-то поделать.
Когда система в режиме ‘standby’, и нажата кнопка включения питания, BMC инициирует продолжение загрузки и запускает на мастер-процессоре «маленький» контроллер SBE (Self Boot Engine) внутри POWER8 чипа на загрузку Hostboot микрокода из PNOR-флэша в L3 кэш мастер-процессора.
Микрокод Hostboot отвечает за инициализацию шин процессора, SDRAM памяти, остальных процессоров POWER8, OPAL (Open Power Abstraction Layer) и еще одного микроконтроллера встроенного в POWER8, называемого OCC (On Chip Controller).
Об этом контроллере расскажем чуть подробнее, так как для BMC он имеет особое значение. Когда Hostboot заканчивает свою работу, из PNOR флэша запускается следующий компонент микрокода Skiboot. Этот уровень синхронизирует процессоры, инициализирует шины PCIe, а также взаимодействует с BMC через IPMI (например, обновляет значение сенсора «FW Boot progress»). Skiboot также отвечает за запуск следующего уровня загрузки Petitboot, который выбирает, откуда будет загружена основная операционная система, и запускает ее через вызов kexec.
Но сделаем шаг назад, и вернёмся к OCC. Чип OCC представляет собой ядро PPC 405, встроенное в процессор IBM POWER8 вместе с основными ядрами POWER8 (один ОСС на чип). У него есть собственные 512 КБ SRAM, доступ к основной памяти. Это система реального времени, ответственная за температурный контроль (мониторинг температур памяти и процессорного ядра), управление производительностью памяти, отслеживание напряжения и частоты процессора. OCC предоставляет доступ ко всей этой информации для BMC по шине I2C.
Что именно делает OCC?
Кроме взаимодействия с OCC и центральным процессором по шине LPC, у BMC есть и другие интерфейсы. Например, для управления блоками питания и LED используется GPIO на чипе BMC, для чтения сенсоров может использоваться I2C.
Взаимосвязь всего вышеупомянутого не так уж сложна
На данный момент большая часть микрокода OpenPOWER является открытой. При этом программная часть сервисного процессора и стек IPMI до недавнего времени оставались проприетарными. Первым open source проектом для сервисного процессора стал OpenBMC. Сообщество встретило его с воодушевлением и стало активно развивать. Про OpenBMC и поговорим дальше.
OpenBMC, его история и особенности
Наконец, мы подходим к истории появления OpenBMC и том, как мы его используем.
Рождение OpenBMC в Facebook
Появился OpenBMC в компании Facebook при разработке свитча Wedge в рамках сообщества OCP в 2015 году. Изначально программную часть BMC разрабатывал поставщик железа. В первые месяцы работы возникло много новых требований к BMC, координация которых с разработчиками была сложной и вызывала задержки. Под влиянием этого, на одном из хакатонов четыре инженера Facebook реализовали некоторые из базовых функций BMC за 24 часа. До продуктива было очень далеко, но стало ясно, что задача реализации софтверной части BMC может быть решена отдельно от аппаратной.
Через несколько месяцев OpenBMC официально был выпущен вместе с коммутатором Wedge, а еще через некоторое время исходный код OpenBMC был открыт в рамках партнерства OCP.
Далее Facebook адаптировал OpenBMC для NVMe флэш-полки Lightning, а следом и для шасси микросерверов Yosemite. В последнем изменении Facebook отказался от RMCP/RMCP+ (доступ IPMI over LAN), но появился REST API через HTTP(S) и консольный доступ по SSH. Таким образом, у Facebook получился единый API для управления разными типами оборудования и большая гибкость реализации новых фич. С проприетарным подходом к BMC такое было бы невозможно.
В концепции Facebook, BMC — обычный сервер, но работает на SoС c ограниченными ресурсами (медленный процессор, мало памяти, небольшой флэш). С учетом этого, OpenBMC был задуман как специализированный дистрибутив Linux, все пакеты которого собираются из исходников с помощью проекта Yocto. Описание всех пакетов в Yocto объединяются в ‘предписания’ (recipes), которые в свою очередь объединяются в ‘слои’ (layers).
OpenBMC имеет три слоя:
OpenBMC легко портируется с одной платформы на другую с помощью пересборки несколькими командами bitbake. Это позволяет использовать один и тот же BMC и как следствие один API на разных аппаратных платформах. Этим можно сломать сложившуюся традицию зависимости программного стека от аппаратной части.
Fork проекта в IBM
Сообщество OCP быстро прониклось идеей OpenBMC, и в разработку активно включился другой участник OCP – IBM. Их стараниями возник форк проекта под OpenPOWER, и к августу 2015 была выпущена первая версия OpenBMC для сервера Rackspace Barreleye под SoC AST2400. Инженеры IBM решительно взялись за дело и не просто адаптировали OpenBMC под новую платформу, а значительно его переработали. При этом из-за сжатых сроков и для простоты разработки активно использовали Python.
Изменения коснулись всех слоев проекта, в том числе переработано ядро Linux под SoC (устанавливаемые драйвера, добавлен device tree), на пользовательском уровне появился D-Bus для межпроцессорного взаимодействия (у facebook D-Bus не было). Именно через D-Bus реализованы все функции OpenBMC. Основным способом работы с OpenBMC является REST интерфейс для доступа к интерфейсам шины. Кроме того, есть Dropbear SSH.
Предусмотрен web-доступ к REST API (для отладки, к примеру) через фреймворк Python Bottle.
Благодаря легкой портируемости OpenBMC с одной платформы на другую, для разработки могут использоваться отладочные платы, вплоть до RaspberryPI. Для упрощения разработки предусмотрена сборка под эмулятор QEMU.
Также, к примеру, через obmcutil можно посмотреть значение сенсоров и подробную информацию про аппаратную часть сервера (FRU), если это поддерживается на конкретной платформе:
Сейчас, в проекте OpenBMC активно участвует не только IBM, но и много других вендоров, заинтересованных в уходе от закрытого стека BMC. Сам IBM сосредоточен в основном на адаптации под платформу P9.
Большая часть разработки OpenBMC ведется под лицензией Apache-2.0, но в состав OpenBMC входит множество компонентов с разными лицензиями (например, ядро Linux и u-boot под GPLv2). В результате получается микс из разных open source лицензий. Кроме того, разработчики могут добавлять в конечную сборку собственные проприетарные компоненты, которые работают параллельно с Open Source.
Наш взгляд на OpenBMC
Как понятно из текста выше, программную часть своего сервисного процессора мы проектируем на основе OpenBMC. Продукт еще сырой, но самый минимум функций для администрирования сервера в нем уже реализован, частично реализован IPMI (для самых базовых потребностей). Сервисные процессоры в серверах с таким набором возможностей были на рынке несколько лет назад.
OpenBMC постоянно изменяется и совершенствуется, почти каждый день на gerrit сервере можно увидеть новые коммиты. Поэтому сильно концентрироваться на функциональности в данный момент — дело не очень благодарное. Непрерывно выполняется рефакторинг, код на Python заменяется на C/C++, больше функций переносятся в systemd.
Отношение к сервисному процессору, как к обычному серверу нетипично для BMC из-за его важной роли в жизни сервера. Использование systemd и D-Bus не было распространено в этой области раньше. Новое время — новые веяния.
Первая задача для нас — адаптация текущего состояния OpenBMC под нашу платформу. Далее мы планируем доработать ее опциями и интерфейсами, в которых заинтересованы наши заказчики. С учетом ограниченной функциональности на текущий момент, направлений для разработки есть великое множество. По мере реализации новых возможностей обязательно будем коммитить изменения в проект OpenBMC, чтобы сообщество могло пользоваться.