久々にmicropacketエラー

9/8のFAIRYTALEで発生。dmesgによると、10:40、10:46、10:51に断末魔が。

kernel: ptx0: stream 2 micropacket error

録れたものを見てみると、録画を一時停止&再開したみたいに途中で話がぶっとんでた。A-Bパート間のCMもなかったし、全体で15分くらい。。。
ちょうどこの時、ZFSの空き容量が1%を切っていた(それでも20G以上あるけど)り、裏で古いファイルを消したりしていて、たぶんI/O負荷が高かったんだと思う。
というわけで、リングバッファのバッファオーバーフローでPT2から吸い上げられなくなった時の処理がダメなんだろうという気がしてきた。
可能性としては3つかなあ。

  • カーネル側でいっぱいいっぱいで、PT2->リングバッファに読み込むkthreadが間に合わなくなってる
  • カーネル側がいっぱいいっぱいで、リングバッファ->ユーザ空間に読み込むread syscallが間に合わなくなってる
  • ユーザ側がいっぱいいっぱいで、リングバッファ->ユーザ空間に読み込むreadが間に合わなくなってる

まあ、起きるときは全部起きそうなので、全部足して間に合ってないのかも。
現在、オーバフロー時は「それ以上読まない」なのだけど、「読んで捨てる」が正しいのかもしれない。ボード側に気付かれなければいいわけで。