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; wherein the packed read and write commands each comprise respective header and data sections, wherein a first part of header information of each command is stored in the header section of that command and a second part of the header information of each command is stored in the data section of that command, and wherein the first part of the header information of each command contains information identifying a location in the data section of that command that contains the second part of the header information.