プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

スポンサーサイト このエントリーをはてなブックマークに追加

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)

IA64 Linux の i-cache 管理が間違っていた件について このエントリーをはてなブックマークに追加

しばらく、特殊なスレッド並列プログラムで(のみ)、プログラムが途中でSIGILLで死んでしまうという現象に悩まされていたのだが、

よくよく調べた結果、Linuxカーネルのキャッシュ管理がバグっているという結論に。
オレ様GJ!


と書くと分けわからんので、以下詳細。

まず、Linuxのキャッシュ管理においてIA64アーキは特別な扱いを受けている。

普通のCPU:
flush_icache_page(): i-cache をパージ
lazy_mmu_prot_update(): NOP

IA64:
flush_icache_page(): NOP
lazy_mmu_prot_update(): i-cache をパージ

となっているので、lazy_mmu_prot_update()の呼び方を間違えると見事IA64でしか再現しないバグの出来上がりである。

で、カーネルいじってる連中でも忘れがちであるが、IA64のようなキャッシュが物理メモリアドレスで管理されているCPUアーキはプロセスの消滅と同時にキャッシュがなくなったりはしないので(なくなるようにも出来るけどそれをする性能デメリットが大きすぎる)、ファイルをreadしているだけでもi-cacheパージを意識しなければいけない。

ファイルをreadしようが、writeしようがmemoryにとってはwriteであり、メモリを「前の状態」から書き換えるときはキャッシュコヒーレンシは常に維持しないといけないから。

逆に仮想アドレスによるキャッシュだとプロセス切り替わった時に、すでに前のプロセスのキャッシュはパージされているので、readしかしない(=1回しかmemory writeがない)状態だとキャッシュの事はあまり考えなくてもすんえ楽である。

で、ここまで書いたらお分かりな用にカーネルの do_no_page()のキャッシュパージ処理が間違っていたんだな。
南無。

以下のURLにも説明ある

http://www.gelato.unsw.edu.au/archives/linux-ia64/0704/20323.html

Linux IA64 MLに始めた話題があがったのが2007/04/04だから、Monteciteの発表以降半年以上誰も気づかなかった事になるな。

あ、Madison以前はL2がI-D 兼用cacheだからソフトが明示的にi-cacheパージしなくてもよいCPUだったってことね。

いじょ


PS
余談だけど、このlazy_mmu_prot_update()であるが、実はすでに設計思想が崩壊していて。。。
あー、まあこの話はいいや。

関連記事


linux | 【2007-06-23(Sat) 12:29:17】 | Trackback:(0) | Comments:(4)
コメント

Xen/IA64では、2007年2月に、こんなパッチがありました。
http://lists.xensource.com/archives/html/xen-ia64-devel/2007-02/msg00160.html
2007-06-23 土 08:34:21 | URL | sakaia #- [ 編集]

うむむ、なんで物理アドレス管理のIA64でcontext switch時にキャッシュパージが必要なのかイマイチ理解できないっす。
解析希望っす :-)
2007-06-25 月 01:27:46 | URL | kosaki #- [ 編集]

VMの場合、ゲストOSのvcpu(仮想CPU)が、物理CPUを引っ越す(migration)ときがあります。
しかし、VMは、引越しがしていないかのようにゲストOSに見せる必要があります。
そのため、前の物理CPUで同期を書けたら、次の物理CPUでも同期をVMがしておく必要があります。

そして、その引越しが起こるタイミングが、コンテキストスイッチが起きるときだからです。
2007-06-28 木 09:44:44 | URL | sakaia #- [ 編集]

それって、Guest OSのキャッシュ管理にバグがあるって前提ちゃうかー?
適切なタイミングで

fc.i
sync.i
srlz.i

してたら、全CPUで同期が取れるような・・
ヤバいタイミングとかあるって話かな?
もうちょっと、考えて見ます。

てゆーか、武部さんや徳永さんにメシいっしょするついでに聞けばいいのか(ポン!)
2007-06-28 木 17:19:55 | URL | kosaki #- [ 編集]
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。