Re: Random file I/O regressions in 2.6 [patch+results]

Andrew Morton
2004-05-20T22:20:46Z

Andrew Morton <akpm@osdl.org> wrote:
>
> There's still something wrong here. 2.6.6-bk+deadline is pretty equivalent
> to 2.4 from an IO scheduler point of view in this test. Yet it's a couple
> of percent slower.
>
> I don't know why you're still seeing significant discrepancies.
>
> What sort of disk+controller system are you using? If scsi, what is the
> tag queue depth set to? Is writeback caching enabled on the disk?

If the 2.4 and 2.6 disk accounting statitics are to be believed, they show
something interesting.

Workload is one run of

sysbench --num-threads=16 --test=fileio --file-total-size=2G --file-test-mode=rndrw run

on ext2.

2.4.27-pre2:

rio: 5549 (Read requests issued)
rblk: 259680 (Total sectors read)
wio: 42398 (Write requests issued)
wblk: 4368056 (Total sectors written)

2.6.6-bk, as:

reads: 5983
readsectors: 201192
writes: 22548
writesectors: 4343184

- Note that 2.6 read 20% less data from the disk. We observed this
before. It appears that 2.6 page replacements decisions are working
better for this workload.

- Despite that, 2.6 issued *more* read requests. So it is submitting
more, and smaller I/O's

- Both kernels wrote basically the same amount of data. 2.6 a little
less, perhaps because of fsync() optimisations.

- But 2.6 issued far fewer write requests. Half as many as 2.4 - a huge
difference. There are a number of reasons why this could happen but
frankly, I don't have a clue what's going on in there.

Given that 2.6 is issuing less IO requests it should be performing faster
than 2.4. The reason that the two kernels are achieving about the same
throughput despite this is that the disk is performing writeback caching
and is absorbing 2.4's smaller write requests.

I set the IDE disk to do writethrough (hdparm -W0):

2.6.6-bk, as:

Time spent for test: 89.9427s
0.04s user 5.24s system 1% cpu 4:51.62 total

2.4.27-pre2:

Time spent for test: 107.8293s
0.04s user 6.00s system 1% cpu 7:26.47 total

as expected.

Open questions are:

a) Why is 2.6 write coalescing so superior to 2.4?

b) Why is 2.6 issuing more read requests, for less data?

c) Why is Alexey seeing dissimilar results?