From: Miklos S. <mi...@sz...> - 2007-09-06 13:52:12
|
> is there any reasonable way to increase the read size in FUSE from the 128kB limit? > > Right now FUSE or the kernel split all >128kB user read()'s into several > <=128kB read calls, this severely reduces performance. There's a data > acquisition DAQ card I'm reading from. > > > With a simple non-FUSE test program that does >4 MB reads through the DAQ > cards own kernel module API, I get around 1500 Mbit/s throughput. > > But with the FUSEs chunked 128kB reads, performance is around 30 Mbit/s. > That's lousy. > > I then added some buffering/caching code to my FUSE read(). It does one > blocking DAQ card read of 16MB and then memcpy()s data out to the user on > each next read() call. Performance now is ~400 Mbit/s. But significant > time is lost in the memcpy() - which would be unnecessary if FUSE could > pass larger than 128kB data out to the user. Hmm, what is the performance if you just comment out the memcpy()? > So is there any way (no custom kernels thanks!) to get better performance > out of FUSE? Modify FUSE code? And increase the maximum read size from > measly 128kB to a few megabytes somehow? It should be possible if you increase FUSE_MAX_PAGES_PER_REQ from 32 to 1024 in fuse/fuse_i.h in the kernel tree, and give "-omax_read=4194304" mount option. I'm curious how much that helps. Miklos |