tarosukeの日記: NUMAは泥沼
日記 by
tarosuke
# 沼だけに(ぉ
ページのコヒーレンシーを保つのが非常に面倒。
今ちょっと考えただけでも...
- 共有メモリをページインするときは、他の共有者の書き込みを検出するために全ての共有者のページを書き込み禁止にしてからページインする。
- 書き込みを検出したら他の共有者のページを無効にしてから書き込みを解禁する。
...てな感じになるんだけど、どう考えてもアクセスが競合するとページのピンポンが発生する。アクセスのほとんどが読み出しなら問題はないんだけどね。
NUMAシステムは各共有者が次にいつそれを必要として次にいつ書き込むのかまったく知らんので素直に実装するとそうなる。これはプロセッサのキャッシュ競合と同じ現象なんだけどNUMAだとLAN越しだったりするので時間スケールも大きくなるのが厄介だ(PCI-Exとかのバックプレーンで繋いでると少しはマシかもね。もちろんキャッシュ競合のほうがずっとマシだけど)。しかもページサイズがパケットサイズより大きかったりするから余計に。GbEのジャンボフレーム使えば入るけどさ。
あるいは個々のプロセスの性能は諦めて、ページインしたり他の共有者のページを無効化したり書き込み禁止したりしてる間に他のプロセスを回せば総合的には性能低下を隠蔽できるかも知れないけどね。
それと、wOSの共有メモリは画面とか画像とか扱うから仕方なく使ってるハックなのでNUMAする気は起きない。あるいは画像とかのデータを一つのプロセスに集めておけば共有メモリ自体使う必要はくなるんだろうけど、それだと負荷が偏るのでマルチコアのメリットが減るし。
NUMAは泥沼 More ログイン