Linux と NUMA その 0.2.1
前回実機まで確保して、このお題もようやく軌道に乗り始めたと思ったのも束の間、その後またもや時間が取れず、さらに昨夜、首を傷めたりなどしたもので(あんまり関係ないかも)、全くネタがありません。こんな時は諦めて、カーネルのソースツリーで grep 遊びなどをしてみましょうか。。。
お遊びとはいえ、一応 NUMA に関連が欲しいところ。安直に検索キーワードを NUMA (小文字も含む) としましょう。手もとの 2.6.19 カーネル (なぜか前回よりダウングレード...) のソースツリーで次のようなコマンドを実行してみました。
$ grep -cir numa . | grep -Ev ':0$' | \ sort -nrt : +1 | head -n 8
ソースファイル毎にヒット数を集計し、その上位8ファイルをランキングします。コマンドのオプションについては manpage を確認して下さい。
結果は以下の通りです。
./arch/powerpc/mm/numa.c:50
./arch/x86_64/mm/numa.c:48
./arch/x86_64/Kconfig:28
./mm/slab.c:27
./arch/i386/Kconfig:27
./fs/fuse/dir.c:23
./mm/mempolicy.c:22
./arch/x86_64/kernel/setup.c:20
首位は、僅差で powerpc のファイルが制しています。てっきり x86_64 だろうと予想してたのですが意外です。上位2つがどちらもメモリ管理のNUMA対応処理のアーキテクチャ固有部分と思われるところは納得です。Kconfig をスキップすると、第4位はメモリ管理の中でもスラブアロケータですね。第7位もやはりメモリ管理で、この mempolicy.c は CONFIG_NUMA が定義されている時のみビルドされますから NUMA のメモリ管理で重要なパーツの1つですね。
通りすぎてしまいましたが第6位はNUMAと全く関係無さそうなファイルです。中身を開いて確認してみると。。。なんと、numargs という変数名がヒットしていました。うーん、想定外です。
第8位の setup.c はブート時の x86_64 アーキテクチャ固有処理ですから、まぁまぁ想定内です。
以上、ざっと結果を眺めてみました。
これは、そもそも Linux カーネルの NUMA 対応について興味を始めて持った時にまず最初に実行してみるべき方法のひとつだったかもしれません。また、Documentation ディレクトリの中を grep するのも良い方法な気がします。はい、もーれつにそんな気がしてきました。
$ grep -ir numa Documentation/
結果は、皆さんで確認してみて下さい。




コメント