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番目の記事へのコメント

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2010年12月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ