Getting all the pieces in the abstraction stack to work in the same direction with respect to I/O queuing is key, indeed. For example, does the NCQ work well with the USB mass storage device stack? I haven't looked into the moving parts in detail, but it's easy to see that the maximum speed is limited to the slowest and dumbest link in the chain.