Wann muss ich add_efi_memmap als Kernelargument im UEFI / EFI-Boot angeben?

29

Ich lese gerade ein paar Tutorials, wie man mit EFI-Stub (efistub) den Linux-Kernel lädt. Diese Anweisungen verwenden häufig Kernel-Boot-Parameter add_efi_memmap. Die vorgesehene Hardware ist Intel x64 mit 8 GB RAM. Mein aktuelles Setup ist grub-efiBootloader und Kernel v3.13.

GRUB- Boot ohne das add_efi_memmapBoot-Argument:

  • 23BIOS-e820 Zeilen gezählt vondmesg | grep BIOS-e820: | wc -l
  • 243EFI-Speicherzeilen gezählt vondmesg | grep efi:\ mem | wc -l
  • DMA-Zone: 24Seiten reserviert
  • Speicher: 7840568K / 8283384K verfügbar
  • 442816K reserviert

GRUB booten mit add_efi_memmap und die EFI Memory Map-Größe scheint sich zu unterscheiden:

  • 23 BIOS-e820-Leitungen
  • 57 EFI-Speicherzeilen
  • DMA-Zone: 22Seiten reserviert
  • Speicher: 7885076K / 8283384K verfügbar
  • 398308K reserviert

EFI-Stub- Boot ohne add_efi_memmap :

  • 22 BIOS-e820-Leitungen
  • 60 EFI-Speicherzeilen
  • DMA-Zone: 21Seiten reserviert
  • Speicher: 7885012K / 8283384K verfügbar

EFI Stub Boot mit add_efi_memmap :

  • 22 BIOS-e820-Leitungen
  • 66 EFI-Speicherzeilen
  • DMA-Zone: 21Seiten reserviert
  • Speicher: 7882124K / 8283384K verfügbar

Nachdem ich mehr Informationen gelesen habe, kann ich nicht herausfinden, ob ich sie hinzufügen soll add_efi_memmapoder nicht. Es macht etwas extra, was nicht unbedingt notwendig zu sein scheint, um hochzufahren. Auf der anderen Seite kann es eine bessere (vollständigere) Sicht auf den nutzbaren Speicher geben.

In welchen Fällen sollte dieses Boot-Argument add_efi_memmap für den EFI-Stub-Boot verwendet werden? Würde dies die EFI-Stub-Startgeschwindigkeit erhöhen / verringern und den für Anwendungen verfügbaren freien Speicher erhöhen oder verringern? Wie kann ich (besser) überprüfen, ob meine EFI-Speicherkarte mehr Einträge enthält als meine E820-Karte?


Einige Dokumente zu add_efi_memmep wurden bereits konsultiert:

add_efi_memmap : EFI-Speicherzuordnung des verfügbaren physischen Arbeitsspeichers einschließen.
Wenn die EFI-Speicherzuordnung zusätzliche Einträge enthält, die nicht in der E820-Zuordnung enthalten sind, können Sie diese Einträge mithilfe des folgenden Kernel-Befehlszeilenparameters in die Kernel-Speicherzuordnung des verfügbaren physischen Arbeitsspeichers aufnehmen. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt


Anstatt immer EFI-Speicherzuordnungseinträge (falls vorhanden) zur Speicherzuordnung hinzuzufügen, nachdem anfänglich entweder E820-BIOS-Speicherzuordnungseinträge und / oder Kernel-Befehlszeilen-Memmapeinträge gefunden wurden, fügen Sie -instead- nur solche zusätzlichen EFI-Speicherzuordnungseinträge hinzu, wenn die Kernel-Startoption aktiviert ist : add_efi_memmapist angegeben. - http://www.gossamer-threads.com/lists/linux/kernel/937817


Boot friert ein - Wenn das Booten nach dem Laden des GRUB-Kernels und der ersten Ramdisk ohne Fehlermeldung hängen bleibt, entfernen Sie den Kernelparameter add_efi_memmap. - https://wiki.archlinux.org/index.php/GRUB#Boot_freezes


Dieser Patch ändert das Verhalten des kexec Loader , wenn die add_efi_memmapOption auf der aktuell laufende Kernel Kommandozeile vorhanden ist, die Kernel - Speicherkarte aus lesen /proc/iomemstatt /sys/firmware/memmap.

Auf EFI-Systemen fehlt manchmal die e820-Tabelle oder ist unvollständig. Systeme wie diese verwenden die add_efi_memmapOption, EFIs Speichertabelleneinträge zur Speichertabelle des Kernels hinzuzufügen, um ein vollständiges Bild des Systemspeichers zu erstellen. Wenn Sie diese Option verwenden, werden diese Einträge jedoch nicht zu der Tabelle hinzugefügt, die zum Auffüllen verwendet /sys/firmware/memmapwird. Hierbei handelt es sich um eine makellose Originalkopie.

Der kexec-Loader verwendet standardmäßig die unberührte Speicherzuordnung. Dies führt zu Problemen, wenn der Loader kein vollständiges Bild des Systems hat und den Kernel oder die Ramdisk an Orten falsch lädt, die nicht wirklich verwendbar sind. Diese Änderung veranlasst den Kexec-Loader, die Befehlszeile des laufenden Kernels auf die add_efi_memmapOption zu überprüfen und, falls sie gefunden wird, die geänderte Map anstelle der ursprünglichen Map zu verwenden. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html


Die Lösung (Hack), die die Linux-Kernel-Entwickler 2009 nach einer Reihe von Fehlstarts gefunden hatten, bestand darin, eine Kernel-Befehlszeilenoption hinzuzufügen, add_efi_memmap- um den Kernel anzuweisen, die EFI-Speicherzuordnung zu überprüfen und sie zum Korrigieren verschiedener Einträge zu verwenden in der E820-Speicherkarte. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html

Pro Backup
quelle

Antworten:

1

Bootloader oder Grub erstellt die Speicherzuordnung wie e820 neu. Ich denke, dies ist der Grund, warum zwischen GRUB und dem EFI-Stubloader unterschiedliche Werte angezeigt werden.

Es gibt einen Kommentar im Linux-Quellcode, der besagt, dass EFI "mehr als die maximal 128 Einträge zulässt, die in die Legacy-Speicherkarte des e820 (nullseitig) passen". Dies scheint nach den von Ihnen angegebenen Zahlen nicht der Fall zu sein. Daher bezweifle ich, dass das Hinzufügen von add_efi_memmap hilfreich ist. Es tut jedoch auf keinen Fall weh, diese Tabelle auch zu analysieren.

falstaff
quelle
1

Wenn Ihre Linux-Distribution EFI STUB erfolgreich bootet, muss add_efi_memmap nicht verwendet werden. Diese Kernel-Befehlszeilenoption wird heutzutage nur noch selten benötigt. Die UEFI-Firmware und die Linux-Kernel-Unterstützung wurden seit 2009 erheblich verbessert.

fpmurphy
quelle