June 2007

先週実家で子供のころの知り合いが額から血をドクドク流しながら、首を絞められて死んでいるのが発見される。という事件があった。
家族会議で一躍話題に。
ここでCoolなオイラが

ああ、額と首ね。・・・・なら自殺かも知れんね :-)

といったら、家族全員からツッコミの嵐。

バーロww
君らはコナン君を100万回読み返して勉強しる!

ホテルで風呂に水をためている途中で、居眠りしてしまい。
部屋が沈没。とんでもない騒ぎに。

朝からたたき起こしてごめんよ。従業員のみなさん。
メイドのおばちゃんや、掃除のおじちゃんは口々にNo Problemと言ってくれたが、ああ請求が怖い。。

海外のホテルの風呂って、上のほうに排水口がないので、水を入れすぎた時に素直にあふれるのね。

カナダでは英語を喋れるフリをしましょう。という話。
アメリカとかだと、

Can you speak English?

と聞かれたときに、まごついていると、簡単な単語で親切に対応してもらえる事が多いが、カナダはフランス語で説明を始める。

バーローww

しばらく、特殊なスレッド並列プログラムで(のみ)、プログラムが途中で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()であるが、実はすでに設計思想が崩壊していて。。。
あー、まあこの話はいいや。

http://d.hatena.ne.jp/yaneurao/20070622#p1

ときどき、あなたをヘッドハンティングしたいと言う電話が会社に掛かってこないだろうか?



あの電話は一体、何なのだろうか?




以下、種明かし。




うーむ、今年になってから急にハンティング増えたな~
と思ったら、こういう理由が。

勉強になる(ネタ記事だけど)

最近街をあるいていると、「うどん」の文字が「おとん」に見えて困る。

おとん、おにぎり、てんぷら!

べつに専用の広大なスクラッチパッドメモリを積んでる訳でもなく、単にプリフェッチ命令があるだけなのか。
そんなの、いまどきのスカラCPUでは、どこでもやっている事でただのマーケッティング用語でしかない。

ごみだな。

↑このページのトップヘ