プロセスのすべてのメモリページを1つのNUMAノードから別のNUMAノードに移行する方法は?


10

Linuxでは、実行時にKVM仮想マシンのメモリページをあるNUMAノードから別のNUMAノードに移行したいと考えています。しかし、KVMハイパーバイザーやlibvirt APIを使用して、それを行うためのインターフェイスを見つけることができません。次に、でnuma_migrate_pages関数を使用して-lnuma、VMプロセスのメモリページを移行しようとしました。しかし、このnuma_migrate_pages関数は一部のページのみを移行でき、すべてのページは移行できないことがわかりました。たとえば、次のテキストは、このVMプロセスのメモリページの分布を示しています。

Node0:  0             pages
Node1:  1538          pages
Node2:  270641        pages
Node3:  552           pages

そして、Node2のすべてのページをNode0に移行したいと思います。ただし、numa_migrate_pages関数を使用した後、以下のテキストが示すように、一部のページのみが移行されます。

Node0:  7952          pages
Node1:  1538          pages
Node2:  262113        pages
Node3:  552           pages

次に、ファイルを開くと、Node2に残っているほとんどのページが匿名のダーティページであることがわかります。/proc/[pid of VM process]/numa_maps

7f572c000000 default anon=262143 dirty=262143 N2=262113 ...

それでは、なぜNode2のすべてのページをNode0に移行できないのでしょうか。ここの問題は何ですか?


3
テキストを貼り付けるときに画像を投稿しないでください。画像を検索したり、回答に貼り付けたりすることはできません。また、あなたのモニターとは大きく異なるモニター(たとえば、大きくて高解像度のモニターにある読めないほど小さなフォント)や、目の不自由なユーザーがスクリーンリーダーソフトウェアを使用して読み取ることもできません。あご。
cas

numa移行ページをrootとして実行していると思いますか?
Lmwangi

@Lmwangiはい、私はルートとして実行しています。
ジェンソン2016

トランザクションを完了するのに十分な空きページがNode0にありますか?
アーロンWalerstein

回答:


1

パッケージにmigratepagesバイナリが必要ですnumactl

使用法と例

sudo migratepages $VM_PID $SRC_NODE $DEST_NODE
sudo migratepages 12345 2 0

制限事項

VMハードウェア

ページはノードにロックされることがあります。ハードウェアパススルーに関連し、特定のノードにあるハードウェアを表す場合。

空きメモリとページサイズ

宛先ノードに十分な空きメモリが明らかに必要ですが、大きなページを移動するために断片化しすぎてはいけません。ページの1つが大きな順序の連続した割り当てであり、宛先ノードの空きメモリに十分な大きさの空き領域がない場合、大きなページの移動は失敗する可能性があります(圧縮がトリガーされ成功したかどうかによって)。

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