¿Cuándo debo especificar add_efi_memmap como argumento del kernel en el arranque UEFI / EFI?

29

Estoy leyendo algunos tutoriales sobre cómo cargar EFI stub (efistub) en el kernel de Linux. Estas instrucciones a menudo usan el parámetro de arranque del kernel add_efi_memmap. El hardware previsto es Intel x64 con 8 GB de RAM. Mi configuración actual está ejecutando grub-efibootloader y kernel v3.13.

Arranque GRUB sin el add_efi_memmapargumento de arranque:

  • 23BIOS-e820 líneas contadas pordmesg | grep BIOS-e820: | wc -l
  • 243Líneas de memoria EFI contadas pordmesg | grep efi:\ mem | wc -l
  • Zona DMA: 24páginas reservadas
  • Memoria: 7840568K / 8283384K disponible
  • 442816K reservado

El arranque GRUB con add_efi_memmap y el tamaño del mapa de memoria EFI parece diferir:

  • 23 Lineas BIOS-e820
  • 57 Líneas de memoria EFI
  • Zona DMA: 22páginas reservadas
  • Memoria: 7885076K / 8283384K disponible
  • 398308K reservado

EFI stub boot sin add_efi_memmap :

  • 22 Lineas BIOS-e820
  • 60 Líneas de memoria EFI
  • Zona DMA: 21páginas reservadas
  • Memoria: 7885012K / 8283384K disponible

EFI stub boot con add_efi_memmap :

  • 22 Lineas BIOS-e820
  • 66 Líneas de memoria EFI
  • Zona DMA: 21páginas reservadas
  • Memoria: 7882124K / 8283384K disponible

Después de leer más información, como se indica a continuación, no puedo determinar si agregar add_efi_memmapo no. Hace algo extra que no parece absolutamente necesario arrancar. Por otro lado, puede dar una mejor visión (más completa) de la memoria utilizable.

¿En qué casos se debe usar este argumento de arranque add_efi_memmap para el arranque del stub EFI? ¿Aumentaría / disminuiría la velocidad de arranque del stub EFI, y aumentaría o disminuiría la memoria libre, disponible para aplicaciones? ¿Cómo (mejor) verificar si mi mapa de memoria EFI incluye más entradas que mi mapa E820?


Alguna documentación de add_efi_memmep ya consultada:

add_efi_memmap : incluye el mapa de memoria EFI de la RAM física disponible.
Si el mapa de memoria EFI tiene entradas adicionales que no están en el mapa E820, puede incluir esas entradas en el mapa de memoria de núcleos de RAM física disponible utilizando el siguiente parámetro de línea de comando del núcleo. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt


En lugar de agregar siempre las entradas del mapa de memoria EFI (si está presente) al mapa de memoria después de encontrar inicialmente las entradas del mapa de memoria del BIOS E820 y / o las entradas del mapa de memoria de la línea de comando del kernel, en su lugar, solo agregue tales entradas de mapa de memoria EFI adicionales si la opción de arranque del núcleo : add_efi_memmapse especifica - http://www.gossamer-threads.com/lists/linux/kernel/937817


El arranque se congela : si el arranque se bloquea sin ningún mensaje de error después de que GRUB cargue el kernel y el ramdisk inicial, intente eliminar el parámetro del kernel add_efi_memmap. - https://wiki.archlinux.org/index.php/GRUB#Boot_freezes


Este parche cambia el comportamiento del cargador kexec cuando la add_efi_memmapopción está presente en la línea de comando del núcleo actualmente en ejecución, para leer el mapa de memoria del núcleo en /proc/iomemlugar de /sys/firmware/memmap.

En los sistemas EFI, a veces falta la tabla e820 o está incompleta. Sistemas como estos utilizan la add_efi_memmapopción de agregar entradas de la tabla de memoria de EFI a la tabla de memoria del núcleo para crear una imagen completa de la memoria del sistema; sin embargo, el uso de la opción no agrega estas entradas a la tabla utilizada para rellenar /sys/firmware/memmap, que debe ser una copia original inmaculada.

El cargador kexec usa el mapa de memoria prístino por defecto, lo que causa problemas cuando el cargador no tiene una imagen completa del sistema y carga incorrectamente el kernel o el ramdisk en lugares que no son realmente utilizables. Este cambio hace que el cargador kexec verifique la línea de comando del núcleo en ejecución para la add_efi_memmapopción y, si la encuentra, utilizará el mapa modificado en lugar del mapa original. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html


La solución (pirateo), a la que llegaron los desarrolladores del kernel de Linux en 2009 después de una serie de inicios falsos fue agregar una opción de línea de comando del kernel, add_efi_memmappara decirle al kernel que mire el mapa de memoria EFI y lo use para arreglar varias entradas en el mapa de memoria E820. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html

Pro Backup
fuente

Respuestas:

1

Los cargadores de arranque, o Grub, reconstruye el mapa de memoria como e820, supongo que esta es la razón por la que está viendo diferentes valores entre GRUB y el cargador de código auxiliar EFI.

Hay un comentario en el código fuente de Linux que dice que EFI permite "más de un máximo de 128 entradas que pueden caber en el mapa de memoria heredado e820 (página cero)". Parece que este no es el caso de acuerdo con los números que publicó, por lo tanto, dudo que agregar add_efi_memmap sea útil ... Sin embargo, ciertamente no hace daño analizar esta tabla también ...

falstaff
fuente
1

Si su distribución de Linux arranca con éxito EFI STUB, no es necesario usar add_efi_memmap. Esta opción de línea de comando del kernel rara vez se necesita hoy en día: el firmware UEFI y el soporte del kernel de Linux para el mismo han mejorado significativamente desde la era de 2009.

fpmurphy
fuente