2010年12月1日の日記の3番目の記事へのコメント
■SpursEngineの秘孔?
ベンチマークを取ってるんですが,何かあっという間にファームウェアが応答しなくなったりしてヤバいです.死ぬときはこんな感じのメッセージがdmesgに出てきます.
spurs0:spurs_wdt_check_timer:WDT reset occured. spurs0:spurs_wdt_check_timer:init:0xfe000004, now:0x00000004 spurs0:spurs_stop_scp:SCP already stops. spurs0:spurs_exec_delete_session:Failed to delete session command. spurs0:spurs_isr_tasklet:Received mailbox0=0xffffffff, but FW state is not running. spurs0:spurs_isr_tasklet:Received mailbox1=0xffffffff, but FW state is not running. spurs0:spurs_receive_event:Firmware boot isn't completed, event is ignored spurs0:spurs_isr_tasklet:Received mailbox4=0xffffffff,but it is reserved for VIP. spurs0:spurs_isr_tasklet:Received mailbox5=0xffffffff, but FW state is not booting. spurs0:spurs_stop_scp:SCP already stops.
一度死ぬと,ドライバをロードし直してもSCPが反応してくれず,何してもこんなメッセージが出るばかり.デバイスドライバいじって無理矢理リセットかけるようにしても復活できません.
spurs0:spurs_start_scp:SCP reset register is invalid. spurs0:spurs_start_boot_firmware:Failed to reset SCP.
復活させるにはマシンごとリブートになります.が,端末を兼ねてるので,リブートはとても痛いです(笑).ダメ元でカードを挿すスロットを変えてみましたが,やっぱり何も変わりませんでした.うー,勘弁してくれ.
で,リブートを繰り返しているうちに,特定のプログラムを特定のパラメータで動かした場合に高確率でSCPが返ってこなくなることが次第に見えてきました.問題となっているのは以下の処理のようです.
dma_size = 128; for (i = 0; i < iter; i++) { spu_mfcdma64(buf, 0, shmem_ea, dma_size, 0, MFC_GET_CMD); spu_mfcdma64(buf, 0, shmem_ea, dma_size, 0, MFC_PUT_CMD); }
ローカルメモリ (XDR) のある領域から128Byte読み出すコマンドと,その領域に128Byte書き込むコマンドを,MFCのコマンドキューに常に充填し続ける処理.同じ場所をひたすら読み書きしているので,無駄な処理ということになりますが,まあ単なるベンチマークなんで.ここでは128Byteでやってますが,64Byteとか16Byteでも即死でした.
もしやと思い,以下のように読むところと書くところを128Byteずらすようにしてみたところ,死ななくなりました.
dma_size = 128; shmem_ea2 = shmem_ea + (dma_size > 128 ? dma_size : 128); for (i = 0; i < iter; i++) { spu_mfcdma64(buf, 0, shmem_ea, dma_size, 0, MFC_GET_CMD); spu_mfcdma64(buf, 0, shmem_ea2, dma_size, 0, MFC_PUT_CMD); }
が,以下のように16Byteずらすだけだとダメっぽいです.16Byte転送の場合,これでも即死です.
dma_size = 16; shmem_ea2 = shmem_ea + 16; for (i = 0; i < iter; i++) { spu_mfcdma64(buf, 0, shmem_ea, dma_size, 0, MFC_GET_CMD); spu_mfcdma64(buf, 0, shmem_ea2, dma_size, 0, MFC_PUT_CMD); }
うーん,変なアクセスしているせいで,XDRまでのどこかがハングしちゃったりするのかなぁ.で,XDRが読めなくなり,そのせいでSCPも動けなくなり・・・みたいな.というか,返ってこなくなるのはいいとして,PC落とさずに強制的にリセットかける方法はないんでしょうかね・・・(;´Д`)
2010年12月1日の日記の3番目の記事へのコメント
[コメントを書く]