Kiedy muszę podać add_efi_memmap jako argument jądra w rozruchu UEFI / EFI?

29

Czytam kilka samouczków, w jaki sposób EFI stub (efistub) ładuje jądro Linuksa. Te instrukcje często używają parametru rozruchu jądra add_efi_memmap. Zamierzonym sprzętem jest Intel x64 z 8 GB pamięci RAM. W mojej bieżącej konfiguracji jest uruchomiony program grub-efiładujący i jądro v3.13.

GRUB bagażnika bez tej add_efi_memmapargumentu startowego:

  • 23Linie BIOS-E820 zliczane przezdmesg | grep BIOS-e820: | wc -l
  • 243Linie pamięci EFI zliczone przezdmesg | grep efi:\ mem | wc -l
  • Strefa DMA: 24strony zastrzeżone
  • Pamięć: 7840568 K / 8283384 K. Dostępne
  • 442816K zastrzeżone

GRUB bagażnika z add_efi_memmap a pamięć EFI wielkość map wydaje się różnią:

  • 23 Linie BIOS-e820
  • 57 Linie pamięci EFI
  • Strefa DMA: 22strony zastrzeżone
  • Pamięć: 7885076K / 8283384K dostępna
  • 398308K zastrzeżone

Korek rozruchowy EFI bez add_efi_memmap :

  • 22 Linie BIOS-e820
  • 60 Linie pamięci EFI
  • Strefa DMA: 21strony zastrzeżone
  • Pamięć: 7885012K / 8283384K dostępna

Korek rozruchowy EFI z add_efi_memmap :

  • 22 Linie BIOS-e820
  • 66 Linie pamięci EFI
  • Strefa DMA: 21strony zastrzeżone
  • Pamięć: 7882124K / 8283384K dostępna

Po przeczytaniu dodatkowych informacji - jak podkreślono poniżej - nie mogę się zdecydować, czy dodać, add_efi_memmapczy nie. Robi coś ekstra, co nie wydaje się absolutnie konieczne do uruchomienia. Z drugiej strony może dać lepszy (pełniejszy) obraz użytecznej pamięci.

W jakich przypadkach należy użyć tego argumentu rozruchowego add_efi_memmap do uruchamiania kodu pośredniczącego EFI? Czy to zwiększy / zmniejszy szybkość rozruchu kodu EFI i zwiększy lub zmniejszy wolną pamięć dostępną dla aplikacji? Jak (lepiej) sprawdzić, czy moja mapa pamięci EFI zawiera więcej wpisów niż moja mapa E820?


Niektóre dokumenty add_efi_memmep, z którymi się już zapoznałem:

add_efi_memmap : dołącz mapę pamięci EFI dostępnej fizycznej pamięci RAM.
Jeśli mapa pamięci EFI zawiera dodatkowe wpisy, których nie ma w mapie E820, można je uwzględnić w mapie pamięci jądra dostępnej fizycznej pamięci RAM, używając następującego parametru wiersza polecenia jądra. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt


Zamiast zawsze dodawać wpisy mapy pamięci EFI (jeśli są obecne) do mapy pamięci po początkowym znalezieniu pozycji mapy pamięci BIOS systemu E820 i / lub pozycji mapowania wiersza poleceń jądra, zamiast tego należy dodawać takie dodatkowe wpisy mapy pamięci EFI, jeśli opcja rozruchu jądra : add_efi_memmapjest określony. - http://www.gossamer-threads.com/lists/linux/kernel/937817


Boot zawiesza się - jeśli bootowanie blokuje się bez żadnego komunikatu o błędzie po załadowaniu jądra i początkowego ramdysku przez GRUB, spróbuj usunąć parametr jądra add_efi_memmap. - https://wiki.archlinux.org/index.php/GRUB#Boot_freezes


Ta poprawka zmienia zachowanie modułu ładującego kexec, gdy w add_efi_memmapwierszu komend jądra jest dostępna opcja odczytywania mapy pamięci jądra /proc/iomemzamiast /sys/firmware/memmap.

W systemach EFI czasami brakuje tabeli e820 lub jest ona niekompletna. Systemy takie jak te wykorzystują add_efi_memmapopcję dodania pozycji tabeli pamięci EFI do tabeli pamięci jądra, aby zbudować pełny obraz pamięci systemu; jednak użycie tej opcji nie dodaje tych wpisów do tabeli używanej do zapełniania /sys/firmware/memmap, która ma być nieskazitelną oryginalną kopią.

Moduł ładujący kexec domyślnie używa nieskazitelnej mapy pamięci, co powoduje problemy, gdy moduł ładujący nie ma pełnego obrazu systemu i niepoprawnie ładuje jądro lub ramdysk w miejscach, które w rzeczywistości nie są użyteczne. Ta zmiana powoduje, że moduł ładujący kexec sprawdza wiersz poleceń uruchomionego jądra pod kątem add_efi_memmapopcji i jeśli go znajdzie, użyje zmodyfikowanej mapy zamiast oryginalnej mapy. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html


Rozwiązaniem (włamaniem), do którego doszli twórcy jądra systemu Linux w 2009 r. Po wielu fałszywych uruchomieniach, było dodanie opcji wiersza polecenia jądra, add_efi_memmap- poinformowanie jądra o spojrzeniu na mapę pamięci EFI i użycie jej do naprawy różnych wpisów w mapie pamięci E820. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html

Pro Backup
źródło

Odpowiedzi:

1

Programy ładujące lub Grub, w tym przypadku, odbudowują mapę pamięci, taką jak e820, myślę, że to jest powód, dla którego widzisz różne wartości między GRUB-em a skrótem EFI.

W kodzie źródłowym Linuksa znajduje się komentarz, który mówi, że EFI dopuszcza „więcej niż maks. 128 wpisów, które mogą zmieścić się w starszej (zerowej stronie) mapie pamięci e820”. Wydaje się, że nie jest tak w przypadku liczb, które opublikowałeś, dlatego wątpię, aby dodanie add_efi_memmap było pomocne ... Jednak z pewnością nie zaszkodzi też parsowanie tej tabeli ...

falstaff
źródło
1

Jeśli Twoja dystrybucja Linuksa pomyślnie uruchomi EFI STUB, nie musisz używać add_efi_memmap. Ta opcja wiersza polecenia jądra jest obecnie rzadko potrzebna - oprogramowanie wewnętrzne UEFI i obsługa jądra Linux uległy znacznej poprawie od ery 2009 roku.

fpmurphy
źródło