Peripheral devices such as disk drives used in processor-based systems may be slower than other circuitry in those systems. There have been many attempts to increase the performance of disk drives. However, because disk drives are electro-mechanical, there may be a finite limit beyond which performance cannot be increased. One way to reduce the information bottleneck at the peripheral device, such as a disk drive, is to use a cache. A cache is a memory device that logically resides between a device, such as a disk drive, and the remainder of the processor-based system. Frequently accessed data resides in the cache after an initial access. Subsequent accesses to the same data may be made to the cache instead of to the disk drive.
Disk requests made to a disk subsystem may be completed in an order different than they were requested. Disk subsystems may service disk requests in sequential order, but may also modify the order to increase performance. For example, an elevator algorithm which may minimize disk head movement and thus increase performance may be used.
In a system which includes a disk cache, the servicing order may be further changed since requests which may have required disk service may now be fully serviced by the disk cache. For disk requests that have no logical block addresses in common, there may be no reason that one request will affect another. However, when disk requests involve common logical block addresses, the order in which the disk requests are executed may be important. For example, if a first request causes disk data to be allocated dirty, which may involve a disk read into a cache line and then a cache write into the same cache line; and if a second disk request writes to the same disk logical block address, then the second request may write the data to the cache line after the first request gets read from the disk, but before the first request writes the data to the cache. Thus, the cache would have the wrong data.
Thus, a need exists for preserving the processing order of some disk requests in a system.
Referring to
Disk cache 160 may be made from a ferroelectric polymer memory. Data may be stored in layers within the memory. The higher the number of layers, the higher the capacity of the memory. Each of the polymer layers may include polymer chains with dipole moments. Data may be stored by changing the polarization of the polymer between metal lines.
Ferroelectric polymer memories are non-volatile memories with sufficiently fast read and write speeds. For example, microsecond initial reads may be possible with write speeds comparable to those with flash memories.
In another embodiment, disk cache 160 may include dynamic random access memory or flash memory. A battery may be included with the dynamic random access memory to provide non-volatile functionality.
In the typical operation of system 100, the processor 120 may access system memory 150 to retrieve and then execute a power on self-test (POST) program and/or a basic input output system (BIOS) program. The processor 120 may use the BIOS or POST software to initialize the system 100. The processor 120 may then access the disk drive 170 to retrieve and execute operating system software. The operating system software may include device drivers which may include, for example, a cache driver.
The system 100 may also receive input from the input device 130 where it may run an application program stored in system memory 150. The system 100 may also display the system 100 activity on the output device 140. The system memory 150 may be used to hold application programs or data that is used by the processor 120. The disk cache 160 may be used to cache data for the disk drive 170, although the scope of the present invention is not so limited.
The components in system 100 may generate disk requests which may be serviced by either the disk cache 160 or disk drive 170. These disk requests may be serviced in sequential order but may also be serviced out of order to improve performance. For disks requests having common logical block addresses, the sequence of execution may be significant.
Referring to
In blocking graph 400, disk request 440 may be the last request that may operate on a cache line (CL) 470 in cache 460 of
Referring to
A processor-based system 100 may execute code which may include a new disk request, as illustrated in block 210. The new disk request may reference a cache line, which may include a last request data field. The last request data field may identify the last outstanding request for the referenced cache line or may contain null data which may indicate that there are no outstanding disk requests for this cache line.
If the last request data field for the referenced cache line is equal to a null, then the new request is identified in the last request data field of the subject cache line, as indicated in diamond 220 and block 250. If the last request data field is not equal to a null, then the blocked disk requests are added to the new request's blocking list, as indicated in block 230. A request's blocking list identifies the disk requests that it is blocking.
Then the requests which are blocked by the new disk request may increment their respective blocked count, as indicated in block 240. Block 260 then indicates that the process may continue by either executing disk requests that have a blocked count data field equal to zero and are therefore not blocked, or receiving new disk requests.
Referring to
Referring to
If disk request 420 completes execution, then the relevant cache line's last request data may be compared to determine if it is equal to the completed disk request 420, as indicated in 320. Since disk request 420 is not the last request for either cache line (CL) 470 or 480 in this example, the blocked count for disk requests 430 may be decremented since it may be on the disk request 420's blocking list, as suggested in by diamond 320. Disk request 430 blocked count may be equal to 1, as suggested by block 340. Disk request 410 is still unblocked. When disk request 410 completes execution, disk requests 430 becomes unblocked since its block count goes to zero. Disk requests 440, 490 and 450 blocked count are still set to 1 each reflecting disk requests 430 blocking position.
Blocking graph 400 may be stored in system memory or in disk cache. In one embodiment, blocking graph 400 is stored in volatile memory such as a dynamic random access memory. In other embodiments, blocking graph 400 may be stored in a polymer which may include a ferromagnetic memory.
While the present invention has been described with respect to a limited number of embodiments, those skilled in the art will appreciate numerous modifications and variations they are from. It is intended that the appended claims cover all such modifications and variations as fall within the scope of the claims.