Kapan saya harus menentukan add_efi_memmap sebagai argumen kernel pada boot UEFI / EFI?

29

Saya membaca beberapa tutorial cara EFI stub (efistub) memuat kernel Linux. Instruksi ini sering menggunakan parameter boot kernel add_efi_memmap. Perangkat keras yang dimaksud adalah Intel x64 yang memiliki RAM 8GB. Setup saya saat ini adalah menjalankan grub-efibootloader dan kernel v3.13.

GRUB booting tanpa satu add_efi_memmapargumen boot:

  • 23Garis BIOS-e820 dihitung olehdmesg | grep BIOS-e820: | wc -l
  • 243Garis memori EFI dihitung olehdmesg | grep efi:\ mem | wc -l
  • Zona DMA: 24halaman disediakan
  • Memori: 7840568K / 8283384K tersedia
  • 442816K dilindungi undang-undang

Boot GRUB dengan add_efi_memmap dan ukuran peta memori EFI tampaknya berbeda:

  • 23 Garis BIOS-e820
  • 57 Garis memori EFI
  • Zona DMA: 22halaman disediakan
  • Memori: 7885076K / 8283384K tersedia
  • 398308K dilindungi undang-undang

Boot rintisan EFI tanpa add_efi_memmap :

  • 22 Garis BIOS-e820
  • 60 Garis memori EFI
  • Zona DMA: 21halaman disediakan
  • Memori: 7885012K / 8283384K tersedia

Boot rintisan EFI dengan add_efi_memmap :

  • 22 Garis BIOS-e820
  • 66 Garis memori EFI
  • Zona DMA: 21halaman disediakan
  • Memori: 7882124K / 8283384K tersedia

Setelah membaca informasi lebih lanjut - seperti yang diuraikan di bawah ini - saya tidak tahu apakah akan menambahkan add_efi_memmapatau tidak. Itu melakukan sesuatu yang ekstra yang tampaknya tidak mutlak diperlukan untuk boot. Di sisi lain, ia dapat memberikan tampilan memori yang dapat digunakan (lebih lengkap) yang lebih baik.

Dalam kasus apa argumen boot add_efi_memmap ini digunakan untuk booting EFI rintisan? Apakah itu menambah / mengurangi kecepatan boot EFI rintisan, dan menambah atau mengurangi memori bebas, tersedia untuk aplikasi? Bagaimana cara (lebih baik) memeriksa apakah peta memori EFI saya memasukkan lebih banyak entri daripada peta E820 saya?


Beberapa dokumentasi add_efi_memmep sudah dikonsultasikan:

add_efi_memmap : sertakan peta memori EFI dari RAM fisik yang tersedia.
Jika peta memori EFI memiliki entri tambahan yang tidak ada di peta E820, Anda dapat memasukkan entri tersebut dalam peta memori kernel dari RAM fisik yang tersedia dengan menggunakan parameter baris perintah kernel berikut. - https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt


Alih-alih selalu menambahkan entri peta memori EFI (jika ada) ke dalam peta memori setelah awalnya menemukan entri peta memori E820 BIOS dan / atau entri memmap baris perintah kernel, -hanya- hanya menambahkan entri peta memori EFI tambahan tersebut jika opsi boot kernel : add_efi_memmapditentukan. - http://www.gossamer-threads.com/lists/linux/kernel/937817


Beku boot - Jika boot macet tanpa ada pesan kesalahan setelah GRUB memuat kernel dan ramdisk awal, coba hapus parameter kernel add_efi_memmap. - https://wiki.archlinux.org/index.php/GRUB#Boot_freezes


Patch ini mengubah perilaku loader kexec ketika add_efi_memmapopsi ada pada baris perintah kernel yang sedang berjalan, untuk membaca peta memori kernel dari /proc/iomembukan /sys/firmware/memmap.

Pada sistem EFI, kadang-kadang tabel e820 hilang atau tidak lengkap. Sistem seperti ini menggunakan add_efi_memmapopsi untuk menambahkan entri tabel memori EFI ke tabel memori kernel untuk membangun gambaran lengkap memori sistem; Namun, menggunakan opsi tidak menambahkan entri ini ke tabel yang digunakan untuk mengisi /sys/firmware/memmap, yang dimaksudkan sebagai salinan asli yang asli.

Loader kexec menggunakan peta memori asli secara default, yang menyebabkan masalah ketika loader tidak memiliki gambaran lengkap dari sistem dan memuat kernel atau ramdisk yang salah di tempat-tempat yang sebenarnya tidak dapat digunakan. Perubahan ini membuat loader kexec memeriksa baris perintah kernel yang berjalan untuk add_efi_memmapopsi dan jika menemukannya, akan menggunakan peta yang dimodifikasi bukan peta asli. - http://lists.infradead.org/pipermail/kexec/2011-April/005014.html


Solusinya (retas), tiba di oleh pengembang kernel Linux pada tahun 2009 setelah sejumlah kesalahan mulai adalah menambahkan opsi baris perintah kernel, add_efi_memmap- untuk memberitahu kernel untuk melihat peta memori EFI dan menggunakannya untuk memperbaiki berbagai entri di peta memori E820. - http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html

Pro Backup
sumber

Jawaban:

1

Boot loader, atau Grub dalam hal ini, membangun kembali peta memori seperti e820, saya kira ini adalah alasan mengapa Anda melihat nilai yang berbeda antara GRUB dan EFI stub loader.

Ada komentar dalam kode sumber Linux yang mengatakan bahwa EFI memungkinkan "lebih dari 128 entri maksimum yang dapat masuk dalam peta memori legacy (zeropage) e820." Ini tampaknya tidak menjadi kasus sesuai dengan angka yang Anda posting, maka saya ragu bahwa menambahkan add_efi_memmap sangat membantu ... Namun, tentu saja tidak ada salahnya menguraikan tabel ini juga ...

Falstaff
sumber
1

Jika distribusi Linux Anda berhasil EFI STUB boot, tidak perlu menggunakan add_efi_memmap. Opsi baris perintah kernel ini jarang dibutuhkan saat ini - firmware UEFI dan dukungan kernel Linux untuk hal yang sama telah meningkat secara signifikan sejak era 2009.

fpmurphy
sumber