UEFI / EFIブートでカーネル引数としてadd_efi_memmapを指定する必要があるのはいつですか?


29

LinuxカーネルをEFIスタブ(efistub)でロードする方法のチュートリアルを読んでいます。これらの手順では、多くの場合、カーネルブートパラメーターを使用しますadd_efi_memmap。対象のハードウェアは、8GBのRAMを搭載したIntel x64です。現在のセットアップでは、grub-efiブートローダーとカーネルv3.13を実行しています。

ブート引数なしGRUBブートadd_efi_memmap

  • 23BIOS-E820のラインによってカウントdmesg | grep BIOS-e820: | wc -l
  • 243EFIメモリラインによってカウントdmesg | grep efi:\ mem | wc -l
  • DMAゾーン:24予約済みページ
  • メモリ:7840568K / 8283384Kが利用可能
  • 442816K予約済み

GRUBブート add_efi_memmap EFIメモリマップサイズは異なるようです:

  • 23 BIOS-e820ライン
  • 57 EFIメモリライン
  • DMAゾーン:22予約済みページ
  • メモリ:7885076K / 8283384Kが利用可能
  • 398308K予約済み

なしの EFIスタブブートadd_efi_memmap

  • 22 BIOS-e820ライン
  • 60 EFIメモリライン
  • DMAゾーン:21予約済みページ
  • メモリ:7885012K / 8283384Kが利用可能

EFIスタブブート add_efi_memmap

  • 22 BIOS-e820ライン
  • 66 EFIメモリライン
  • DMAゾーン:21予約済みページ
  • メモリ:7882124K / 8283384Kが利用可能

詳細を読んだ後-以下にインラインで-追加するかどうかを判断できませadd_efi_memmapん。起動するために絶対に必要ではないように見える特別なことを行います。一方、使用可能なメモリのより良い(より完全な)ビューを提供することができます。

どのadd_efi_memmapブート引数をEFIスタブブートに使用する必要がありますか?これにより、EFIスタブのブート速度が増加/減少し、アプリケーションで使用可能な空きメモリが増加または減少しますか?EFIメモリマップにE820マップよりも多くのエントリが含まれているかどうかを(より良い)確認する方法は?


いくつかのadd_efi_memmepのドキュメントは既に参照されています:

add_efi_memmap :使用可能な物理RAMのEFIメモリマップを含めます。
EFIメモリマップにE820マップにない追加のエントリがある場合、次のカーネルコマンドラインパラメーターを使用して、利用可能な物理RAMのカーネルメモリマップにそれらのエントリを含めることができます。- https://www.kernel.org/doc/Documentation/x86/x86_64/uefi.txt


E820 BIOSメモリマップエントリおよび/またはカーネルコマンドラインmemmapエントリを最初に見つけた後、常にEFIメモリマップエントリ(存在する場合)をメモリマップに追加する代わりに、代わりに、カーネルブートオプションの場合、そのような追加のEFIメモリマップエントリのみを追加します:add_efi_memmapが指定されています。- http://www.gossamer-threads.com/lists/linux/kernel/937817


起動がフリーズする-GRUBがカーネルと初期ramdiskをロードした後にエラーメッセージなしで起動が停止する場合は、add_efi_memmapカーネルパラメーターを削除してみてください。- https://wiki.archlinux.org/index.php/GRUB#Boot_freezes


このパッチadd_efi_memmapは、現在実行中のカーネルのコマンドラインにオプションが存在する場合にkexecローダーの動作を変更し、カーネルメモリマップをの/proc/iomem代わりに読み取ります/sys/firmware/memmap

EFIシステムでは、e820テーブルが欠落しているか不完全である場合があります。このようなシステムは、add_efi_memmapオプションを使用してEFIのメモリテーブルエントリをカーネルのメモリテーブルに追加し、システムのメモリの全体像を構築します。ただし、このオプションを使用しても、値を設定するために使用されるテーブルにこれらのエントリが追加されることはありません/sys/firmware/memmap

kexecローダーはデフォルトで初期メモリマップを使用します。これにより、ローダーがシステムの全体像を把握できず、実際に使用できない場所にカーネルまたはRAMディスクを誤ってロードする場合に問題が発生します。この変更により、kexecローダーは実行中のカーネルのコマンドラインでadd_efi_memmapオプションをチェックし、見つかった場合、元のマップではなく変更されたマップを使用します。- http://lists.infradead.org/pipermail/kexec/2011-April/005014.html


不正スタートの数の後、2009年にLinuxカーネルの開発者が到着した溶液(ハック)は、カーネルコマンドラインオプションを追加することでしたadd_efi_memmapEFIメモリ・マップを見て、カーネルに伝えるために、さまざまなエントリを修正するためにそれを使用します- E820メモリマップ内。- http://blog.fpmurphy.com/2012/08/uefi-memory-v-e820-memory.html

回答:


1

ブートローダー、つまりGrubは、e820のようなメモリマップを再構築します。これが、GRUBとEFIスタブローダーで異なる値が表示される理由だと思います。

Linuxソースコードには、EFIが「e820レガシー(ゼロページ)メモリマップに収まる最大128エントリ以上」を許可するというコメントがあります。投稿した数字によると、これはそうではないようです。したがって、add_efi_memmapを追加することが役立つとは思いません...しかし、このテーブルを解析することは確かに害はありません...


1

LinuxディストリビューションがEFI STUBを正常に起動する場合、add_efi_memmapを使用する必要はありません。このカーネルコマンドラインオプションは、最近ではほとんど必要ありません。UEFIファームウェアとLinuxカーネルのサポートは、2009年の時代から大幅に改善されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.