[RFC][PATCH 0/3] Skip I/O merges when disabled

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Alan D. Brunelle
Date: Wednesday, April 23, 2008 - 12:08 pm

The block I/O + elevator + I/O scheduler code spends a lot of time
trying to merge I/Os -- rightfully so under "normal" circumstances.
However, if one were to know that the incoming I/O stream was /very/
random in nature, the cycles are wasted. (This can be the case, for
example, during OLTP-type runs.)

This patch stream adds a per-request_queue tunable that (when set)
disables merge attempts, thus freeing up a non-trivial amount of CPU cycles.

I'll be doing some more benchmarking, but this is a representative set
of data on a two-way Opteron box w/ 4 SATA drives. 'fio' was used to
generate random 4k asynchronous direct I/Os over the 128GiB of each SATA
drive.  Oprofile was used to collect the results, and we collected
CPU_CLK_UNHALTED (CPU) and DATA_CACHE_MISSES (DCM) events. The data
extracted below shows both the percentage for all samples (including
non-kernel) as well as just those from the block I/O layer + elevator +
deadline I/O scheduler + SATA modules.

v2.6.25 (not patched):  CPU: 5.8330% (total)  7.5644% (I/O code only)
v2.6.25 + nomerges = 0: CPU: 5.8008% (total)  7.5806% (I/O code only)
v2.6.25 + nomerges = 1: CPU: 4.5404% (total)  5.9416% (I/O code only)

v2.6.25 (not patched):  DCM: 8.1967% (total) 10.5188% (I/O code only)
v2.6.25 + nomerges = 0: DCM: 7.2291% (total)  9.4087% (I/O code only)
v2.6.25 + nomerges = 1: DCM: 6.1989% (total)  8.0155% (I/O code only)

I've typically been seeing a good 20-25% reduction in CPU samples, and
10-15% in DCM samples for the random load w/ nomerges set to 1 compared
to set to 0 (looking at just the block code).

[BTW: The I/O performance doesn't change much between the 3 sets of data
- the seek + I/O times themselves dominate things to such a large
extent.  There is a very small improvement seen w/ nomerges=1, but <<1%.]

It's not clear to me why 2.6.25 (not patched) requires /more/ cycles
than does the patched kernel w/ nomerges=0 -- it's been consistent in
the handful of runs I've done. I'm going to do a large set of runs for
each condition (not patched, nomerges=0 & nomerges=1) to verify that
this holds over multiple runs. I'm also going to check out sequential
loads to see what (if any) penalty the extra couple of checks incurs on
those (probably not noticeable).

The first patch in the series adds the tunable; The second adds in the
check to skip the merge code; and the third adds in the check to skip
adding requests to hash lists for merging.

Alan D. Brunelle
Hewlett-Packard
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC][PATCH 0/3] Skip I/O merges when disabled, Alan D. Brunelle, (Wed Apr 23, 12:08 pm)
Re: [RFC][PATCH 1/3] Add flag and sysfs interfaces, Alan D. Brunelle, (Wed Apr 23, 12:12 pm)
[RFC][PATCH 2/3] Have __make_request skip merges when disabled, Alan D. Brunelle, (Wed Apr 23, 12:14 pm)
[RFC][PATCH 3/3] Do not use rqhash when merges disabled, Alan D. Brunelle, (Wed Apr 23, 12:15 pm)
Re: [RFC][PATCH 3/3] Do not use rqhash when merges disabled, Alan D. Brunelle, (Wed Apr 23, 5:59 pm)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Jens Axboe, (Thu Apr 24, 12:09 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Alan D. Brunelle, (Thu Apr 24, 5:09 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Andi Kleen, (Thu Apr 24, 6:29 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Alan D. Brunelle, (Thu Apr 24, 6:31 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Alan D. Brunelle, (Thu Apr 24, 6:43 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Jens Axboe, (Thu Apr 24, 6:59 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Alan D. Brunelle, (Thu Apr 24, 7:13 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Andi Kleen, (Thu Apr 24, 7:15 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Jens Axboe, (Thu Apr 24, 8:04 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Jens Axboe, (Thu Apr 24, 8:05 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, David Collier-Brown, (Thu Apr 24, 8:53 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Alan D. Brunelle, (Thu Apr 24, 9:29 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Alan D. Brunelle, (Thu Apr 24, 1:38 pm)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Carl Henrik Lunde, (Thu Apr 24, 3:04 pm)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Andi Kleen, (Fri Apr 25, 12:13 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Jens Axboe, (Fri Apr 25, 1:38 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Alan D. Brunelle, (Fri Apr 25, 4:17 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Jens Axboe, (Fri Apr 25, 4:25 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Aaron Carroll, (Fri Apr 25, 5:06 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Jens Axboe, (Fri Apr 25, 5:14 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Alan D. Brunelle, (Fri Apr 25, 5:17 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Alan D. Brunelle, (Mon Apr 28, 9:36 am)
Re: [RFC][PATCH 0/3] Skip I/O merges when disabled, Jens Axboe, (Tue Apr 29, 12:37 am)