Когда мне нужно указать add_efi_memmap в качестве аргумента ядра при загрузке UEFI / EFI?


29

Я читаю некоторые уроки, как заглушки EFI (efistub) загружать ядро ​​Linux. В этих инструкциях часто используется параметр загрузки ядра add_efi_memmap. Предполагаемое оборудование - Intel x64 с 8 ГБ оперативной памяти. Моя текущая установка работает под управлением grub-efiзагрузчика и ядра v3.13.

GRUB загрузки без в add_efi_memmapпараметре загрузки:

  • 23Строки BIOS-e820 подсчитываютсяdmesg | grep BIOS-e820: | wc -l
  • 243Строки памяти EFI подсчитываютсяdmesg | grep efi:\ mem | wc -l
  • Зона DMA: 24страницы защищены
  • Память: 7840568К / 8283384К доступно
  • 442816K зарезервировано

GRUB загружается с add_efi_memmap и размер карты памяти EFI, кажется, отличается:

  • 23 Линии BIOS-e820
  • 57 Линии памяти EFI
  • Зона DMA: 22страницы защищены
  • Память: 7885076K / 8283384K доступно
  • 398308K защищены

EFI заглушка загрузки без add_efi_memmap :

  • 22 Линии BIOS-e820
  • 60 Линии памяти EFI
  • Зона DMA: 21страницы защищены
  • Память: 7885012K / 8283384K доступно

EFI заглушки загрузки с add_efi_memmap :

  • 22 Линии BIOS-e820
  • 66 Линии памяти EFI
  • Зона DMA: 21страницы защищены
  • Память: 7882124К / 8283384К доступно

После прочтения дополнительной информации - как указано ниже - я не могу понять, добавлять ли add_efi_memmapили нет. Он делает что-то дополнительное, что не кажется абсолютно необходимым для загрузки. С другой стороны, это может дать лучшее (более полное) представление о полезной памяти.

В каких случаях этот загрузочный аргумент add_efi_memmap должен использоваться для загрузки заглушки EFI? Будет ли это увеличивать / уменьшать скорость загрузки заглушки EFI, а также увеличивать или уменьшать объем свободной памяти, доступной для приложений? Как (лучше) проверить, содержит ли моя карта памяти EFI больше записей, чем моя карта E820?


Некоторая документация add_efi_memmep уже рассмотрена:

add_efi_memmap : включает карту памяти EFI доступной физической памяти.
Если в карте памяти EFI есть дополнительные записи, которых нет в карте E820, вы можете включить эти записи в карту памяти ядра доступной физической ОЗУ, используя следующий параметр командной строки ядра. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt


Вместо того, чтобы всегда добавлять записи карты памяти EFI (если они есть) в карту памяти после первоначального поиска записей карты памяти BIOS E820 и / или записей memmap командной строки ядра, -instead- добавляйте только такие дополнительные записи карты памяти EFI, если опция загрузки ядра : add_efi_memmapуказано. - http://www.gossamer-threads.com/lists/linux/kernel/937817


Загрузка зависает - если загрузка застревает без каких-либо сообщений об ошибках после загрузки ядра GRUB и начального виртуального диска, попробуйте удалить параметр ядра add_efi_memmap. - https://wiki.archlinux.org/index.php/GRUB#Boot_freezes


Этот патч изменяет поведение загрузчика kexec, когда add_efi_memmapопция присутствует в командной строке запущенного в данный момент ядра, чтобы /proc/iomemвместо карты считывать карту памяти ядра /sys/firmware/memmap.

В системах EFI иногда таблица e820 отсутствует или неполна. Подобные системы используют add_efi_memmapопцию добавления записей таблицы памяти EFI в таблицу памяти ядра, чтобы построить полную картину памяти системы; однако использование этой опции не добавляет эти записи в таблицу, используемую для заполнения /sys/firmware/memmap, которая должна быть первичной оригинальной копией.

Загрузчик kexec по умолчанию использует нетронутую карту памяти, что вызывает проблемы, когда загрузчик не имеет полной картины системы и неправильно загружает ядро ​​или виртуальный диск в местах, которые на самом деле не используются. Это изменение заставляет загрузчик kexec проверять наличие параметра в командной строке работающего ядра add_efi_memmapи, если он его находит, будет использовать измененную карту вместо исходной карты. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html


Решение (взлом), к которому разработчики ядра Linux пришли в 2009 году после нескольких неудачных попыток, заключалось в добавлении параметра командной строки ядра add_efi_memmap- чтобы ядро ​​посмотрело на карту памяти EFI и использовало ее для исправления различных записей. в карте памяти E820. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html

Ответы:


1

Загрузчики, или Grub в этом отношении, перестраивают карту памяти, как e820, я думаю, именно поэтому вы видите разные значения между GRUB и загрузчиком-заглушкой EFI.

В исходном коде Linux есть комментарий, в котором говорится, что EFI допускает «больше, чем максимум 128 записей, которые могут уместиться в устаревшей (нулевой) карте памяти e820». Похоже, что это не относится к числам, которые вы опубликовали, поэтому я сомневаюсь, что добавление add_efi_memmap полезно ... Однако, конечно, не помешает и анализ этой таблицы ...


1

Если ваш дистрибутив Linux успешно загружен EFI STUB, нет необходимости использовать add_efi_memmap. Этот параметр командной строки ядра в настоящее время редко требуется - поддержка прошивки UEFI и ядра Linux для них значительно улучшилась с эры 2009 года.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.