Quando devo specificare add_efi_memmap come argomento del kernel nell'avvio UEFI / EFI?


29

Sto leggendo alcuni tutorial su come stub EFI (efistub) caricare il kernel Linux. Queste istruzioni usano spesso il parametro di avvio del kernel add_efi_memmap. L'hardware previsto è Intel x64 con 8 GB di RAM. La mia configurazione attuale esegue grub-efibootloader e kernel v3.13.

GRUB di avvio , senza l' add_efi_memmapargomento di avvio:

  • 23Linee BIOS-e820 contate dadmesg | grep BIOS-e820: | wc -l
  • 243Linee di memoria EFI contate dadmesg | grep efi:\ mem | wc -l
  • Zona DMA: 24pagine riservate
  • Memoria: 7840568K / 8283384K disponibile
  • 442816K riservato

L' avvio di GRUB con add_efi_memmap e la dimensione della mappa di memoria EFI sembra differire:

  • 23 Linee BIOS-e820
  • 57 Linee di memoria EFI
  • Zona DMA: 22pagine riservate
  • Memoria: 7885076K / 8283384K disponibile
  • 398308K riservato

Avvio stub EFI senza add_efi_memmap :

  • 22 Linee BIOS-e820
  • 60 Linee di memoria EFI
  • Zona DMA: 21pagine riservate
  • Memoria: 7885012K / 8283384K disponibili

Avvio stub EFI con add_efi_memmap :

  • 22 Linee BIOS-e820
  • 66 Linee di memoria EFI
  • Zona DMA: 21pagine riservate
  • Memoria: 7882124K / 8283384K disponibili

Dopo aver letto ulteriori informazioni, come indicato di seguito, non riesco a capire se aggiungere add_efi_memmapo meno. Fa qualcosa in più che non sembra assolutamente necessario per l'avvio. D'altra parte può dare per dare una visione migliore (più completa) della memoria utilizzabile.

In quali casi questo argomento di avvio add_efi_memmap deve essere utilizzato per l'avvio di stub EFI? Ciò aumenterebbe / ridurrebbe la velocità di avvio dello stub EFI e aumenterebbe o ridurrebbe la memoria libera disponibile per le applicazioni? Come (meglio) verificare se la mia mappa di memoria EFI include più voci della mia mappa E820?


Alcuni documenti add_efi_memmep già consultati:

add_efi_memmap : include la mappa di memoria EFI della RAM fisica disponibile.
Se la mappa di memoria EFI ha voci aggiuntive non presenti nella mappa E820, è possibile includere tali voci nella mappa di memoria dei kernel della RAM fisica disponibile utilizzando il seguente parametro della riga di comando del kernel. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt


Invece di aggiungere sempre voci della mappa di memoria EFI (se presenti) alla mappa di memoria dopo aver trovato inizialmente le voci della mappa di memoria E820 BIOS e / o le voci memmap della riga di comando del kernel, -investe- aggiungere solo tali voci aggiuntive della mappa di memoria EFI se l'opzione di avvio del kernel : add_efi_memmapè specificato. - http://www.gossamer-threads.com/lists/linux/kernel/937817


Il boot si blocca - Se l'avvio si blocca senza alcun messaggio di errore dopo che GRUB ha caricato il kernel e il ramdisk iniziale, prova a rimuovere il parametro del kernel add_efi_memmap. - https://wiki.archlinux.org/index.php/GRUB#Boot_freezes


Questa patch cambia il comportamento del caricatore kexec quando l' add_efi_memmapopzione è presente sulla riga di comando del kernel attualmente in esecuzione, per leggere la mappa di memoria del kernel /proc/iomeminvece di /sys/firmware/memmap.

Sui sistemi EFI, a volte la tabella e820 è mancante o incompleta. Sistemi come questi usano l' add_efi_memmapopzione per aggiungere le voci della tabella di memoria di EFI alla tabella di memoria del kernel per creare un quadro completo della memoria del sistema; tuttavia, l'utilizzo dell'opzione non aggiunge queste voci alla tabella utilizzata per popolare /sys/firmware/memmap, che deve essere una copia originale incontaminata.

Il caricatore kexec usa la mappa di memoria incontaminata per impostazione predefinita, il che causa problemi quando il caricatore non ha un quadro completo del sistema e carica in modo errato il kernel o il ramdisk in luoghi che non sono effettivamente utilizzabili. Questa modifica fa in modo che il caricatore kexec verifichi la riga di comando del kernel in esecuzione per l' add_efi_memmapopzione e, se la trova, utilizzerà la mappa modificata invece della mappa originale. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html


La soluzione (hack), raggiunta dagli sviluppatori del kernel Linux nel 2009 dopo una serie di false partenze, era quella di aggiungere un'opzione della riga di comando del kernel, add_efi_memmap- per dire al kernel di guardare la mappa di memoria EFI e usarla per correggere varie voci nella mappa di memoria E820. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html

Risposte:


1

Boot loader, o Grub del resto, ricostruisce la mappa di memoria come e820, suppongo che questo sia il motivo per cui stai vedendo valori diversi tra GRUB e il caricatore di stub EFI.

C'è un commento nel codice sorgente di Linux che afferma che EFI consente "più delle 128 voci massime che possono rientrare nella mappa di memoria legacy (zeropage) e820". Questo sembra non essere il caso in base ai numeri che hai pubblicato, quindi dubito che l'aggiunta di add_efi_memmap sia utile ... Tuttavia, certamente non fa male analizzare anche questa tabella ...


1

Se la tua distribuzione Linux si avvia correttamente EFI STUB, non è necessario utilizzare add_efi_memmap. Al giorno d'oggi questa opzione della riga di comando del kernel è raramente necessaria: il firmware UEFI e il supporto del kernel Linux per lo stesso sono notevolmente migliorati dall'era del 2009.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.