Bug 34851 - option for microcode selection
Summary: option for microcode selection
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: make-initrd (show other bugs)
Version: unstable
Hardware: all Linux
: P3 enhancement
Assignee: Alexey Gladkov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-04-25 23:34 MSK by Michael A. Kangin
Modified: 2018-05-01 17:38 MSK (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michael A. Kangin 2018-04-25 23:34:04 MSK
В настоящее время iucode_tool вызываются с параметром --scan-system.
Наверное, это хорошо для любимой домашней системы и маленького initrd.
Но если хочется сделать условную live/rescue для неопределённого круга серверов с разношёрстными процессорами, вряд ли там попадётся такой же процессор, как на домашней системе.

Если этот параметр закомментировать в /usr/share/make-initrd/tools/add-ucode, то всё получается, в initrd попадает полный микрокод.

Но для удобства процесса напрашивается какая-то опция выбора, чтобы не лезть каждый раз в исходники.
Comment 1 Alexey Gladkov 2018-04-29 16:01:27 MSK
(В ответ на комментарий №0)
> В настоящее время iucode_tool вызываются с параметром --scan-system.
> Наверное, это хорошо для любимой домашней системы и маленького initrd.

Вообще-то make-initrd создаёт образ для _локальной_ машины. Любимой или нет.

> Но если хочется сделать условную live/rescue для неопределённого круга серверов
> с разношёрстными процессорами, вряд ли там попадётся такой же процессор, как на
> домашней системе.

make-initrd использует локальный procfs и sysfs. Если ваш неопределённый круг серверов с разношёрстными процессорами и железом настолько совместимы с машиной на которой генерируется образ, то и ucode должен положить совместимую прошивку.

> Если этот параметр закомментировать в /usr/share/make-initrd/tools/add-ucode,
> то всё получается, в initrd попадает полный микрокод.

Вы можете показать документацию про такое поведение утилиты iucode_tool ?
Что будет положено без этой опции ? Весь файл с прошивками ?

> Но для удобства процесса напрашивается какая-то опция выбора, чтобы не лезть
> каждый раз в исходники.

Да, как только мне будет понятно, что это будет за опция.
Comment 2 Michael A. Kangin 2018-04-29 19:54:58 MSK
(In reply to comment #1)
> (В ответ на комментарий №0)
> > В настоящее время iucode_tool вызываются с параметром --scan-system.
> > Наверное, это хорошо для любимой домашней системы и маленького initrd.
> 
> Вообще-то make-initrd создаёт образ для _локальной_ машины. Любимой или нет.

Всегда любимой :)
А для создания initrd для образов инсталяторов, rescue, live и прочих дистрибутивных сборок - разве какой-то иной инструмент предполагается использовать?

> 
> > Но если хочется сделать условную live/rescue для неопределённого круга серверов
> > с разношёрстными процессорами, вряд ли там попадётся такой же процессор, как на
> > домашней системе.
> 
> make-initrd использует локальный procfs и sysfs. 

Ок, это я понимаю.

> Если ваш неопределённый круг
> серверов с разношёрстными процессорами и железом настолько совместимы с 
> машиной
> на которой генерируется образ, то и ucode должен положить совместимую прошивку.

В том-то и дело, что совместимости ждать сложно.
Пример: в initrd, сделанный на i7-7700, по умолчанию не попадает микрокод для E5-2620 v3.
 
> > Если этот параметр закомментировать в /usr/share/make-initrd/tools/add-ucode,
> > то всё получается, в initrd попадает полный микрокод.
> 
> Вы можете показать документацию про такое поведение утилиты iucode_tool ?

man iucode_tool:

-S, --scan-system
Select  microcodes  by  scanning  online processors on this system for their signa‐
tures.

This option can be used only once, and it can be combined with  the  -s  option  to
select more microcodes.  The microcodes selected by --scan-system can also be dese‐ 
lected by a later -s !signature option.

Should the signature scan fail, the program will print a warning to  the  user  and
continue as if --scan-system had not been specified.  This is a fail‐safe condition
when iucode_tool is used to install microcode updates for the next boot. 



> Что будет положено без этой опции ? Весь файл с прошивками ?

Судя по размеру, да. Весь файл.
Comment 3 Alexey Gladkov 2018-04-29 20:29:13 MSK
(В ответ на комментарий №2)
> А для создания initrd для образов инсталяторов, rescue, live и прочих
> дистрибутивных сборок - разве какой-то иной инструмент предполагается
> использовать?

А кто его предлагает использовать для создания rescue, live и прочих дистрибутивных сборок ?

Это я к тому, что агрумент, что этот инструмент не кладёт что-то, что нужно для других машин совсем не аргумент, а особенность инструмента.

> > > Но если хочется сделать условную live/rescue для неопределённого круга серверов
> > > с разношёрстными процессорами, вряд ли там попадётся такой же процессор, как на
> > > домашней системе.
> > 
> > make-initrd использует локальный procfs и sysfs. 
> 
> Ок, это я понимаю.
> 
> > Если ваш неопределённый круг
> > серверов с разношёрстными процессорами и железом настолько совместимы с 
> > машиной
> > на которой генерируется образ, то и ucode должен положить совместимую прошивку.
> 
> В том-то и дело, что совместимости ждать сложно.
> Пример: в initrd, сделанный на i7-7700, по умолчанию не попадает микрокод для
> E5-2620 v3.

Не спорю, но это правильно.

> > Вы можете показать документацию про такое поведение утилиты iucode_tool ?
> 
> man iucode_tool:

Спасибо конечно, но я это читал и всё же задал этот вопрос т.к. из мана не понятно, что будет положено в образ.

> > Что будет положено без этой опции ? Весь файл с прошивками ?
> 
> Судя по размеру, да. Весь файл.

А как бы получить более конкретный ответ ?
Comment 4 Michael A. Kangin 2018-04-29 20:37:35 MSK
(In reply to comment #3)
> (В ответ на комментарий №2)
> > А для создания initrd для образов инсталяторов, rescue, live и прочих
> > дистрибутивных сборок - разве какой-то иной инструмент предполагается
> > использовать?
> 
> А кто его предлагает использовать для создания rescue, live и прочих
> дистрибутивных сборок ?

Я затрудняюсь ответить на этот вопрос :)

> > > Что будет положено без этой опции ? Весь файл с прошивками ?
> > Судя по размеру, да. Весь файл.
> А как бы получить более конкретный ответ ?

Да, весь файл с прошивками. То, что оказывается в initrd, имеет такую-же MD5 сумму, как и полный файл в хост-системе:

[root@0ab1f7f40749 z]# cat /boot/initrd-4.14.34-un-def-alt0.M80P.1-colaboot.img |cpio -id
3402 blocks
[root@0ab1f7f40749 z]# md5sum kernel/x86/microcode/GenuineIntel.bin 
4f9294e1327e3199e806bf0b5180e707  kernel/x86/microcode/GenuineIntel.bin
[root@0ab1f7f40749 z]# md5sum /lib/firmware/intel-ucode/intel-microcode.bin 
4f9294e1327e3199e806bf0b5180e707  /lib/firmware/intel-ucode/intel-microcode.bin
Comment 6 Alexey Gladkov 2018-04-30 14:55:09 MSK
Исправлено в make-initrd 2.0.9-alt1
Comment 7 Michael A. Kangin 2018-04-30 17:28:50 MSK
(In reply to comment #5)
> попробуйте:
> 
> http://git.altlinux.org/people/legion/packages/make-initrd.git?p=make-initrd.git;a=commit;h=5336dc1559b6bb61f7716fc130ef53864b697104

Алексей, спасибо, проверяю.

Нету ли здесь ошибки в этой строке? ']' не хватает?

+
+[ -z "${UCODE_ALL_MICROCODE-}" ||
+       iucode_scan_system=
+
Comment 8 Michael A. Kangin 2018-04-30 18:22:14 MSK
Проверил.
Опция UCODE_ALL_MICROCODE работает замечательно, с "UCODE_ALL_MICROCODE = 1" в initrd попадает полный микрокод.

С UCODE_CPU_FAMILY всё не так ясно. Как я понял из исходников, там должно быть число больше 6 (и соответствовать family из cpuinfo).
- что я указываю UCODE_CPU_FAMILY = 6, что UCODE_CPU_FAMILY = 7 - в initrd попадает одинаковый (по md5) маленький файлик микрокода. Кажется, переменная $cpu_family используется только для проверки, не ПентиумПро ли это.

- что на i7-7700, что на E5-2620 v3 по cpuinfo получаются абсолютно одинаковые семейства, 
vendor_id	: GenuineIntel
cpu family	: 6
А микрокод, как оказывается, нужен разный. Т.е. получается, эту UCODE_CPU_FAMILY не удастся использовать для выбора микрокодов для избранных процессоров?
Comment 9 Alexey Gladkov 2018-05-01 15:25:28 MSK
(В ответ на комментарий №7)
> Нету ли здесь ошибки в этой строке? ']' не хватает?
> 
> +
> +[ -z "${UCODE_ALL_MICROCODE-}" ||
> +       iucode_scan_system=
> +

Да, опечатка. Исправлено.

(В ответ на комментарий №8)
> С UCODE_CPU_FAMILY всё не так ясно. Как я понял из исходников, там должно быть
> число больше 6 (и соответствовать family из cpuinfo).

Да. Этот параметр нужен если вы хотите положить микрокод под конкретное семейство.

> - что я указываю UCODE_CPU_FAMILY = 6, что UCODE_CPU_FAMILY = 7 - в initrd
> попадает одинаковый (по md5) маленький файлик микрокода. Кажется, переменная
> $cpu_family используется только для проверки, не ПентиумПро ли это.

Нет, если процессор AMD.

> А микрокод, как оказывается, нужен разный. Т.е. получается, эту
> UCODE_CPU_FAMILY не удастся использовать для выбора микрокодов для избранных
> процессоров?

UCODE_CPU_FAMILY влияет только на выбор файла firmware. Для конкретного процессора нужно указывать конкретную сигнатуру и такой поддержки нет.
Comment 10 Michael A. Kangin 2018-05-01 17:38:56 MSK
(In reply to comment #9)

> Нет, если процессор AMD.

А, всё время забываю что такие бывают :)

Еще раз большое спасибо!