Hi All
I'm using arecord to record directly to a USB key:
arecord -f cd > /mnt/usb/myfile.wav
But I see buffer overruns at 30 second intervals, which correspond with short bursts of USB write activity.
I'm assuming this is related to:
/proc/sys/vm/dirty_expire_centiseconds
And the > is actually writing to the page cache until the above expires.
When I tune this down I get a buffer overrun at what ever the dirty_expire_centiseconds is set to, so I think the pdflush is locking the cache while it writes to USB.
So I started looking for a non blocking pipe buffer and found "bfr" which I've inserted in between the record and the output file.
arecord -f cd | bfr -b5m > /mnt/usb/myfile.wav
This should from what I understand provide a 5 meg non blocking pipe buffer to decouple the read and write.
I still get overruns !
After putting a load of trace in bfr.c and running in debug mode, I still see the write operation blocking, even though O_NONBLOCK is set. This stalls the read side of the pipe and arecord still overflows.
I've also tried running bfr forked, which should separate the read and write into 2 pids, and both processes appear to stall during the pdflush.
Can anyone tell me what pdflush blocks / locks out during a fs sync ?
Also if anyone can suggest a good way of buffering an arecord stream smoothly to USB key with pdflush firing I'd be much appreciative.
Tia.
Andy.