Modern data processing systems utilize a combination of hardware, drivers, and operating systems that allow input/output (I/O) operations to a storage device that are requested by an application to be prioritized. These priorities can be used to determine the speed in which a process or thread of an application dispatches I/O commands. However, once an I/O operation has been dispatched, lower level components of the system are not aware of the priority of the operation, so the operations are queued and processed in a First in First out (FIFO) Method. In some circumstances, it is possible for a low priority operation that has been previously dispatched to delay the performance of a high priority operation behind it in the queue.
FIG. 1 is a flow diagram illustrating an example command flow and prioritization used by conventional operating systems on conventional data processing systems. The I/O infrastructure of a data processing system generally includes one or more user applications 102 executing on an operating system 106 are dispatched with various priority levels depending on operating system. Before an I/O request reaches the underlying hardware, the request is serviced by several system components, including at least a file system 110, and a block storage device manager 114. If semiconductor memory is used as a non-volatile storage device, a nonvolatile memory translation layer 118 can be used to translate I/O operations to a form that can be processed by a nonvolatile memory controller 122, which understands the underlying memory architecture of an attached nonvolatile memory device.
Generally, at least a high and low priority system is in place for application processes, and generally the I/O operations dispatched by the application processes share the priority of the dispatching process. Applications can dispatch prioritized storage I/O requests 104 to the operating system 106, and the operating system 106 will service those prioritized requests 106 according to some priority scheme. Once serviced, however, the commands relayed by the operating system 106 are non-prioritized 108. The file system 110 and block storage device 114 generally will not have a mechanism to prioritize commands in a manner consistent with the priority used by the operating system 106. In the event a file system 110 or block storage device 114 are able to create an internal priority system based on some internal concept of what data is or is not important, it is not certain the internal priority will be consistent with the best overall system performance. Accordingly, file system 110 and block device 114 operations may be performed without regard to a preferred prioritization scheme, and non-prioritized I/O requests 112, 116 may be made to the lower levels of the I/O infrastructure of the data processing system. As the I/O requests proceeds further away from the operating system, and further towards the hardware, the processing order of the I/O operations becomes increasingly nondeterministic. Once the nonvolatile memory translation layer 118 is reached, I/O operations that once were high priority may be trapped behind lower priority operations. Non-prioritized I/O operations 120 dispatched to the non-volatile memory controller 122 can cause excessive latency if an ostensibly “high” priority operation is queued after numerous low priority commands that do not require immediate service, or behind commands that are known to take a longer than average time to complete. Accordingly, the original prioritization scheme of the prioritized I/O 104 may have been lost by the time non-prioritized I/O 124 dispatched to the nonvolatile memory device 126 arrives.