未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

YLUG第42回カーネル読書会

今回もNTTデータ茅場町の会議室をお借りしての読書会。塚本さんのカーネルハックのお話。キャッシュがどーだこーだとかコピーがどうだこうだというわたしの好きな方面な話だったので非常に興味深かった。伝説のIntelのマニュアル(ぼろぼろになったやつ)を持っていってみんなに見せびらかしていたのであった。MOVNTQ命令はキャッシュを汚染しないという話がでてきたのでマニュアルを見ながら塚本さんにつっこんでいたのであった。*1

10.5.5 Cache Management Instructions

The non-temporal move instructions (MOVNTI, MOVNTQ, MOVNTDQ, MOVNTPS, and MOVNTPD) allow data to be moved from the processor’s registers directly into system memory without being also written into the L1, L2, and/or L3 caches. These instructions can be used to prevent cache pollution when operating on data that is going to be modified only once before being stored back into system memory. These instructions operate on data in the generalpurpose, MMX, and XMM registers.

最初の文のところにはちゃんとラインマーカーで印がついていたりした。すっかり忘れていたのだけれど当該個所を読んで理解したつもりになっていたのである。今回の発表で思い出した次第である。

YLUG (Yokohama Linux Users Group) http://ylug.jp/不定期にカーネル読書会をやっているので参加希望者はYLUGメーリングリストを購読してお知らせをウオッチしてほしい。

cache pollution というのはメモリからデータをアクセスするとき通常はメモリからレジスタにデータを移送するだけでなくキャッシュという高速のメモリにデータを置いておく。そうすると次回同じアドレスにアクセスしたとき高速にアクセスできるので実行性能が向上する。同じアドレスにアクセスする場合はいいのだが、ストリーミングデータのようにシーケンシャルにアクセスするだけで同じところには再びアクセスしない場合、無駄にキャッシュを使うので本来キャッシュ上に残しておきたいデータまで追い出されてしまう。これをcache pollutionという。上記のnon-temporal move 命令は一次キャッシュ、二次キャッシュ、三次キャッシュなどにデータを書き込むことなくメモリにダイレクトに書き込むのでcache pollutionを起こさない。

*1:The IA-32 Intel(R) Architecture Software Developer's Manual, Volume 3: System Programming Guide