Quando preciso especificar add_efi_memmap como argumento do kernel na inicialização UEFI / EFI?


29

Estou lendo alguns tutoriais sobre como o EFI stub (efistub) carrega o kernel do Linux. Essas instruções geralmente usam o parâmetro de inicialização do kernel add_efi_memmap. O hardware pretendido é Intel x64 com 8 GB de RAM. Minha configuração atual está executando o grub-efigerenciador de inicialização e o kernel v3.13.

Inicialização do GRUB sem o add_efi_memmapargumento de inicialização:

  • 23Linhas BIOS-e820 contadas pordmesg | grep BIOS-e820: | wc -l
  • 243Linhas de memória EFI contadas pordmesg | grep efi:\ mem | wc -l
  • Zona DMA: 24páginas reservadas
  • Memória: 7840568K / 8283384K disponível
  • 442816K reservados

GRUB de inicialização com add_efi_memmap e o tamanho do mapa de memória EFI parece diferir:

  • 23 Linhas BIOS-e820
  • 57 Linhas de memória EFI
  • Zona DMA: 22páginas reservadas
  • Memória: 7885076K / 8283384K disponível
  • 398308K reservados

Inicialização de stub EFI sem add_efi_memmap :

  • 22 Linhas BIOS-e820
  • 60 Linhas de memória EFI
  • Zona DMA: 21páginas reservadas
  • Memória: 7885012K / 8283384K disponível

Inicialização de stub EFI com add_efi_memmap :

  • 22 Linhas BIOS-e820
  • 66 Linhas de memória EFI
  • Zona DMA: 21páginas reservadas
  • Memória: 7882124K / 8283384K disponível

Depois de ler mais informações - conforme descrito abaixo - não consigo descobrir se devo adicionar add_efi_memmapou não. Faz algo extra que não parece absolutamente necessário para inicializar. Por outro lado, pode dar uma visão melhor (mais completa) da memória utilizável.

Em quais casos esse argumento de inicialização add_efi_memmap deve ser usado para a inicialização de stub do EFI? Isso aumentaria / diminuiria a velocidade de inicialização do stub EFI e aumentaria ou diminuiria a memória livre, disponível para aplicativos? Como (melhor) verificar se meu mapa de memória EFI inclui mais entradas que meu mapa E820?


Alguma documentação add_efi_memmep já foi consultada:

add_efi_memmap : inclua o mapa de memória EFI da RAM física disponível.
Se o mapa de memória EFI tiver entradas adicionais que não estão no mapa E820, você poderá incluir essas entradas no mapa de memória de kernels da RAM física disponível usando o seguinte parâmetro de linha de comando do kernel. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt


Em vez de sempre adicionar entradas do mapa de memória EFI (se houver) ao mapa de memória depois de localizar inicialmente as entradas do mapa de memória E820 BIOS e / ou as entradas do memmap da linha de comando do kernel, -instead- adicione apenas essas entradas adicionais do mapa de memória EFI se a opção de inicialização do kernel : add_efi_memmapestá especificado. - http://www.gossamer-threads.com/lists/linux/kernel/937817


Congela a inicialização - Se a inicialização travar sem nenhuma mensagem de erro após o GRUB carregar o kernel e o ramdisk inicial, tente remover o parâmetro do kernel add_efi_memmap. - https://wiki.archlinux.org/index.php/GRUB#Boot_freezes


Este patch altera o comportamento do carregador kexec quando a add_efi_memmapopção está presente na linha de comando do kernel atualmente em execução, para ler o mapa de memória do kernel em /proc/iomemvez de /sys/firmware/memmap.

Nos sistemas EFI, às vezes a tabela e820 está ausente ou incompleta. Sistemas como esses usam a add_efi_memmapopção de adicionar entradas da tabela de memória do EFI à tabela de memória do kernel para criar uma imagem completa da memória do sistema; no entanto, o uso da opção não adiciona essas entradas à tabela usada para preencher /sys/firmware/memmap, que deve ser uma cópia original intocada.

O carregador kexec usa o mapa de memória original por padrão, o que causa problemas quando o carregador não possui uma imagem completa do sistema e carrega incorretamente o kernel ou o ramdisk em locais que não são realmente utilizáveis. Essa alteração faz com que o carregador kexec verifique a linha de comando do kernel em execução quanto à add_efi_memmapopção e, se a encontrar, usará o mapa modificado em vez do mapa original. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html


A solução (hack), alcançada pelos desenvolvedores do kernel do Linux em 2009 após várias partidas falsas, foi adicionar uma opção de linha de comando do kernel, add_efi_memmap- dizer ao kernel para examinar o mapa de memória EFI e usá-lo para corrigir várias entradas no mapa de memória do E820. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html

Respostas:


1

Os carregadores de inicialização ou o Grub, por outro lado, reconstroem o mapa de memória como o e820. Acho que essa é a razão pela qual você está vendo valores diferentes entre o GRUB e o stub loader EFI.

Há um comentário no código fonte do Linux que diz que o EFI permite "mais do que o máximo de 128 entradas que podem caber no mapa de memória herdado do e820 (zeropage)". Este não parece ser o caso, de acordo com os números que você postou, por isso duvido que a adição de add_efi_memmap seja útil ... No entanto, certamente não custa analisar também esta tabela ...


1

Se a sua distribuição Linux inicializar com êxito o EFI STUB, não será necessário usar add_efi_memmap. Atualmente, essa opção de linha de comando do kernel raramente é necessária - o firmware UEFI e o suporte ao kernel Linux para o mesmo melhoraram significativamente desde a era de 2009.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.