7 января система мониторинга сообщила о проблемах с производительностью на 28-ми родительских серверах. Основным симптомом был медленно работающий процессор.
Поиск причин и решение
Проблема проявилась только на платформе Intel S2600BPB с новыми процессорами Intel Silver и Gold. Другие общие характеристики не обнаружились: разные дата-центры, разные версии Linux, разные виртуализации.
Решить проблему в лоб не удалось. Сняли с сервера всю нагрузку (выключили клиентские VDS) — родительский сервер продолжал тормозить. Медленно работал даже интерфейс UEFI. Перезагрузка также не помогала.
Примерно 8 часов ушло на то, чтобы докопаться до сути проблемы. Искали, что связывает все эти случаи. В итоге решить проблему удалось только полным отключением питания. При запуске серверов после 10-минутного простоя проблема исчезает и не повторяется.
Причина сбоя
Чтобы объяснить, в чем дело, придется немного рассказать о физическом устройстве питания серверов.
Сервер получает питание не напрямую. Для группы серверов действует пара блоков питания, работающих параллельно. Управляет подачей питания на все элементы сервера специальное устройство — контроллер BMC, Intel Baseboard Management Controller.
В консоли одного BMC нашли логи:
308 Sun Jan 7 05:31:29 2018 PS1 Status BMC Warning Power Supply Predictive Failure - Over-temperature warning, Status Byte: 0x40 - Asserted
312 Sun Jan 7 05:40:04 2018 PS2 Status BMC Warning Power Supply Predictive Failure - Over-temperature warning, Status Byte: 0x40 - Asserted
То есть контроллер определил перегрев блоков питания, после чего дал команду всем подчиненным ему серверам работать на минимальной мощности.
Проверили логи остальных контроллеров для пострадавших серверов. Все они с точностью до минуты определили такой же перегрев блоков питания:
d0 | 01/07/2018 | 05:31:30 | Power Supply #0x50 | Predictive failure | Asserted
b2 | 01/07/2018 | 05:31:29 | Power Supply #0x50 | Predictive failure | Asserted
a6 | 01/07/2018 | 05:31:29 | Power Supply #0x50 | Predictive failure | Asserted
79 | 01/07/2018 | 05:31:29 | Power Supply #0x50 | Predictive failure | Asserted
62 | 01/07/2018 | 05:31:30 | Power Supply #0x50 | Predictive failure | Asserted
7e | 01/07/2018 | 05:31:29 | Power Supply #0x50 | Predictive failure | Asserted
3d | 01/07/2018 | 05:31:29 | Power Supply #0x50 | Predictive failure | Asserted
3e | 01/07/2018 | 05:31:29 | Power Supply #0x50 | Predictive failure | Asserted
185 | 01/07/2018 | 05:31:30 | Power Supply #0x50 | Predictive failure | Asserted
4d | 01/07/2018 | 05:31:30 | Power Supply #0x50 | Predictive failure | Asserted
53 | 01/07/2018 | 05:31:29 | Power Supply #0x50 | Predictive failure | Asserted
a4 | 01/07/2018 | 05:31:30 | Power Supply #0x50 | Predictive failure | Asserted
ee | 01/07/2018 | 05:31:31 | Power Supply #0x50 | Predictive failure | Asserted
28 | 01/07/2018 | 05:31:31 | Power Supply #0x50 | Predictive failure | Asserted
38 | 01/07/2018 | 05:31:30 | Power Supply #0x50 | Predictive failure | Asserted
91 | 01/07/2018 | 05:31:30 | Power Supply #0x50 | Predictive failure | Asserted
3a | 01/07/2018 | 05:31:31 | Power Supply #0x50 | Predictive failure | Asserted
2c | 01/07/2018 | 05:31:30 | Power Supply #0x50 | Predictive failure | Asserted
Датчики температуры показывали, что температура на блоках питания не поднималась выше 39°C. Получается, что с десяток разных контроллеров одновременно решили, что происходит перегрев блоков питания, хотя на самом деле его не было. Наше предположение — это проблема аппаратной платформы, баг в логике работы.
Одной из версий было, что кто-то взломал IPMI и одновременно дал команду на снижение энергопотребления всем процессорам. Однако, пострадали и новые простаивающие сервера, еще не подключенные в сеть.
Написали запрос в Intel с описанием проблемы, приложив все логи BMC. Интел обещал помочь. Спустя 18 часов, позвонил инженер Intel и сообщил, что зарегистрированы еще аналогичные случаи. Обещали держать нас в курсе новостей. Мы ожидаем одного из двух ответов: либо сообщения о том, что проблема была разовая и больше не повторится, либо обновления BMC для закрытия проблемы.
Решили провести свой эксперимент. На пустой платформе без клиентских серверов перевели время назад, на 6 января, и на следующие сутки, как только часы показали 5:30 проблема повторилась. Поставили на этой платформе дату +3 дня относительно текущего времени. Это поможет заранее узнать о повторении проблемы.