on 29/10/2010 15:36 Andriy Gapon said the following:
> on 29/10/2010 12:04 Artemiev Igor said the following:
>> Yep, this problem exists. You may workaround it via bumping up
>> net.inet.tcp.sendspace up to 128k.  zfs sendfile is very ineffective. I have
>> made a small investigation via DTrace, it reads MAXBSIZE chunks, but map in 
>> vm
>> only one page (4K).  I.e. if you have a file with size 512K, sendfile make
>> calls freebsd_zfs_read 128 times.
> 
> What svn revision of FreeBSD source tree did you test?
> 

Ah, I think I see what's going on.
Either sendfile should (have an option to) use VOP_GETPAGES to request data or 
ZFS
mappedread should use vm_grab_page instead of vm_lookup_page for UIO_NOCOPY 
case.
Currently ZFS would read a whole FS block into ARC, but populate only one page
with data and for the rest it would just wastefully do uiomove(UIO_NOCOPY) from
ARC data.
So, e.g. zpool iostat would show that there are only few actual reads from a 
pool.
 The rest of the time must be spent churning over the data already in ARC and
doing page-per-VOP_READ copies from it.

-- 
Andriy Gapon
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[email protected]"

Reply via email to