5

Windows API は、CreateFileMappingNuma 関数 ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa366539(v=vs.85).aspx ) を提供して、特定の NUMA に名前付き共有メモリ スペースを作成します。ノード。

これまでのところ、Linux 用の同等の機能は見つかりませんでした。

私の現在のアプローチは次のようになります。

  1. 名前付き共有メモリを割り当てます (shm_open(...) を使用)
  2. 現在の NUMA ノードを特定する (numa_move_pages(...) を使用)
  3. ページをターゲット ノードに移動します (numa_move_pages(...) を再度使用)

誰もがより良いアプローチを知っていますか?

編集:記録のために:私の提案した実装は期待どおりに動作します!

4

1 に答える 1

0

そうですよね。shm_open()/fruncate() を呼び出した時点ではページが割り当てられていないことに注意してください (サイズを設定するために ftruncate() を忘れないでください!)。カーネルは単純に vma を作成し、将来のコード アクセスがページを物理メモリにフォールトさせるのを待ちます。したがって、この状態で numa_move_pages() を呼び出すと、おそらく、関連する NUMA ノードに新しいページを作成して配置する効果があります。

于 2012-08-15T00:01:06.017 に答える