Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 05 Jun 2008 22:09:25 -0500
From:      Kirk Strauser <kirk@strauser.com>
To:        Kris Kennaway <kris@FreeBSD.org>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: Poor read() performance, and I can't profile it
Message-ID:  <4848AA65.9060600@strauser.com>
In-Reply-To: <48489222.7020501@FreeBSD.org>
References:  <200806051508.29424.kirk@strauser.com>	<4848523E.2010604@FreeBSD.org> <200806051617.54400.kirk@strauser.com> <484867E3.3070705@FreeBSD.org> <4848757B.30408@strauser.com> <48489222.7020501@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Kris Kennaway wrote:

> I don't understand what you meant by "It's also doing a lot of lseek()s 
> to what is likely the current position anyway (example: seek to 0x00, 
> read 16 bytes, seek to 0x10, etc.)." then.

I just meant that 16 was a smaller number than 4096 to use in an 
example.  :-)

But anyway, it looks like I was wrong.  Each record in this test file is 
144 bytes long, but instead of reading 144 bytes, it's reading 4096 
bytes then seeking backward 3952 (4096-144) bytes to the start of the 
next record.  For instance:

  99823 dumprecspg CALL  lseek(0x3,0x1c8,SEEK_SET,0)
  99823 dumprecspg CALL  read(0x3,0x8106000,0x1000)
  99823 dumprecspg CALL  lseek(0x3,0x258,SEEK_SET,0)
  99823 dumprecspg CALL  read(0x3,0x8106000,0x1000)
  99823 dumprecspg CALL  lseek(0x3,0x2e8,SEEK_SET,0)
  99823 dumprecspg CALL  read(0x3,0x8106000,0x1000)
  99823 dumprecspg CALL  lseek(0x3,0x378,SEEK_SET,0)
  99823 dumprecspg CALL  read(0x3,0x8106000,0x1000)

Now, I know this is suboptimal.  My code is a patch on another, 
longer-established project that I wasn't a part of, and I probably can't 
do a lot about it without a pretty major rewrite.  Still, I can't 
believe the same code is *so* much faster on Linux.  I'd also swear that 
this is a regression and that it used to run much faster on the same 
FreeBSD machine back when it was running 6.x, but I never bothered to 
benchmark it then because it didn't seem to be an issue.
-- 
Kirk Strauser



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4848AA65.9060600>