Date: Sun, 27 Jul 2008 20:26:46 +0200 From: Peter Schuller <peter.schuller@infidyne.com> To: Pawel Jakub Dawidek <pjd@freebsd.org> Cc: freebsd-fs@freebsd.org Subject: Re: Asynchronous writing to zvols (ZFS) Message-ID: <200807272026.54907.peter.schuller@infidyne.com> In-Reply-To: <20080726205118.GB1345@garage.freebsd.pl> References: <200807262005.54235.peter.schuller@infidyne.com> <20080726205118.GB1345@garage.freebsd.pl>
next in thread | previous in thread | raw e-mail | index | archive | help
--nextPart101433479.frefnM8Eff Content-Type: text/plain; charset="iso-8859-15" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hello, > The problem is that we don't between async and sync I/O request on GEOM > level, that's why I decided to commit a ZIL log after each write, which > wasn't very smart it seems. This is handled differently in version I've > in perforce. Could you try the below patch and see how it performs now? > > http://people.freebsd.org/~pjd/patches/zvol.c.patch The above (though the files has moved, for anyone else reading wanting to=20 apply) does eliminate the synchronicity problem. I am now seeing 5-15=20 MB/second write speeds to the zvol, with 100% constituent disk utilization. I am not sure why I don't see faster writes; I get more like 40-60 when=20 writing to a file in a ZFS file system on the same pool. But regardless, th= e=20 synchronisity issue is gone. Does your comment above regarding distinguishing bewteen sync and asynch ap= ply=20 to the section of code affected by the above patch, or did you mean there i= s=20 some other place above the zvol handling where there is lack of distinction? That is, is the end-effect of the above change that we *never* do synchrono= us=20 writes (because the fact that a write is supposed to be synchronous is=20 somehow lost before it reaches that point)? I understand a zil_commit is only required on BIO_FLUSH requests, which is= =20 what the patch fixes. But I get the impression from your phrasing above tha= t=20 the reason that a zil_commit was done on every I/O from the get go was in a= n=20 effort to honor actual synchronous writes by conservatively *always* doing= =20 synchronous writes, because the synchronicity of synchronous writes would n= ot=20 be propagated down to the zvol class. I wouldn't want to sacrifice=20 correctness just to get the speed ;) =2D-=20 / Peter Schuller PGP userID: 0xE9758B7D or 'Peter Schuller <peter.schuller@infidyne.com>' Key retrieval: Send an E-Mail to getpgpkey@scode.org E-Mail: peter.schuller@infidyne.com Web: http://www.scode.org --nextPart101433479.frefnM8Eff Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (FreeBSD) iEYEABECAAYFAkiMve4ACgkQDNor2+l1i323JQCeJGz+HHjH3+7otXK8uQTgiCHx N/MAn2pTreSDYOpn4KrzwXM2CJIe9OLr =PNCr -----END PGP SIGNATURE----- --nextPart101433479.frefnM8Eff--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807272026.54907.peter.schuller>