« 選挙 | Main | プログラミング »

StorageFighter その後

G3カードとの相性が悪いと言うので外していたマザーボードキャッシュを戻す事で安定したかに見えたSTFだが、果たしてそれでよかったのか?というわけで、その後の話

上記の環境で、自作のPhotoshopプラグインがフリーズしやすい事に気づいた。当然普通ならバグだと思うのだが、徹底的に見直してもバグらしきものは発見できない。フリーズする条件は、MacOSの仮想記憶をONにした上で、馬鹿でかい画像データにフィルタをかける事。仮想記憶OFFだとフリーズしない。デバッガでヒープをチェックすると、ヒープが壊れているどころではなく、ヒープをチェックしようとしたデバッガが特定の変なアドレスにアクセスしようとしてエラーになっている事が多い。これが仮想記憶空間の最後のアドレスなのだ。こりゃページング処理が転けてるよなあ。ポインタに書き込むコード等で、NULLや-1にアクセスしている部分はないし。いろいろトラップかけてみたら、Photoshopのホストコールバックである、AdvanceState()関数の中で落ちている。この関数は、メモリが足りない場合、画像の一部をメモリに読み込み、今まで読み込んでいた部分をディスクにスワップする物なのだ。OSの仮想記憶がONになっていると、この時にまあ大概OSの方のスワッピングも起こってしまう。下手をすると、メモリ上にあるとPhotoshopが思っているデータが実際にはファイル上にあり、それをPhotoshopがディスクに書き出すためにわざわざディスクから読み込むなんてことが凄い勢いで起こる。というわけで、通常Photoshopを使う場合OSの仮想記憶は切るのが鉄則になっている。まあ、そこをあえてPhotoshopには酷な条件でやっているわけだが、本来こういう事をやっても、激烈に遅くなる事はあっても、クラッシュすることはないはずなのだ。
いろいろ調べてみると、仮想記憶を切る他に、起動後にマザーボードのキャッシュを無効にする事でもクラッシュをさける事ができるようだ。そもそも、CPUに1MBものバックサイドキャッシュがついているのだから、本来ボード上の256KBしかないキャッシュは足を引張るだけなのだ。もともとこいつはオリジナルのPowerPC 604/132と一緒に動作するように作られていて、スピードの速いアクセラレータの類いと同時使用すると不安定要因になると言われている。しかし、起動時にはこのキャッシュがONになっていないと、ほぼ確実に起動途中でクラッシュする。
PowerLogixが配布しているG3/G4 Cache Profilerを使用すると、起動した後でCPUのバックサイドキャッシュや、マザーボードキャッシュの設定を変えられる。しかもこいつはAppleScriptで制御可能なのだ(なんでこんなものがって感じではある)。そこで、Chache Profilerを起動して、マザーボードキャッシュを無効にし、終了するスクリプトを書いて、起動項目フォルダに放り込んでみた。これによって、起動時はキャッシュONで、起動した後で自動的にOFFになる。
どうやらなんとかなりそうかな。ちなみに、使用したスクリプトは以下の通り。


tell application "G3/G4 Cache Profiler 1.3"
set enabled of Motherboard Cache 1 to false
quit
end tell

|

« 選挙 | Main | プログラミング »

「パソコン・インターネット」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/10254/53270

Listed below are links to weblogs that reference StorageFighter その後:

« 選挙 | Main | プログラミング »