Віртуалізація - поновлення микрокода intel і amd в vmware esxi - як це працює

Компанія VMware в своєму блозі торкнулася цікаву тему - оновлення микрокода для процесорів платформ Intel і AMD в гіпервізора VMware ESXi, що входить до складу vSphere. Суть проблеми тут така - сучасні процесори надають можливість поновлення свого микрокода при завантаженні, що дозволяє виправляти зроблені вендором помилки або усувати проблемні місця. Як правило, оновлення микрокода йдуть разом з апдейтом BIOS, за які відповідає вендор процесорів (Intel або AMD), а також вендор платформи (HP, Dell і інші).

Тим часом, не всі виробники платформ роблять поновлення BIOS своєчасно, тому щоб отримати апдейт микрокода доводиться досить довго чекати, що може бути критичним якщо помилка в поточній версії микрокода вельми серйозна. ESXi має свій механізм microcode loader, який дозволяє хильнути поновлення микрокода при завантаженні в тому випадку, якщо ви отримали ці оновлення від вендора і знаєте, що робите.

Треба сказати, що в VMware vSphere 6.0 поновлення микрокода накочуються тільки при завантаженні і тільки на дуже ранній стадії, так як пізніша завантаження може поміняти дані, вже початкові завантаживши VMkernel.

Сама VMware використовує теж не останні оновлення микрокода процесорів, так як з метою максимальної безпеки накочуються тільки найкритичніші апдейти, а вендори платформ просять час на тестування оновлень.

Є два способи оновити мікрокод процесорів в ESXi - через установку VIB-пакета і через оновлення файлів-пакетів микрокода на сховище ESXi. Якщо ви заглянете в папку / bootbank. то побачите там такі файли:

Ці файли і містять поновлення микрокода і йдуть в VIB-пакеті cpu-microcode гипервизора ESXi. Нижче опишемо процедуру поновлення микрокода для ESXi за допомогою обох методів. Переважний метод - це робити апдейт через VIB-пакет, так як це найбільш безпечно. Також вам буде потрібно Lunix-машина для маніпуляцій з микрокодом. Все описане нижче ви робите тільки на свій страх і ризик.

1. Завантажуємо поновлення микрокода.

Для Intel виконайте команду:

Після розпакування ви отримаєте файл microcode.dat. Це файл в ASCII-форматі, його треба буде перетворити в бінарний. У AMD в репозиторії є відразу бінарні файли (3 штуки, всі потрібні).

2. Робимо бінарний пакет микрокода.

Створюємо наступний python-скрипт і називаємо його intelBlob.py:

#! / Usr / bin / python
# Make a raw binary blob from Intel microcode format.
# Requires Python 2.6 or later (including Python 3)
# Usage: intelBlob.py

for line in sys.stdin:
if line [0] == '/':
continue
hvals = line.split ( ',')
for hval in hvals:
if hval == '\ n' or hval == '\ r \ n':
continue
val = int (hval, 16)
for shift in (0, 8, 16, 24):
outf.write (bytearray ([(val >> shift) 0xff]))

Далі створюємо бінарники микрокода. Для Intel:

cat intel / *. dat | ./intelBlob.py uc_intel
gzip uc_intel

3. Метод заміни файлів з апдейтом микрокода.

Тут все просто. Виконаємо одну з наступних команд для отриманих файлів:

Далі можна переходити до кроку 5.

4. Метод створення VIB-пакета і його установки.

Тут потрібно використовувати утиліту VIB Author. яку можна поставити на Linux-машину (на даний момент утиліта йде в RPM-форматі, оптимізована під SuSE Enterprise Linux 11 SP2, який і пропонується використовувати). Скачайте файл cpu-microcode.xml і самостійно внесіть в нього зміни стосуються версії микрокода.

Потім робимо VIB-пакет за допомогою наступної команди:

vibauthor -c -d cpu-microcode.xml \
-p uc_intel.gz, boot, uc_intel, 200 \
-p uc_amd.gz, boot, uc_amd, 201

Якщо в VIB-файл не потрібно включати мікрокод від одного з вендорів CPU - просто приберіть частину команди з "-p".

Далі встановлюємо VIB через esxcli:

esxcli software acceptance set --level = CommunitySupported
esxcli software vib install \
-v file: /vmfs/volumes/datastore1/cpu-microcode-6.0.0-0.test.0.vib

Потім перевірте наявність файлів uc _ *. B00. які ви зробили на кроці 2, в директорії / altbootbank.

Після перезавантаження хоста ESXi подивіться в лог /var/log/vmkernel.log на наявність повідомлень MicrocodeUpdate. Також можна подивитися через vish в файли / hardware / cpu / cpuList / *. в яких десь в кінці будуть наступні рядки:

Number of microcode updates: 1
Original Revision: 0x00000011
Current Revision: 0x00000017

Це і означає, що мікрокод процесорів у вас оновлений. ESXi оновлює мікрокод всіх процесорів послідовно. Ви можете перевірить це, подивившись параметр Current Revision.

Також ви можете заборонити на хост будь-які оновлення микрокода, встановивши опцію microcodeUpdate = FALSE в розділі VMkernel boot. Також за замовчуванням заборонено оновлення микрокода на більш ранні версії (даунгрейд) і на експериментальні версії. Це можна відключити, використовуючи опцію microcodeUpdateForce = TRUE (проте мікрокод більшості процесорів може бути оновлений тільки при наявності цифрового підпису вендора). Крім того, щоб поставити експериментальний апдейт микрокода, потрібно включити опції "debug mode" або "debug interface" в BIOS сервера, після чого повністю перезавантажити його.