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

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

Загрузка GRUB без add_efi_memmap загрузки add_efi_memmap :

  • 23 строки BIOS-e820, подсчитанные dmesg | grep BIOS-e820: | wc -l dmesg | grep BIOS-e820: | wc -l
  • 243 строки памяти EFI, подсчитанные dmesg | grep efi:\ mem | wc -l dmesg | grep efi:\ mem | wc -l
  • Зона DMA: зарезервировано 24 страницы
  • Память: 7840568K / 8283384K доступно
  • 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 страница
  • Память: 7882124K / 8283384K доступно

После прочтения дополнительной информации – как указано ниже – я не могу понять, нужно ли добавлять 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 (если они есть) на карту памяти после изначально находить записи карты памяти E820 BIOS и / или записи memmap в командной строке ядра, – только вместо этого добавлять дополнительные записи карты памяти EFI, если опция загрузки ядра : указано значение add_efi_memmap . – http://www.gossamer-threads.com/lists/linux/kernel/937817


Boot freezes – Если загрузка загружается без сообщения об ошибке после загрузки GRUB ядра и исходного ramdisk, попробуйте удалить параметр ядра 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 использует карту памяти из первозданной памяти, что вызывает проблемы, когда загрузчик не имеет полного изображения системы и неправильно загружает ядро ​​или ramdisk в местах, которые на самом деле не используются. Это изменение заставляет загрузчик 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

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

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

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