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.
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)
Don't forget to read other I/O performances related posts :