1. A host device comprising: a storage device interface through which the host device can communicate with a storage device; a memory; and a controller in communication with storage device interface and the memory, wherein the controller is configured to: receive commands from at least one application, wherein the commands include read commands and write commands; store the commands in the memory; select the read commands from the memory and pack them together but separately from the write commands; select the write commands from the memory and pack them together but separately from the read commands; and send the packed read commands and the packed write commands to the storage device.