QEMU 仮想マシンの実行にも使用する汎用マシンがあります。 VM はできるだけパフォーマンスが必要なので、hugepages (好ましくは 1GB hugepages) を使用して VM メモリをバックアップしたいと思います。マシンには32GBのRAMがあり、仮想マシンに16GBを提供したいと思います。問題は、コンピュータの通常の使用中に32 GBのすべてを使用する必要があるため、起動時に16G巨大ページを割り当てることはオプションではないことです。
この問題を解決するために、仮想マシンの起動時に16G大容量ページを割り当てるフックスクリプトがあります。予想どおり、1GB hugepagesはホストが一定時間使用された場合に失敗します(理想的ではありませんが、2M hugepagesを確実に処理するようです)。
私が理解していないのはなぜこれが起こるのかです。たとえば、一部の断片化テストを強制するために、複数のアプリケーション(ブラウザウィンドウ、コードエディタなど)を開いてから、デスクトップのみを開くように閉じることができます。この場合、私のメモリ使用量は約2.5G / 32Gです。
カーネルが残りの30G RAMで連続的にソートされたメモリの16ページの1Gページを見つける方法はありませんか?これは非常に高い断片化のようです。その上、私は走ることができる
$ sudo tee /proc/sys/vm/compact_memory <<<1
RAMをデフラグしようとしましたが、それでも16個の1G hugepagesをVMに割り当てることはできませんでした。 2.5G RAMデフラグを実行した後、残りの30Gがデフラグを実行した後まだ不連続または整列不良。
このプロセスについて私はどんな誤解を持っていますか?これが予想される動作のように見えますか?そして、compact_memory
実際に何が起こったのかを確認する方法はありますか?dmesg
コマンドを実行した後、出力や類似の内容は表示されません。
答え1
次の場所から大きなページを事前に割り当てることができます。所有者上記の問題により、オンライン割り当てによる開始時間が機能しない可能性があります。
次のように動作できますが、ホストを再起動する必要があります。
GRUB_CMDLINE_LINUX_DEFAULT="hugepagesz=1GB default_hugepagesz=1G hugepages=16"
FOSDEM 2019の20分ほどでFernando Laudaresの素晴らしい講演をチェックして、大容量ページを割り当てるオンラインとブート時間の方法を学びます。 https://www.youtube.com/watch?v=jTJ_X3fJ1Ik