public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <jens.axboe@oracle.com>
To: Brent Baccala <cosine@freesoft.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: async I/O seems to be blocking on 2.6.15
Date: Fri, 3 Nov 2006 13:20:56 +0100	[thread overview]
Message-ID: <20061103122055.GE13555@kernel.dk> (raw)
In-Reply-To: <Pine.LNX.4.64.0611030311430.25096@debian.freesoft.org>

On Fri, Nov 03 2006, Brent Baccala wrote:
> Hello -
> 
> I'm running 2.6.15 (Debian) on a Pentium M laptop, PCI attached ext3
> filesystem.
> 
> I'm writing my first asynchronous I/O program, and for a while I
> thought I was really doing something wrong, but more and more I'm
> starting to conclude that the problem might be in the kernel.
> 
> Basically, I've narrowed things down to a test program which opens a
> large (700 MB) file in O_DIRECT mode and fires off 100 one MB async
> reads for the first 100 MB of data.  The enqueues take about 5 seconds
> to complete, which is also about the amount of time this disk needs to
> read 100 MB, so I suspect that it's blocking.
> 
> I've gotten the POSIX AIO interface at least tolerably running using
> the GLIBC thread-based implementation, but I really want the native
> interface working.
> 
> I whittled the test program down to use system calls instead of the
> POSIX AIO library, and I'm attaching a copy.  You put a big file at
> 'testfile' (it just reads it) and run the program:
> 
> 
> baccala@debian ~/src/endgame$ time ./testaio
> Enqueues starting
> Enqueues complete
> 
> real    0m5.327s
> user    0m0.004s
> sys     0m0.740s
> baccala@debian ~/src/endgame$
> 
> 
> Of that five seconds, it's almost all spent between the two "enqueues"
> messages.

You don't mention what hardware you are running this on (the disk sub
system). io_submit() will block, if you run out of block layer requests.
We have 128 of those by default, but if your io ends up getting chopped
into somewhat smaller bits than 1MiB each, then you end up having to
block on allocation of those. So lets say your /src is mounted on
/dev/sdaX, try:

# echo 512 > /sys/block/sda/queue/nr_requests

(substitute sda for whatever device your /src is on)

and re-test. The time between starting and complete should be a lot
smaller, now that you are not blocking on blkdev request allocation. You
may also want to look at the max_sectors_kb in the queue/ directory,
that'll tell you how large a single io will be at most once it reaches
the driver.

-- 
Jens Axboe


  reply	other threads:[~2006-11-03 12:19 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-11-03  8:23 async I/O seems to be blocking on 2.6.15 Brent Baccala
2006-11-03 12:20 ` Jens Axboe [this message]
2006-11-03 15:58   ` Brent Baccala
2006-11-03 16:02     ` Jens Axboe
2006-11-03 17:09       ` Brent Baccala
2006-11-03 17:30       ` Brent Baccala
2006-11-05 12:15         ` Jens Axboe
2006-11-06  6:42           ` Brent Baccala
2006-11-06 10:43             ` Jens Axboe
2006-11-06 15:52               ` Phillip Susi
2006-11-06 16:02                 ` Jens Axboe
2006-11-06 17:04                   ` Phillip Susi
2006-11-06 17:10                     ` Jens Axboe
2006-11-06 21:22           ` Chen, Kenneth W
2006-11-07  7:26             ` Jens Axboe
2006-11-07 21:02             ` Bill Davidsen
2006-11-10  9:24             ` Jens Axboe
  -- strict thread matches above, loose matches on Subject: below --
2006-11-07  0:03 Brent Baccala
2006-11-07  0:24 ` Chen, Kenneth W
2006-11-07  7:29 ` Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20061103122055.GE13555@kernel.dk \
    --to=jens.axboe@oracle.com \
    --cc=cosine@freesoft.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox