Wednesday, May 21, 2014

I/O schedulers and performance -3-

I/O schedulers and their impact on performance 


(part 3)
for setup refer to part 2

What is being tested ?
  • SQlite insert
  • SQlite update
  • SQlite delete

==> Using AndroBench v3.4 default settings
==> Each available scheduler is tested 3 times (same schedulers as previous post, i tried 10 times with fiops, but results are still inaccurate, so 3 times is enough not to waste time.)

Results : 
RAW data : the table displays mean result (out of 3) and related standard deviation to show how (in)consistent some results are.
in red : standard deviation that overrides the cut off (>2)
all results in TPS (Transaction per second)
IO scheduler SQlite insert SQlite update SQlite delete total
fiops 40,97 41,07 41,48 41,17
stdev 1,49 1,59 2,09 1,72
noop 42,21 40,13 42,08 41,47
stdev 0,91 2,60 1,76 1,76
bfq 41,35 35,26 36,94 37,85
stdev 1,70 2,32 1,98 2,00
cfq 40,82 40,70 40,87 40,79
stdev 2,96 1,54 1,03 1,84
deadline 40,84 38,75 41,86 40,48
stdev 2,62 0,86 3,60 2,36
zen 42,93 38,90 40,11 40,65
stdev 0,36 1,23 2,11 1,23
vr 41,79 38,67 41,00 40,49
stdev 0,67 1,74 1,07 1,16
row 39,09 41,32 40,75 40,39
stdev 5,07 2,65 3,18 3,63
sio 39,88 41,87 42,16 41,30
stdev 2,28 2,23 1,56 2,02

Following graphs display Sequential and Random Read/Write per Scheduler
As we can see, results are not much different from a scheduler to another
Though we can see that bfq is a bit behind

To better discriminate the good and the evil, i tried to take the median result as 100% (median is not modified by extreme values contrary to average/mean)
==> remember : this is a delta% against median (100%), that way a little difference looks big (mostly because of the chosen scale)
How to read the graph?
Same as previous post

What does that show?
  • A lot, and it is not easy to extract things from it : 
  • A scheduler that is good in SQlite insert is bat at update (and vice versa) : zen and sio mostly
  • fiops is balanced but not extraordinary performant

Let's see the global graph 
  • fiops seems to stay at the first place (mostly thanks to sequential read and write, it is not the best for SQlite)
  • noop is the more balance and can be a good alternative
  • bfq is clearly the worst here.
Since i'm not really sure how to conclude .... do it yourself ;)

==> These results are not god's speaking, and may be different with other tests/benchmarks AND devices.

What are the limits?
  • Lack of accuracy with only 3 test per scheduler (and high results dispersion)
  • These results are device dependent, kernel dependent, ROM dependent AND emmc type dependent (MotoG could be built with at least 4 different memory chips)
  • Delta% against median is not the best to compare but was the easiest here (i could not put TPS, IOPS and MB/s in the same chart because of scaling)