私がやりたいことは、tmpfs にファイルを置き、そのすべて (すべてのページ) が同じ NUMA ノードに配置されることを確認することです。最初は、これは簡単だと思いました。tmpfsmmap()
ファイルを作成しMAP_SHARED
、それを使用してmbind()
必要なノードに結び付け、コピーするだけです。ただし、mbind() のマニュアル ページでは、このアプローチは明示的に除外されています。
NUMA policy is not supported on a memory-mapped file range
that was mapped with the MAP_SHARED flag.
なんと!mbind()
マニュアルページには、共有マッピングについては、プロセスメモリポリシー( を使用)にのみ依存できると書かれていますset_mempolicy()
。しかし、これは理想からは程遠いものです。私は、マルチスレッドアプリケーションを大量に実行しており、どのスレッドがコピーを実行しているかは気にしたくありません。メモリポリシーが tmpfs に結びついている方がよいと思います。ファイルむしろ、私の生活が楽になりました。
この問題を解決する方法について何かアイデアをお持ちの方はいらっしゃいますか?