zfs very poor performance compared to ufs due to lack of cache?

Gleb Kurtsou gleb.kurtsou at gmail.com
Wed Sep 8 08:52:42 UTC 2010


On (08/09/2010 10:19), Andriy Gapon wrote:
> on 07/09/2010 10:26 Andriy Gapon said the following:
> > Interesting.  I briefly looked at the code in mappedread(), zfs_vnops.c, and I
> > have a VM question.
> > Shouldn't we mark the corresponding page bits as valid after reading data into
> > the page?
> > I specifically speak of the block that starts with the following line:
> > } else if (m != NULL && uio->uio_segflg == UIO_NOCOPY) {
> > I am taking mdstart_swap as an example and it does m->valid = VM_PAGE_BITS_ALL.
> > 
> 
> I've chatted with and conclusion seems to be that vm_page_set_validclean() call
> should be added at the end of the block.
> 
> Perhaps, something like this:
> 
> --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
> +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
> @@ -500,6 +500,7 @@ again:
>  				sched_unpin();
>  			}
>  			VM_OBJECT_LOCK(obj);
> +			vm_page_set_validclean(m, off, bytes);
>  			vm_page_wakeup(m);
>  			if (error == 0)
>  				uio->uio_resid -= bytes;
> 
> 
> BTW, I think that 'off' variable can be made of 'int' type, as it is an offset
> within a page; no need for int64.
I had something similar to this patch but I've backed it out for unknown
reason, can't find any details. Did you try running fsx with it?

You might also be interested in recent patches to mapped read/write in
tmpfs by Alan Cox the code is very similar to ZFS.

Thanks,
Gleb.

> 
> -- 
> Andriy Gapon
> _______________________________________________
> freebsd-fs at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-fs
> To unsubscribe, send any mail to "freebsd-fs-unsubscribe at freebsd.org"


More information about the freebsd-fs mailing list