Optimizing the Block I/O Subsystem for Fast Storage Devices