Re: [RFC][PATCH] Make io_submit non-blocking

From: Ankit Jain
Date: Wed Jul 25 2012 - 16:13:15 EST


On 07/25/2012 04:01 AM, Dave Chinner wrote:
> On Tue, Jul 24, 2012 at 05:11:05PM +0530, Ankit Jain wrote:
[snip]
>> **Unpatched**
>> read : io=102120KB, bw=618740 B/s, iops=151 , runt=169006msec
>> slat (usec): min=275 , max=87560 , avg=6571.88, stdev=2799.57
>
> Hmmm, I had to check the numbers twice - that's only 600KB/s.
>
> Perhaps you need to test on something more than a single piece of
> spinning rust. Optimising AIO for SSD rates (say 100k 4k write IOPS)
> is probably more relevant to the majority of AIO users....

I tested with a ramdisk to "simulate" a fast disk and had attached the
results. I'll try to get hold of a SSD and then test with that also.
Meanwhile, I ran the tests again, with ext3/ext4/xfs/btrfs and not sure
what I had screwed up when I did that previous test, but the numbers
look proper (as I was getting in my earlier testing) now:

For disk, I tested on a separate partition formatted with the fs, and
then run fio on it, with 1 job. Here "Old" is 3.5-rc7 (918227b).

------ disk -------
====== ext3 ======
submit latencies(usec)
B/w iops runtime min max avg std dev

ext3-read :
Old: 453352 B/s 110 231050msec 3 283048 170.28 5183.28
New: 451298 B/s 110 232555msec 0 444 8.18 7.95
ext3-write:
Old: 454309 B/s 110 231050msec 2 304614 232.72 6549.82
New: 450488 B/s 109 232555msec 0 233 7.94 7.23

====== ext4 ======
ext4-read :
Old: 459824 B/s 112 228635msec 2 260051 121.40 3569.78
New: 422700 B/s 103 247097msec 0 165 8.18 7.87
ext4-write:
Old: 457424 B/s 111 228635msec 3 312958 166.75 4616.58
New: 426015 B/s 104 247097msec 0 169 8.00 8.08

====== xfs ======
xfs-read :
Old: 467330 B/s 114 224516msec 3 272 46.45 25.35
New: 417049 B/s 101 252262msec 0 165 7.84 7.87
xfs-write:
Old: 466746 B/s 113 224516msec 3 265 52.52 28.13
New: 414289 B/s 101 252262msec 0 143 7.58 7.66

====== btrfs ======
btrfs-read :
Old: 1027.1KB/s 256 99918msec 5 84457 62.15 527.24
New: 1054.5KB/s 263 97542msec 0 121 9.72 7.05
btrfs-write:
Old: 1021.8KB/s 255 99918msec 10 139473 84.96 899.99
New: 1045.2KB/s 261 97542msec 0 248 9.55 7.02

These are the figures with a ramdisk:

------ ramdisk -------
====== ext3 ======
submit latencies (usec)
B/w iops runtime min max avg std dev

ext3-read :
Old: 430312KB/s 107577 2026msec 1 7072 3.85 15.17
New: 491251KB/s 122812 1772msec 0 22 0.39 0.52
ext3-write:
Old: 428918KB/s 107229 2026msec 2 61 3.46 0.85
New: 491142KB/s 122785 1772msec 0 62 0.43 0.55

====== ext4 ======
ext4-read :
Old: 466132KB/s 116532 1869msec 2 133 3.66 1.04
New: 542337KB/s 135584 1607msec 0 67 0.40 0.54
ext4-write:
Old: 465276KB/s 116318 1869msec 2 127 2.96 0.94
New: 540923KB/s 135230 1607msec 0 73 0.43 0.55

====== xfs ======
xfs-read :
Old: 485556KB/s 121389 1794msec 2 160 3.58 1.22
New: 581477KB/s 145369 1495msec 0 19 0.39 0.51
xfs-write:
Old: 484789KB/s 121197 1794msec 1 87 2.68 0.99
New: 582938KB/s 145734 1495msec 0 56 0.43 0.55

====== btrfs ======
I had trouble with btrfs on a ramdisk though, it complained about space
during preallocation. This was with a 4gig ramdisk and fio set to write
1700mb file, so these numbers are from that partial run. Btrfs ran fine
on a regular disk though.

btrfs-read :
Old: 107519KB/s 26882 2579msec 13 1492 17.03 9.23
New: 109878KB/s 27469 4665msec 0 29 0.45 0.55
btrfs-write:
Old: 108047KB/s 27020 2579msec 1 64963 17.21 823.88
New: 109413KB/s 27357 4665msec 0 32 0.48 0.56

Also, I dropped caches ("echo 3 > /proc/vm/sys/drop_cache") and sync'ed
before running each test. All the fio log files are attached.

Any suggestions on how I might test this better, other than the SSD
suggestion ofcourse.

[snip]
> Also, you added a memory allocation in the io submit code. Worse
> case latency will still be effectively undefined - what happens to
> latencies if you generate memory pressure while the test is running?

I'll try to fix this.

--
Ankit Jain
SUSE Labs

Attachment: fio-logs.tgz
Description: application/compressed-tar