Hi, I've been using VLC for some time, but often have had difficulty playing HD 1080 streams over NFS to my Mac. Today, I did some investigations with DTrace on the Mac client and OpenSolaris server, and discovered that the Mac was sometimes pulling 20x the required amount of data. This is because the default NFSv3 read size for TCP is 32K, because the MacOS NFS client has no read cache, and because VLC was issuing 1786 byte reads. This means each 32K block is read about 20 times.
The stack trace for this I/O looks like this ...
libsystem_kernel.dylib`read+0xa
libvlccore.4.dylib`AReadStream+0x66
libvlccore.4.dylib`AStreamRefillStream+0xce
libvlccore.4.dylib`AStreamReadNoSeekStream+0x150
libstream_filter_record_plugin.dylib`Read+0x4b
libvlccore.4.dylib`stream_Block+0x2e
libts_plugin.dylib`Demux+0x70a
libvlccore.4.dylib`MainLoop+0x1d3
libvlccore.4.dylib`Run+0x31
libvlccore.4.dylib`thread_entry+0x3e
libsystem_c.dylib`_pthread_start+0x14f
libsystem_c.dylib`thread_start+0xd
I had a quick look at the code for AStreamRefillStream and noticed that i_read is variable. I just don't know the code well enough to know what is going on. Sometimes it is ok (i.e. I get large reads all the time). Other times, it starts off ok, and then jumps to smaller reads. But once it is using small reads, it doesn't seem to go back to large ones. The file I was reads was about 6GB in size. I'm just hoping this will ring a bell with someone who knows the code well.