早速の回答ありがとうございます

From: "Hidetoshi Shimokawa" <[EMAIL PROTECTED]>
Subject: [FreeBSD-users-jp 90750] Re: fwohci0: IR DMA overrun (0x40008011)
Date: Sun, 10 Jun 2007 20:38:48 +0900

> 安直には、 buffer を増やせば、 録画に関しては、 飛ぶことはほとんどなくなると
> 思います。
> 
> /usr/src/usr.sbin/fwcontrol/fwdv.c 中に
> #define NCHUNK 8
> #define NPACKET_R 256
> という定義があると思いますが、 これらを増やせば overrun は防げます。

fwcontrolをいじるのみでテスト出来るということで、上記ディレクトリと
/sys/dev/firewire/fwcrom.cを複写してきて、上記パラメータをいじってmake
してみました。

> カーネル内に確保されるサイズはだいたい, 512byte * NPACKET_R * NCHUNK
> となります。 なぜ, パラメータが2つあるかというと, packet 1 つごとに interrupt
> をかけると, 毎秒8千回ぐらいの interrupt がかかるので、 NPACKET_R毎に interrupt
> をかけるようにしています。 デフォルトだと, 1MBぐらいの buffer なので,
> 4MB/s の DV stream だと, 1/4秒処理が止まるとあふれます。
> 
> いまどきのハードウェアであれば、 数MBぐらい使用しても問題ないと思います。
> (一応 kernel 内の wired page なので、 いくらでも大きくできるわけではないですが)
> 適当なパラメータが見つかりましたら、 是非教えてください。 デフォルトを変更します。

数分間試した感じではこんな感じです。NCHUNKのみを大きくしてみました。

1. NCHUNKはいくら大きくしても、USB storage相手の読み書き(でかいファイ
   ルのcp)と並行してfwcontrol -Rしていると、overrunが起きるまでの時間
   が長くなるもののいずれ、連続して取りこぼすようになる。

2. fwcontrol -R中にdd if=/dev/zero of=hoge bs=32mを同じHDに対して実行。
   NCHUNK=32ぐらいだと、回数は減るがやっぱりoverrunが発生。NCHUNK=64に
   すると出なくなった。なお、実験に使ったHDは
ad0: 238475MB <HDS722525VLAT80 V36OA6MA> at ata0-master UDMA100

NCHUNK=64にしたもので、暫く(一週間ぐらい?)様子を見てみたいと思います。
一週間の間に30時間以上はfwcontrol -Rすると思います。

> 本質的な原因は、 以下の2つが考えられます。
> 
> 1.  interrupt のサービスが遅れる
> IRQ を share している 他の device driver が ithread を握りつづけている
> 可能性や、 USB と FireWire driver(6-stable) は共に Giant lock が
> 必要で同時に動作できないこと、 なとが考えられます。
> FreeBSD-current の FireWire driver は ithread を使用しないで,
> fast interrupt(interrupt filter) を使用し、 Giant free なので
> interrupt latency が小さいと思います。 もし機会があればお試しください。
> 
> 2. storage のスピードの問題.
> DV では定常的なスピードが要求されます。 sync のために 1秒とか disk i/o
> ブロックされると fwcontrol の packet の読み出しも止まってしまい、 buffer
> が溢れます。 この手の問題には, /usr/ports/misc/buffer のようなものを
> 使って出力を buffering するのも手かもしれません。
> (fwcontrol で aio(4) とか multi-thread化するのは面倒なので)

ithreadとかGiant lockとかは用語はどこかで見たことはありますが、知識が
無いので理解は出来ていませんが、FreeBSD-currentとか使う機会があったら
試したいと思います。また、ports/misc/bufferも今回初めて知りました。こ
れも、問題解決に使えそうな感じがするので、NCHUNKを増やしたfwcontrol -R
の調子が期待ほどにはならなかった場合は、試してみたいと思います。

青木和麻呂@神奈川県在住

メールによる返信