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に移行できないのでしょうか。ここの問題は何ですか?