Date: Mon, 20 Sep 1999 15:24:37 +0930 From: Greg Lehey <grog@lemis.com> To: Matthew Dillon <dillon@apollo.backplane.com> Cc: Poul-Henning Kamp <phk@critter.freebsd.dk>, dg@root.com, cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG Subject: Re: User block device access (was: cvs commit: src/sys/miscfs/specfs spec_vnops.c src/sys/sys vnode.h src/sys/kern vfs_subr.c) Message-ID: <19990920152437.W55065@freebie.lemis.com> In-Reply-To: <199909200527.WAA77336@apollo.backplane.com>; from Matthew Dillon on Sun, Sep 19, 1999 at 10:27:04PM -0700 References: <16748.937762251@critter.freebsd.dk> <199909191806.LAA73255@apollo.backplane.com> <19990920115556.J55065@freebie.lemis.com> <199909200527.WAA77336@apollo.backplane.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday, 19 September 1999 at 22:27:04 -0700, Matthew Dillon wrote: >> >> Poul-Henning has already replied to this with some figures. I can >> confirm what he says; I've been looking a lot at this sort of thing >> with Vinum. That doesn't answer the question "why", however. I >> suspect that there's something funny in buffer management which is >> reducing performance below what it could be. Vinum has a tool which >> can be used to measure device queue length, and I've seen widely >> differing queue lengths when writing to Vinum block devices: they can >> fluctuate between 100 requests and almost none. I can't explain that >> by the way Vinum works; it will just malloc and issue requests. About >> the only place it could block is in malloc, but the actual memory >> usage fluctuates wildly. >> >> I suspect that this is a bug rather than a feature; the question is, >> is it worth following? > > It is, plain and simply, the fact that you are doing one copy (which > is in fact direct DMA) in the case of raw I/O and doing two copies > (one into the cache - direct DMA, and then a copy to the user buffer ) > in the case of buffered I/O. That has nothing to do with the effect I noted, which may be a red herring. I've just checked, one reason for the slower transfer is because the dd transfer from the raw device always reads 2 kB per transfer, no matter what you tell dd. Here's iostat output for the following commands: dd if=/dev/wd3c of=/dev/null bs=64b tty da0 da1 wd0 wd2 wd3 cpu tin tout KB/t tps MB/s KB/t tps MB/s KB/t tps MB/s KB/t tps MB/s KB/t tps MB/s us ni sy in id 8 109 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 2.05 1290 2.59 2 0 18 1 79 4 109 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 2.00 1588 3.10 2 0 20 4 74 16 110 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 2.00 1602 3.13 2 0 25 3 70 dd if=/dev/rwd3c of=/dev/null bs=64b 0 108 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 32.00 312 9.74 2 0 5 1 92 148 109 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 32.00 311 9.71 3 0 4 0 93 371 108 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 32.00 312 9.74 5 0 11 1 83 I'm not sure why this is, but I suppose I could go look some time. > If you apply the mmap() patches found on > http://www.backplane.com/FreeBSD4/ and do an mmap based test, you will > find that the overhead narrows considerably. Hmmm. I tried running with 2kB blocks, and the results weren't what I expected. I need to scratch my head some more. Here's what I got: dd if=/dev/rwd3c of=/dev/null bs=4b count=10000 1 109 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 2.00 3891 7.60 2 0 28 4 67 0 109 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 2.00 3889 7.60 4 0 24 7 66 dd if=/dev/wd3c of=/dev/null bs=4b count=10000 193 325 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 2.10 143 0.29 4 0 2 1 93 2113 342 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 0.00 0 0.00 2.76 162 0.44 5 0 4 1 90 > There is nothing sinister going on here, buffer copying eats cpu > plain and simple. The primary effect here isn't buffer copying. Greg -- See complete headers for address, home page and phone numbers finger grog@lemis.com for PGP public key To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19990920152437.W55065>