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

From: Ankit Jain
Date: Thu Jul 26 2012 - 15:52:29 EST


On 07/25/2012 04:20 AM, Christoph Hellwig wrote:
> On Wed, Jul 25, 2012 at 08:31:10AM +1000, Dave Chinner wrote:
>> FWIW, if you are going to change generic code, you need to present
>> results for other filesystems as well (xfs, btrfs are typical), as
>> they may not have the same problems as ext4 or react the same way to
>> your change. The result might simply be "it is 20% slower"....
>
> And most importantly block devices, as they are one of the biggest
> use cases of AIO. With an almost no-op get_blocks callback I can't
> see how this change would provide any gain there.

I tried running fio against a block device, disk partition and a
ramdisk. I ran this with a single job though. For disks, bandwidth
seems to stay nearly the same with submit latencies getting better.
And for ramdisk, bandwidth also sees improvement. I should probably
be doing better tests, any suggestions on what or how I can test?
For block devices, if the patch doesn't make it worse, at least, then
that should be good enough?

------ disk -------
submit latencies(usec)
B/w iops runtime min max avg std dev
Read :
Old: 417335 B/s 101 252668msec 4 231 40.03 21.66
New: 419099 B/s 102 251282msec 0 169 8.20 6.95

Write:
Old: 412667 B/s 100 252668msec 3 272 47.65 24.58
New: 415481 B/s 101 251282msec 0 134 7.95 7.11

------ ramdisk -------
submit latencies(usec)
B/w iops runtime min max avg std dev
Read:
Old: 708235KB/s 177058 1227msec 1 51 1.61 0.72
New: 822157KB/s 205539 1059msec 0 14 0.38 0.52

Write:
Old: 710510KB/s 177627 1227msec 2 46 2.33 0.81
New: 821658KB/s 205414 1059msec 0 24 0.40 0.53

Full fio results are attached, and I dropped cache before running
the tests.

--
Ankit Jain
SUSE Labs
random_rw: (g=0): rw=randrw, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=32
fio-2.0.8-9-gfb9f0
Starting 1 process

random_rw: (groupid=0, jobs=1): err= 0: pid=2109: Thu Jul 26 17:14:55 2012
read : io=102844KB, bw=419099 B/s, iops=102 , runt=251282msec
slat (usec): min=0 , max=169 , avg= 8.20, stdev= 6.95
clat (usec): min=335 , max=3356.7K, avg=255054.47, stdev=158234.29
lat (usec): min=342 , max=3356.7K, avg=255063.32, stdev=158234.33
clat percentiles (msec):
| 1.00th=[ 8], 5.00th=[ 50], 10.00th=[ 84], 20.00th=[ 130],
| 30.00th=[ 169], 40.00th=[ 204], 50.00th=[ 237], 60.00th=[ 269],
| 70.00th=[ 306], 80.00th=[ 351], 90.00th=[ 437], 95.00th=[ 529],
| 99.00th=[ 791], 99.50th=[ 914], 99.90th=[ 1237], 99.95th=[ 1483],
| 99.99th=[ 2073]
bw (KB/s) : min= 111, max= 646, per=100.00%, avg=410.90, stdev=84.69
write: io=101956KB, bw=415481 B/s, iops=101 , runt=251282msec
slat (usec): min=0 , max=134 , avg= 7.95, stdev= 7.11
clat (usec): min=189 , max=928209 , avg=58138.79, stdev=76776.72
lat (usec): min=194 , max=928221 , avg=58147.37, stdev=76776.86
clat percentiles (usec):
| 1.00th=[ 498], 5.00th=[ 828], 10.00th=[ 1624], 20.00th=[ 4960],
| 30.00th=[12352], 40.00th=[22144], 50.00th=[33536], 60.00th=[46848],
| 70.00th=[63232], 80.00th=[90624], 90.00th=[148480], 95.00th=[203776],
| 99.00th=[370688], 99.50th=[460800], 99.90th=[643072], 99.95th=[716800],
| 99.99th=[831488]
bw (KB/s) : min= 31, max= 864, per=100.00%, avg=408.11, stdev=111.34
lat (usec) : 250=0.02%, 500=0.54%, 750=1.27%, 1000=1.51%
lat (msec) : 2=2.39%, 4=3.60%, 10=4.63%, 20=5.96%, 50=13.51%
lat (msec) : 100=14.18%, 250=27.95%, 500=21.04%, 750=2.78%, 1000=0.46%
lat (msec) : 2000=0.15%, >=2000=0.01%
cpu : usr=0.51%, sys=1.52%, ctx=52135, majf=0, minf=23
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=99.9%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
issued : total=r=25711/w=25489/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
READ: io=102844KB, aggrb=409KB/s, minb=409KB/s, maxb=409KB/s, mint=251282msec, maxt=251282msec
WRITE: io=101956KB, aggrb=405KB/s, minb=405KB/s, maxb=405KB/s, mint=251282msec, maxt=251282msec
fio rand-rw-disk-2-raw.fio --output=/home/radical/src/play/ios-test/logs-with-drop-cache/ad6d29a/raw-disk-2-raw-ad6d29a.log --max-jobs=2 --latency-log --bandwidth-log
ad6d29a sent upstream
random_rw: (g=0): rw=randrw, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=32
fio-2.0.8-9-gfb9f0
Starting 1 process

random_rw: (groupid=0, jobs=1): err= 0: pid=2117: Thu Jul 26 17:53:41 2012
read : io=102976KB, bw=417335 B/s, iops=101 , runt=252668msec
slat (usec): min=4 , max=231 , avg=40.03, stdev=21.66
clat (usec): min=236 , max=4075.6K, avg=254175.39, stdev=158853.64
lat (usec): min=339 , max=4075.7K, avg=254216.22, stdev=158853.33
clat percentiles (msec):
| 1.00th=[ 7], 5.00th=[ 51], 10.00th=[ 85], 20.00th=[ 131],
| 30.00th=[ 169], 40.00th=[ 204], 50.00th=[ 237], 60.00th=[ 269],
| 70.00th=[ 306], 80.00th=[ 351], 90.00th=[ 433], 95.00th=[ 529],
| 99.00th=[ 766], 99.50th=[ 906], 99.90th=[ 1270], 99.95th=[ 1500],
| 99.99th=[ 3261]
bw (KB/s) : min= 83, max= 624, per=100.00%, avg=409.49, stdev=91.68
write: io=101824KB, bw=412667 B/s, iops=100 , runt=252668msec
slat (usec): min=3 , max=272 , avg=47.65, stdev=24.58
clat (usec): min=139 , max=1248.8K, avg=60442.70, stdev=82817.74
lat (usec): min=198 , max=1248.9K, avg=60491.15, stdev=82817.11
clat percentiles (usec):
| 1.00th=[ 438], 5.00th=[ 812], 10.00th=[ 1704], 20.00th=[ 5280],
| 30.00th=[13376], 40.00th=[23168], 50.00th=[34560], 60.00th=[47872],
| 70.00th=[66048], 80.00th=[91648], 90.00th=[150528], 95.00th=[209920],
| 99.00th=[403456], 99.50th=[505856], 99.90th=[798720], 99.95th=[897024],
| 99.99th=[1073152]
bw (KB/s) : min= 7, max= 808, per=100.00%, avg=405.72, stdev=121.51
lat (usec) : 250=0.03%, 500=0.79%, 750=1.35%, 1000=1.21%
lat (msec) : 2=2.29%, 4=3.59%, 10=4.36%, 20=5.90%, 50=13.45%
lat (msec) : 100=14.37%, 250=28.08%, 500=21.27%, 750=2.73%, 1000=0.42%
lat (msec) : 2000=0.17%, >=2000=0.01%
cpu : usr=0.54%, sys=1.44%, ctx=52211, majf=0, minf=23
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=99.9%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
issued : total=r=25744/w=25456/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
READ: io=102976KB, aggrb=407KB/s, minb=407KB/s, maxb=407KB/s, mint=252668msec, maxt=252668msec
WRITE: io=101824KB, aggrb=402KB/s, minb=402KB/s, maxb=402KB/s, mint=252668msec, maxt=252668msec
fio rand-rw-disk-2-raw.fio --output=/home/radical/src/play/ios-test/logs-with-drop-cache/918227b/raw-disk-2-raw-918227b.log --max-jobs=2 --latency-log --bandwidth-log
918227b Merge tag 'fbdev-fixes-for-3.5-2' of git://github.com/schandinat/linux-2.6
random_rw: (g=0): rw=randrw, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=32
fio-2.0.8-9-gfb9f0
Starting 1 process

random_rw: (groupid=0, jobs=1): err= 0: pid=2179: Thu Jul 26 17:14:57 2012
read : io=870664KB, bw=822157KB/s, iops=205539 , runt= 1059msec
slat (usec): min=0 , max=14 , avg= 0.38, stdev= 0.52
clat (usec): min=44 , max=294 , avg=76.67, stdev=12.77
lat (usec): min=45 , max=296 , avg=77.10, stdev=12.84
clat percentiles (usec):
| 1.00th=[ 70], 5.00th=[ 71], 10.00th=[ 72], 20.00th=[ 73],
| 30.00th=[ 74], 40.00th=[ 74], 50.00th=[ 75], 60.00th=[ 76],
| 70.00th=[ 76], 80.00th=[ 77], 90.00th=[ 79], 95.00th=[ 86],
| 99.00th=[ 97], 99.50th=[ 107], 99.90th=[ 255], 99.95th=[ 266],
| 99.99th=[ 286]
bw (KB/s) : min=819368, max=826656, per=100.00%, avg=823012.00, stdev=5153.39
write: io=870136KB, bw=821658KB/s, iops=205414 , runt= 1059msec
slat (usec): min=0 , max=24 , avg= 0.40, stdev= 0.53
clat (usec): min=42 , max=292 , avg=77.34, stdev=12.81
lat (usec): min=43 , max=293 , avg=77.79, stdev=12.89
clat percentiles (usec):
| 1.00th=[ 70], 5.00th=[ 72], 10.00th=[ 73], 20.00th=[ 74],
| 30.00th=[ 74], 40.00th=[ 75], 50.00th=[ 76], 60.00th=[ 76],
| 70.00th=[ 77], 80.00th=[ 78], 90.00th=[ 80], 95.00th=[ 87],
| 99.00th=[ 98], 99.50th=[ 107], 99.90th=[ 262], 99.95th=[ 270],
| 99.99th=[ 286]
bw (KB/s) : min=819368, max=825328, per=100.00%, avg=822348.00, stdev=4214.36
lat (usec) : 50=0.01%, 100=99.35%, 250=0.41%, 500=0.24%
cpu : usr=24.76%, sys=74.76%, ctx=114, majf=0, minf=24
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
issued : total=r=217666/w=217534/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
READ: io=870664KB, aggrb=822156KB/s, minb=822156KB/s, maxb=822156KB/s, mint=1059msec, maxt=1059msec
WRITE: io=870136KB, aggrb=821658KB/s, minb=821658KB/s, maxb=821658KB/s, mint=1059msec, maxt=1059msec

Disk stats (read/write):
ram0: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
fio rand-rw-rd-raw.fio --output=/home/radical/src/play/ios-test/logs-with-drop-cache/ad6d29a/raw-rd-raw-ad6d29a.log --max-jobs=2 --latency-log --bandwidth-log
ad6d29a sent upstream
random_rw: (g=0): rw=randrw, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=32
fio-2.0.8-9-gfb9f0
Starting 1 process

random_rw: (groupid=0, jobs=1): err= 0: pid=2192: Thu Jul 26 17:53:52 2012
read : io=869004KB, bw=708235KB/s, iops=177058 , runt= 1227msec
slat (usec): min=1 , max=51 , avg= 1.61, stdev= 0.72
clat (usec): min=17 , max=425 , avg=87.51, stdev=17.51
lat (usec): min=19 , max=432 , avg=89.20, stdev=17.83
clat percentiles (usec):
| 1.00th=[ 79], 5.00th=[ 81], 10.00th=[ 82], 20.00th=[ 83],
| 30.00th=[ 84], 40.00th=[ 85], 50.00th=[ 86], 60.00th=[ 86],
| 70.00th=[ 87], 80.00th=[ 89], 90.00th=[ 91], 95.00th=[ 98],
| 99.00th=[ 111], 99.50th=[ 118], 99.90th=[ 374], 99.95th=[ 390],
| 99.99th=[ 406]
bw (KB/s) : min=707912, max=711328, per=100.00%, avg=709620.00, stdev=2415.48
write: io=871796KB, bw=710510KB/s, iops=177627 , runt= 1227msec
slat (usec): min=2 , max=46 , avg= 2.33, stdev= 0.81
clat (usec): min=14 , max=425 , avg=87.62, stdev=17.61
lat (usec): min=16 , max=435 , avg=90.05, stdev=18.07
clat percentiles (usec):
| 1.00th=[ 79], 5.00th=[ 81], 10.00th=[ 82], 20.00th=[ 83],
| 30.00th=[ 84], 40.00th=[ 85], 50.00th=[ 86], 60.00th=[ 87],
| 70.00th=[ 87], 80.00th=[ 89], 90.00th=[ 91], 95.00th=[ 98],
| 99.00th=[ 111], 99.50th=[ 118], 99.90th=[ 378], 99.95th=[ 390],
| 99.99th=[ 406]
bw (KB/s) : min=709360, max=717872, per=100.00%, avg=713616.00, stdev=6018.89
lat (usec) : 20=0.01%, 50=0.01%, 100=95.59%, 250=4.04%, 500=0.36%
cpu : usr=31.57%, sys=67.94%, ctx=125, majf=0, minf=24
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
issued : total=r=217251/w=217949/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
READ: io=869004KB, aggrb=708234KB/s, minb=708234KB/s, maxb=708234KB/s, mint=1227msec, maxt=1227msec
WRITE: io=871796KB, aggrb=710510KB/s, minb=710510KB/s, maxb=710510KB/s, mint=1227msec, maxt=1227msec

Disk stats (read/write):
ram0: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
fio rand-rw-rd-raw.fio --output=/home/radical/src/play/ios-test/logs-with-drop-cache/918227b/raw-rd-raw-918227b.log --max-jobs=2 --latency-log --bandwidth-log
918227b Merge tag 'fbdev-fixes-for-3.5-2' of git://github.com/schandinat/linux-2.6