Not specifically addressing your question, but when you get to the point of wanting to start doing some experiments you may find that 'fio' [1] is very handy.
Not only that. FIO is one of the most plain and easy to understand C code-bases I've ever seen. Studying its source code will help a lot in understanding of many aspects of Linux I/O subsystem, it's many drivers, the trade-offs between different approaches as well as give a glimpse into a bizarre and completely illogical naming conventions and traditions that will often trip the uninitiated.
FIO is also really useful in that its dizzying array of options will often prompt questions you didn't even think to ask about what you're trying to measure. Every time I am trying to design a storage benchmark for a certain purpose or trying to replicate a particular workload, I read the FIO documentation cover to cover to make sure I'm not forgetting any crucial details.
(Of course, FIO's options aren't quite exhaustive, but I can only think of two of three things where I've had to wrap or extend FIO to achieve what I needed.)
[1] https://github.com/axboe/fio