下川です。

安直には、 buffer を増やせば、 録画に関しては、 飛ぶことはほとんどなくなると
思います。

/usr/src/usr.sbin/fwcontrol/fwdv.c 中に

#define NCHUNK 8
#define NPACKET_R 256

という定義があると思いますが、 これらを増やせば overrun は防げます。
カーネル内に確保されるサイズはだいたい, 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 なので、 いくらでも大きくできるわけではないですが)
適当なパラメータが見つかりましたら、 是非教えてください。 デフォルトを変更します。

本質的な原因は、 以下の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化するのは面倒なので)


On 6/10/07, Kazumaro Aoki <[EMAIL PROTECTED]> wrote:
「fwcontrol -R hoge.dv」などとして、firewire経由でTV等の録画予約を行なっ
ています。
録画予約中、うっかりUSB storageをいじり回すとか、でかいファイルを消し
た時は仕方ないとして、そうでない時でも
  fwohci0: IR DMA overrun (0x40008011)
というメッセージが出て、数frame飛ぶことがあります。

挙動を見ていると大体他プロセスが何も動いていない状態で上記overrunは20
時間に一度くらいは起きているような感じです。逆にある程度の作業をしても
overrunが出ないこともよくあります。
ちょっとframeが飛ぶくらい「我慢しろ」といわれれば、まぁ許容できなくも
ないんですが、何か簡単な解決法でなんとかなるならしたいと思っています。

もちろん、何もしない時に上記overrunが出るのは防ぎたいのはもちろんです
が、うっかり、何か作業をしてしまった時にもoverrunが防げるならもちろん
それは嬉しく思います。

どうも、fwcontrol -Rで書き出すファイルがあるHDのファイルシステムの残り
容量が少なく(100GB以下?)なってくると、どうもoverrunが起こる確率が上がっ
ている感じがするんですが、感覚的なことなので、正確なところは分かりませ
ん。

なお、こちらの環境は次の通りです。
OS: FreeBSD6.2R/i386
I/F: 起動時のメッセージ
fwohci0: <VIA Fire II (VT6306)> port 0xbc00-0xbc7f mem 0xfeafe800-0xfeafefff 
irq 22 at device 1.0 on pci3
fwohci1: <VIA Fire II (VT6306)> port 0xb000-0xb07f mem 0xfeafe000-0xfeafe7ff 
irq 17 at device 2.0 on pci3
それぞれのfirewireのbusにはI/Fの他はGV-MVP/IDVしかつながっていません。

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




--
/\ Hidetoshi Shimokawa
\/  [EMAIL PROTECTED]

メールによる返信