UEFI / EFIブートでadd_efi_memmapをカーネルパラメータとしていつ指定する必要がありますか?

UEFI / EFIブートでadd_efi_memmapをカーネルパラメータとしていつ指定する必要がありますか?

EFIスタブを介してLinuxカーネルをロードする方法についていくつかのチュートリアルを読んでいます。これらのガイドラインでは、カーネルブートパラメータを使用することがよくありますadd_efi_memmap。予想されるハードウェアは、8GBのRAMを搭載したIntel x64です。現在の設定では、grub-efiブートローダとカーネルv3.13を実行しています。

幼虫始めるいいえ起動パラメータadd_efi_memmap

  • 23BIOS-e820行番号dmesg | grep BIOS-e820: | wc -l
  • 243EFI メモリdmesg | grep efi:\ mem | wc -l
  • DMAエリア:24予約ページ
  • メモリ: 7840568K/8283384K 利用可能
  • 442816K 予約済み

幼虫始めるそして add_efi_memmapそして、EFIメモリマップのサイズが異なるようです。

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

EFIスタブ始めるいいえ add_efi_memmap:

  • 22BIOS-e820ライン
  • 60EFIメモリケーブル
  • DMAエリア:21予約ページ
  • メモリ: 7885012K/8283384K 利用可能

EFIスタブ始めるそして add_efi_memmap:

  • 22BIOS-e820ライン
  • 66EFIメモリケーブル
  • DMAエリア:21予約ページ
  • メモリ: 7882124K/8283384K 利用可能

詳細情報を読んだ後(下のインライン)を追加する必要があるかもしれませんadd_efi_memmap。起動に絶対に必要ではないいくつかの追加作業を実行します。一方、使用可能なメモリのより良い(より完全な)ビューを提供できます。

どのような状況でこれを行う必要がありますか?add_efi_memmapEFIスタブの起動に起動パラメータを使用できますか?これにより、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メモリマップエントリおよび/またはカーネルコマンドラインメモリマップエントリを見つけたら、必ずEFIメモリマップエントリ(存在する場合)をメモリマップに追加せず、カーネル起動オプションがある場合にのみ追加してください。 EFIメモリマップ項目:add_efi_memmap指定されています。 -http://www.gossamer-threads.com/lists/linux/kernel/937817


開始停止- GRUBがカーネルと初期RAMディスクをロードした後にエラーメッセージなしで起動が中断された場合は、add_efi_memmapカーネルパラメータを削除してみてください。 -https://wiki.archlinux.org/index.php/GRUB#Boot_freezes


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

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

kexecローダはデフォルトでrawメモリマッピングを使用します。これは、ローダーに完全なシステムマップがなく、実際に使用できない場所にカーネルまたはRAMディスクを誤ってロードすると問題を引き起こす可能性があります。この変更により、kexecローダーは実行中のカーネルのコマンドラインでオプションを確認し、オプションが見つかった場合はadd_efi_memmap元のマッピングの代わりに変更されたマッピングを使用します。 -http://lists.infradead.org/pipermail/kexec/2011-April/005014.html


Linuxカーネル開発者は、多くの失敗の後、2009年にソリューション(ハッキング)を発見しました。これはadd_efi_memmap、カーネルにEFIメモリマップを表示し、それを使用して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を追加するのが役に立つかどうか疑問です...しかし、このテーブルを解析するのは間違いありません...

答え2

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

関連情報