I intend to compare different three I/O schedulers: "noop", "cfq", and "deadline" and I plan to compare them for both random reads and writes. So far, the only meaningful cases that I have identified are the following,
- read: with caching and with syncing
- read: without caching and with syncing
- read: without caching and without syncing
- read: with caching and without syncing.
(all of the above both sequentially and non-sequentially)
- write: with caching
- write: without caching
(I suppose sequential and non-sequential are pertinent here as well)
I plan to conduct write-tests that are both single- and multi-threaded.
Are there any other meaningful cases to test that I have missed?
When writing, should I expect there to be any meaningful difference between writing random data or just some character repeatedly?
What are some interesting block sizes to study? How many number of blocks should I write/read? Would there be a point to vary the number of blocks read/written during the benchmarking or is it better to use a consistent size for each case. I.e. benchmarking using
- blocksize = 512
- blocksize = 1024 ...
or is it more interesting to see what happens when the first read is some number and the next read is some other number of blocks? Should I try block sizes that are not divisible by 2?
Of course, the answer to a lot of these questions except Q1 can be determined by simply running more tests. I am merely trying to avoid unnecessary benchmarks to be able to focus more qualitatively on data which is relevant. There are simply so many combinations of tests that can be run.