PATENT DOCUMENT

Publication Number: US-7213103-B2
Application Number: US-83141704-A
Country: US
Kind Code: B2

Title: Accessing data storage systems without waiting for read errors

Abstract:
Improved techniques for accessing data storage systems are disclosed. These techniques detect, correct and prevent undesirable access delays experienced in storage systems. “Slow-access” refers to an access operation that does not successfully complete within a predetermined amount of time. When slow-access is detected, an attempt is made to provide data by other means rather than waiting for the access operation to eventually complete. By way of example, parity information is used to generate data rather than waiting beyond a predetermined amount of time for a “slow-read” operation to complete. In addition, preventative measures can be taken to avoid reoccurrence of a “slow-access” operating once it has been identified. These preventative measures, for example, include rewriting the same data to the same data section that caused the slow-access problem or remapping the section to another section in order to avoid the same section of data to cause another slow access problem.

Claims:
1. A method of accessing data from a plurality of storage devices, wherein said method comprises:
 receiving a request to access data, wherein at least a first portion of said data is stored in a first storage device, and at least a second portion of said data is stored in a second storage device; 
 initiating first and second data-access operations respectively on each of said first and second storage devices to respectively access said first and second data portions; 
 determining whether at least one of said first and second data-access operations has successfully completed within a predetermined time interval; 
 determining whether access to at least one of said first and second data portions can be provided without waiting for at least one of said first and second data-access operations to successfully complete when said determining determines that at least one of said first and second data-access operations has not successfully completed within said predetermined time interval; 
 marking at least one of said first and second data portions as a slow-access portion when said determining determines that at least one of said first and second data portions has not successfully completed within said predetermined time interval, 
 rewriting said slow-access portion after said marking; 
 determining whether said slow-access portion can be read within a second predetermined amount of time after said rewriting; and 
 remapping said slow-access portion when said determining determines that said slow-access portion cannot be read within said first or second predetermined amount of time. 
 
     
     
       2. A method as recited in  claim 1 , wherein said determining of whether access to at least one of said first and second data portions can be provided comprises:
 determining whether at least one of said first and second data portions can be obtained from backup data. 
 
     
     
       3. A method as recited in  claim 1 , wherein said determining of whether access to at least one of said first and second data portions can be provided comprises:
 determining whether at least one of said first and second data portions can be generated from parity data. 
 
     
     
       4. A method as recited in  claim 1 , wherein said method further comprises:
 generating at least one of said first and second data portions from parity when said determining determines that at least one of said first and second data portions can be generated from parity data; 
 providing access to at least one of said first and second data portions generated from parity data; and 
 aborting at least one of said first and second read operations. 
 
     
     
       5. A method as recited in  claim 1 , wherein said access operation is a read operation and said storage devices are arranged as a RAID. 
     
     
       6. A method as recited in  claim 1 , wherein the predetermined time interval is less than an access failure duration. 
     
     
       7. A RAID controller for a plurality of disk drives, wherein said RAID controller further operates to:
 receive a request to read data, wherein at least a first portion of said data is stored in a first section of a first disk drive and at least a second portion of said data is stored in a second section of a second disk device; 
 initiate a first and a second read operations on each of said first and second disk drives to respectively access said first and second data portions; 
 determine whether each of said read operations has successfully completed within a predetermined time interval; 
 obtain at least one of said first and second data portions without waiting for at least one of said first and second read operations to successfully complete when said determining determines that at least one of said first and second read operations has not successfully completed within said predetermined time interval; 
 determine whether at least one of said first and second data portions can be generated from parity data; 
 mark at least one of said first and second data portions as a slow-access portion when said determining determines that at least one of said first and second data portions has not successfully completed within said predetermined time interval, rewrite said slow-access portion after said marking; 
 determine whether said slow-access portion can be read within a second predetermined amount of time after said rewriting; and 
 remap said slow-access portion when said determining determines that said slow-access cannot be read within said first or second predetermined amount of time. 
 
     
     
       8. A computing system for accessing data from a plurality of storage devices, wherein said computing system is capable of:
 receiving a request to access data, wherein at least a first portion of said data is stored in a first storage device, and at least a second portion of said data is stored in a second storage device; 
 initiating first and second data-access operations respectively on each of said first and second storage devices to respectively access said first and second data portions; 
 determining whether at least one of said first and second data-access operations has successfully completed within a predetermined time interval; 
 determining whether access to at least one of said first and second data portions can be provided without waiting for at least one of said first and second data-access operations to successfully complete when said determining determines that at least one of said first and second data-access operations has not successfully completed within said predetermined time interval; 
 obtaining a predetermined time interval, and 
 wherein said method comprises:
 (a1) determining an average read time for at least one of the disk drives; 
 (a2) reading a first number of data blocks from the one of the disk drives; 
 (a3) determining a measured read time for the time it takes for said reading (a2) to read the first number of data blocks from the one of the disk drives; 
 (a4) determining whether the measured read time is substantially greater than the average read time; 
 (a5) increasing a performance error count when said determining (a4) determines that the measured read time is substantially greater than the average read time; and 
 (a6) repeating at least said read (a2) through said increasing (a5) for subsequent read of the first number of data blocks from the one of the disk drives, said repeating (a6) continuing until all the data blocks of the one of the disk drives has undergone read there from. 
 
 
     
     
       9. A computer readable medium including computer program code stored for accessing data from a plurality of storage devices, wherein said computer readable medium comprises:
 computer program code for receiving a request to access data, wherein at least a first portion of said data is stored in a first storage device, and at least a second portion of said data is stored in a second storage device; 
 computer program code for initiating first and second data-access operations respectively on each of said first and second storage devices to respectively access said first and second data portions; 
 computer program code for determining whether at least one of said first and second data-access operations has successfully completed within a predetermined time interval; 
 computer program code for determining whether access to at least one of said first and second data portions can be provided without waiting for at least one of said first and second data-access operations to successfully complete when said determining determines that at least one of said first and second data-access operations has not successfully completed within said predetermined time interval; 
 computer program code for obtaining a predetermined time interval, and 
 wherein said method comprises:
 (a1) determining an average read time for at least one of the disk drives; 
 (a2) reading a first number of data blocks from the one of the disk drives; 
 (a3) determining a measured read time for the time it takes for said reading (a2) to read the first number of data blocks from the one of the disk drives; 
 (a4) determining whether the measured read time is substantially greater than the average read time; 
 (a5) increasing a performance error count when said determining (a4) determines that the measured read time is substantially greater than the average read time; and 
 (a6) repeating at least said read (a2) through said increasing (a5) for subsequent read of the first number of data blocks from the one of the disk drives, said repeating (a6) continuing until all the data blocks of the one of the disk drives has undergone read there from. 
 
 
     
     
       10. A method of accessing data from a plurality of storage devices, wherein said method comprises:
 receiving a request to access data, wherein at least a first portion of said data is stored in a first storage device, and at least a second portion of said data is stored in a second storage device; 
 initiating first and second data-access operations respectively on each of said first and second storage devices to respectively access said first and second data portions; 
 determining whether at least one of said first and second data-access operations has successfully completed within a predetermined time interval; 
 determining whether access to at least one of said first and second data portions can be provided without waiting for at least one of said first and second data-access operations to successfully complete when said determining determines that at least one of said first and second data-access operations has not successfully completed within said predetermined time interval; 
 obtaining a predetermined time interval, and 
 wherein said method comprises:
 (a1) determining an average read time for at least one of the disk drives; 
 (a2) reading a first number of data blocks from the one of the disk drives; 
 (a3) determining a measured read time for the time it takes for said reading (a2) to read the first number of data blocks from the one of the disk drives; 
 (a4) determining whether the measured read time is substantially greater than the average read time; 
 (a5) increasing a performance error count when said determining (a4) determines that the measured read time is substantially greater than the average read time; and 
 (a6) repeating at least said read (a2) through said increasing (a5) for subsequent read of the first number of data blocks from the one of the disk drives, said repeating (a6) continuing until all the data blocks of the one of the disk drives has undergone read there from. 
 
 
     
     
       11. A method as recited in  claim 10 , wherein said determining of whether access to at least one of said first and second data portions can be provided comprises:
 determining whether at least one of said first and second data portions can be obtained from backup data. 
 
     
     
       12. A method as recited in  claim 10 , wherein said determining of whether access to at least one of said first and second data portions can be provided comprises:
 determining whether at least one of said first and second data portions can be generated from parity data. 
 
     
     
       13. A method as recited in  claim 10 , wherein said method further comprises:
 generating at least one of said first and second data portions from parity when said determining determines that at least one of said first and second data portions can be generated from parity data; 
 providing access to at least one of said first and second data portions generated from parity data; and 
 aborting at least one of said first and second read operations. 
 
     
     
       14. A method as recited in  claim 10 , wherein said access operation is a read operation and said storage devices are arranged as a RAID. 
     
     
       15. A computing system for accessing data from a plurality of storage devices, wherein said computing system is capable of:
 receiving a request to access data, wherein at least a first portion of said data is stored in a first storage device, and at least a second portion of said data is stored in a second storage device; 
 initiating first and second data-access operations respectively on each of said first and second storage devices to respectively access said first and second data portions; 
 determining whether at least one of said first and second data-access operations has successfully completed within a predetermined time interval; 
 determining whether access to at least one of said first and second data portions can be provided without waiting for at least one of said first and second data-access operations to successfully complete when said determining determines that at least one of said first and second data-access operations has not successfully completed within said predetermined time interval; 
 marking at least one of said first and second data portions as a slow-access portion when said determining determines that at least one of said first and second data portions has not successfully completed within said predetermined time interval; 
 rewriting said slow-access portion after said marking; 
 determining whether said slow-access portion can be read within a second predetermined amount of time after said rewriting; and 
 remapping said slow-access portion when said determining determines that said slow-access portion cannot be read within said first or second predetermined amount of time. 
 
     
     
       16. A computing system as recited in  claim 15 , wherein said determining of whether access to at least one of said first and second data portions can be provided comprises:
 determining whether at least one of said first and second data portions can be obtained from backup data. 
 
     
     
       17. A computing system as recited in  claim 15 , wherein said determining of whether access to at least one of said first and second data portions can be provided comprises:
 determining whether at least one of said first and second data portions can be generated from parity data. 
 
     
     
       18. A computing system as recited in  claim 15 , wherein said method further comprises:
 generating at least one of said first and second data portions from parity when said determining determines that at least one of said first and second data portions can be generated from parity data; 
 providing access to at least one of said first and second data portions generated from parity data; and 
 aborting at least one of said first and second read operations. 
 
     
     
       19. A computing system as recited in  claim 15 , wherein said access operation is a read operation and said storage devices are arranged as a RAID. 
     
     
       20. A computer readable medium including computer program code stored for accessing data from a plurality of storage devices, comprising:
 computer program code for receiving a request to access data, wherein at least a first portion of said data is stored in a first storage device, and at least a second portion of said data is stored in a second storage device; 
 computer program code for initiating first and second data-access operations respectively on each of said first and second storage devices to respectively access said first and second data portions; 
 computer program code for determining whether at least one of said first and second data-access operations has successfully completed within a predetermined time interval; 
 computer program code for determining whether access to at least one of said first and second data portions can be provided without waiting for at least one of said first and second data-access operations to successfully complete when said determining determines that at least one of said first and second data-access operations has not successfully completed within said predetermined time interval; 
 computer program code for marking at least one of said first and second data portions as a slow-access portion when said determining determines that at least one of said first and second data portions has not successfully completed within said predetermined time interval, 
 computer program code for rewriting said slow-access portion after said marking; 
 computer program code for determining whether said slow-access portion can be read within a second predetermined amount of time after said rewriting; and 
 computer program code for remapping said slow-access portion when said determining determines that said slow-access portion cannot be read within said first or second predetermined amount of time. 
 
     
     
       21. A computer readable medium as recited in  claim 20 , wherein said determining of whether access to at least one of said first and second data portions can be provided comprises:
 computer program code for determining whether at least one of said first and second data portions can be obtained from backup data. 
 
     
     
       22. A computer readable medium as recited in  claim 20 , wherein said determining of whether access to at least one of said first and second data portions can be provided comprises:
 computer program code for determining whether at least one of said first and second data portions can be generated from parity data. 
 
     
     
       23. A computer readable medium as recited in  claim 20 , wherein said computer readable medium further comprises:
 computer program code for generating at least one of said first and second data portions from parity when said determining determines that at least one of said first and second data portions can be generated from parity data; 
 computer program code for providing access to at least one of said first and second data portions generated from parity data; and 
 computer program code for aborting at least one of said first and second read operations. 
 
     
     
       24. A computer readable medium as recited in  claim 20 , wherein said access operation is a read operation and said storage devices are arranged as a RAID.

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application is related to U.S. patent application Ser. No. 10/831,382, entitled “METHOD AND APPARATUS FOR EVALUATING AND IMPROVING DISK ACCESS TIME IN A RAID SYSTEM”, filed on Apr. 22, 2004, now pending, and hereby incorporated herein by reference for all purposes. This application is also related to U.S. patent application No. 10/303,121, entitled “METHOD AND APPARATUS FOR DYNAMIC PERFORMANCE EVALUATION OF DATA STORAGE SYSTEM”, filed on Nov. 22, 2002, now U.S. Pat. No. 7,134,053, which is also hereby incorporated herein by reference for all purposes. 
     BACKGROUND OF THE INVENTION 
     The present invention relates generally to data storage systems for use with computing systems and, more particularly, to techniques for accessing data from the data storage systems. 
     Most computing systems use a storage device to store data. A disk drive is an example of a storage device that is commonly used with computers, including desktop computers, notebook computers and servers. Disk drives are used for many purposes. Over the years storage devices (e.g., disk drives) have become more advanced so as to offer greater performance and storage capacity. Manufacturers of disk drives provide data sheets or specifications that detail performance and capacity of their disk drives. This is partially attributed to higher performance and storage capacity requirements for some applications. 
     Data throughput rate for disk drives is essential for certain applications. For example, in the case of streaming data (e.g., audio or video data), time performance is of particular concern because if a data stream is temporarily delayed, the recipient of the data stream receives no data during the delay. The delay can cause slow spots, jitter or other undesired artifacts to occur in the presentation of the data. By way of example, a real time video playback stream typically requires a relatively high constant data rate. For a 10-bit High Definition (HD) video that outputs about 30 frames per second, this constant data rate amounts to about 165 MB of data per second. Data rates such as this, however, cannot always be maintained using conventional techniques. As a result, significant delays in data access are experienced and often manifest in undesirable effects (e.g., dropping one or more frames of a real time video play back). 
     Accordingly, improved techniques for accessing data storage systems are needed. 
     SUMMARY OF THE INVENTION 
     Broadly speaking, the invention pertains to improved techniques for accessing data storage systems. These techniques can be used to detect, correct and prevent undesirable access delays experienced in storage systems. 
     In accordance with one aspect of the invention, a “slow-access” criteria is defined for an operation that accesses a storage device. The “slow-access” criteria defines an acceptable access time for the access operation to successfully complete. In one embodiment, “slow-access” is defined as an access operation that does not successfully complete within a predetermined amount of time (e.g., a slow-access time or threshold). The slow-access time can, for example, be defined based on the needs of a specific application or other system requirements. As such, a “slow access” indicates a potential performance problem that can manifest in undesirable effects. Hence, when a slow-access problem is detected, an attempt is made to correct the slow-access problem rather than waiting for the access operation to eventually complete. As will be appreciated, an attempt can be made to provide the data by other means when “slow-access” is detected. By way of example, parity information can be used in accordance with one embodiment of the invention in an attempt to generate data rather than waiting beyond a predetermined amount of time for a “slow-read” operation to complete. 
     In accordance with another aspect of the invention, preventative measures can be taken to avoid reoccurrence of a “slow-access” once it has been identified. This prevents the reoccurrence of, for example, the same “slow-read” problem time after time. These preventative measures, for example, include rewriting the same data to the same data section that caused the slow-access problem or remapping the section to another section in order to avoid the same section of data causing another slow access problem. 
     The invention can be implemented in numerous ways, including as a method, system, device, apparatus, or computer readable medium. Other aspects and advantages of the invention will become apparent from the following detailed description, taken in conjunction with the accompanying drawings, illustrating by way of example the principles of the invention. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The invention is illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings and in which like reference numerals refer to similar elements and in which: 
         FIGS. 1A and 1B  depict a computing system in accordance with one embodiment of the invention. 
         FIG. 2  is a flow diagram of a slow-access adjusting process according to one embodiment of the invention. 
         FIG. 3  is a block diagram of a computing system according to another embodiment of the invention. 
         FIG. 4  is a flow diagram for a slow-read adjusting process depicted according to another embodiment of the invention. 
         FIG. 5  depicts a slow-read aversion process in accordance with one embodiment of the invention. 
     
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     As noted above, conventional data accessing techniques in some cases fail to access data storage systems (e.g., hard drives, disks) at an acceptable rate. One such example is real time video playback where relatively high data rates are required (e.g., 165 MB per second) to display about 30 frames per second. This high data rate cannot be maintained using conventional techniques. As a result, one or more frames can be dropped. Consequently, the real time video is not displayed appropriately. 
     One reason for this failure is that sometimes it takes significantly longer than expected to access a data storage device (e.g., hard drive, disk). As a result, data cannot be provided in a timely manner. As will be known to those skilled in the art, this delay can be attributed to many factors including, for example, a defective media, vibrations, head defects, or poor storage of write data. One example of a “slow-access” operation is a “slow-read” operation that takes longer than expected or required to read data from a hard drive or disk. It should be noted that unlike an access failure (e.g., a read failure on a bad block), a “slow-access” does not typically generate an error. This means that unlike a read failure, a “slow read” operation will eventually complete and return the desired data. However, experimental data has confirmed that the delay caused by “slow access” (e.g., “slow read”) is unacceptable for some applications. Thus, improved techniques for accessing data storage systems are needed. 
     Accordingly, the invention pertains to improved techniques for accessing data storage systems. These techniques can be used to detect, correct and prevent undesirable access delays experienced in storage systems. In accordance with one aspect of the invention, a “slow-access” criteria is defined for an operation that accesses a storage device. The “slow-access” criteria defines an acceptable access time for the access operation to successfully complete. In one embodiment, “slow-access” is defined as an access operation that does not successfully complete within a predetermined amount of time (e.g., a slow-access time or threshold). As will be appreciated, the slow-access time can, for example, be defined based on the needs of a specific application or other system requirements. As such, a “slow access” indicates a potential performance problem that can manifest in undesirable effects. Hence, when a slow-access problem is detected, an attempt is made to correct the slow-access problem rather than waiting for the access operation to eventually complete. As will be appreciated, an attempt can be made to provide the data by other means when slow-“access” is detected. By way of example, parity information is used in accordance with one embodiment of the invention in an attempt to generate data rather than waiting beyond a predetermined amount of time for a “slow-read” operation to complete. 
     In accordance with another aspect of the invention, preventative measures are taken to avoid reoccurrence of a “slow-access” once it has been identified. This prevents the reoccurrence of, for example, the same “slow-read” problem time after time. These preventative measures, for example, include rewriting the same data to the same data section that caused the slow-access problem or remapping the section to another section in order to avoid the same section of data to cause another slow access problem. 
     Embodiments of the invention are discussed below with reference to  FIGS. 1A–5 . However, those skilled in the art will readily appreciate that the detailed description given herein with respect to these figures is for explanatory purposes as the invention extends beyond these limited embodiments. 
       FIG. 1A  is a block diagram of a computing system  100  according to one embodiment of the invention. As shown in  FIG. 1A , a computer  102  is connected to a data storage system  106  via a storage device controller  107 . The computer  102  uses the storage device controller  107  to access data stored in the data storage system  106 . In general, the computer  102  can be any computing device that includes at least one Central Processing Unit (CPU)  103  and memory  104 . As such, the computer  102  can, for example, be a multi-purpose desktop computer, a server, or a multi-processing server. In any case, the computer  102  uses the data storage system  106  for data storage (e.g., main storage, secondary memory). 
     It should be noted that the data storage system  106  typically includes a plurality of storage devices (e.g., disks, hard drives). As such, storage device controller  107  can, for example, be a redundant array of independent disks (RAID) controller that controls a plurality of hard drive arranged in one or more disk arrays of a RAID. The storage device controller  107  is provided as an interface to the data storage system  106 . As such, the computer  102  can use this interface to access data stored in data storage system  106  without having to address each one of the disks individually. 
     As illustrated in  FIG. 1A , these storage devices can, for example, include first and second storage devices  108  and  109  and an auxiliary storage device  112 . The first and second storage devices  108  and  109  can serve as main storage while auxiliary storage device  112  can serve as backup to the data stored in the main storage (i.e., first and second storage devices  108  and  109 ). Although the storage device  112  can be comprised of several components, it should be noted that from the perspective of the computer  102  the data storage  106  is a single logical unit. As such, the computer  102  can, request a logical read, write, or perform other data access requests to be performed without having to individually address various storage devices of the data storage system  106 . Upon request, the storage device controller  104 , in turn, initiates access operations on individual storage devices of the storage device system  106  in order to perform the requested operation (e.g., writes the requested data, reads data and returns it, etc.). Hence, the computer  102  can use the storage device controller  107  to perform various data access operations without having to address the implementation details of the data storage system  106 . 
     Moreover, the storage device controller  107  provides a slow-access adjustor  110  that detects potential performance problems. The slow-access adjustor  110  detects that an access operation (e.g., read) has not completed within a predetermined amount of time. This operation can be referred to as a “slow-access” operation (e.g., slow-read operation). When the slow-access adjustor  110  detects a “slow access” operation as a potential performance problem, it attempts to provide data using the backup information to generate the desired data rather than waiting for the “slow access” operation to complete. 
     By way of example, in response to a read request (A, B) to obtain data portions A and B, the storage device controller  107  initiates a read (A) on the first storage device  108  and a read (B) on the second storage device  109 . The slow-access adjustor  110  determines whether both of these read operations have successfully completed within a predetermined amount of time. This predetermined time period can, for example, represent an acceptable threshold for a particular application (e.g., response time needed from each read operation to maintain a particular data rate). A timer can, for example, be used to measure this predetermined amount of time. In any case, the slow-access adjustor  110  can determine that a read operation has not successfully completed within a predetermined time period (or slow-access threshold). In the example illustrated in  FIG. 1 , the slow-access adjustor  110  detects that the read (B) operation did not successfully complete within a predetermined time period while the read (A) did. In other words, it is determined that data portion B in section  114  of the second storage device  109  was not read within the predetermined time period. As a result, the slow-access adjustor  110  attempts to generate data portion (B) from the backup data  116  stored in the auxiliary device  112 . If this attempt is successful, data B can be obtained without having to wait for the read (B) operation to complete. 
     As will be appreciated by those skilled in the art, data can be obtained or generated from backup data, for example, by using parity information. This parity information can, for example, be the result of the exclusive-OR (XOR) of data stored in section  118  of the first storage device (A) and data stored in section  114  of the second storage device (B). In any case, if data stored in section  114  (B) can be generated using the backup information stored in auxiliary storage device  112  (e.g., XOR of A and B), the read (B) operation is aborted and the generated data (B) is returned to the computer  102 . Again, this means that data (A, B) can be provided to the computer  102  without having to wait for the read operation (B) to complete. As a result, a slow-access problem can be identified as a potential performance operation and resolved by the slow-access adjustor  110  using back-up information. 
     In addition, the storage device controller  107  can prevent “slow-access” problems from happening in the future. In one embodiment, the slow-access adjustor  110  marks sections  114  of the second storage device  109  as a “slow-access” section (e.g., slow-read section). Appropriate action can then be taken to prevent future slow-access problems from being encountered on the same section of the storage device after the section has been marked. By way of example, data can be rewritten to the same marked section  114  or it can be written (i.e., moved) to a different section of the second storage device  109  (i.e., remapped). 
     To further illustrate some exemplarily operations that can be performed to prevent reoccurrence of slow-access problems,  FIG. 1B  depicts a storage device controller  150  in accordance with another embodiment of the invention. The storage device controller  150  provides a slow-access averter  152  that performs various operations that can prevent “slow-access”. These operations are typically performed on a section of a storage device that has been identified (e.g., marked) as having caused a “slow-access” (e.g., section  114 ). These preventative operations, for example, include rewriting (i.e., over-writing) data B to the marked section  114  of the second storage device  109 . As another example, data originally written to the marked section  114  (data portion (B)) can be written to another section, namely section  120 . In other words, data portion B can be remapped to a different section of the storage device  110 . It should be noted that it is possible that a section  118  of the first storage device can also be remapped as the result of remapping data portion B from section  114  to section  120 , so that, for example, both sections of data are stored in a “stripe” across the first and secondary storage devices  108  and  110 . 
     Furthermore, it will be appreciated that rewriting data can eliminate many “slow-access” (e.g., “slow read”) situations. Remapping data, however, may be necessary if rewriting it fails to resolve a “slow-access” problem. In general, most “slow-access” problems can be solved by rewriting and/or remapping the data. However, as will be appreciated by those skilled in the art other operations may be necessary in order to solve the “slow-access” problem. These operations include replacing a storage device entirely, reformatting the drive, etc. In any case, when a “slow-access” is identified, for example, by the slow-access adjustor  110  of  FIG. 1A , appropriate action can be taken to correct the problem using, for example, a slow access averter  152  of  FIG. 1B . It should be noted that preventative operations are typically performed when the computing system is not processing data for an application (e.g., during maintenance time), but this is not a requirement. As such, it may be possible to combine the slow-access adjustor  110  of  FIG. 1A  and slow-access averter  152  of  FIG. 1B  in an attempt to correct an identified “slow-access” situation as soon as possible even during execution time of an application. 
       FIG. 2  is a flow diagram of a slow-access adjusting process  200  according to one embodiment of the invention. The slow-access adjusting process  200  can, for example, be performed by the slow-access adjustor  110  of  FIG. 1A . Initially, the slow-access adjusting process  200  receives  202  a request to access data. Typically, this data has been stored as a plurality of data portions (e.g., data section of a disk) on a plurality of storage devices. In other words, a first portion of the requested data is stored in a first storage device while a second portion of the requested data is stored in a second storage device. 
     After the request for data has been received, an access-operation is initiated  204  to access each one of the data portions stored in the plurality of storage devices. In other words, a first access-operation is initiated on the first storage device to access the first data portion, and a second access-operation is initiated on the second storage device to access the second data portion. Thereafter, it is determined  206  whether each of the data-access operations has successfully completed within a predetermined amount of time. Again, it should be noted that the predetermined amount of time can, for example, represent an acceptable access-time that is determined for a particular performance requirement. In one embodiment, for example, the predetermined time represents a “rolling average” of expected access times which will be further described below. 
     In any case, if it is determined  206  that each of the data-access operations has successfully completed within the predetermined amount of time, the slow-access adjusting process  200  ends. However, if it is determined  206  that at least one of the data-access operations has not successfully completed within the predetermined time interval, at least a portion of the requested data is obtained  208  from backup information. In other words, back-up information is used to generate the requested data for all read operations that did not successfully complete within the predetermined amount of time. By way of example, data can be generated (or re-generated) using parity information. Hence, obtaining  208  of data may include generating (or regenerating) data from, for example, parity information. In any case, after data has been obtained using the back-up information, the data request  202  can be completed. Accordingly, the requested data is provided  210  in response to the data access request  202 . Optionally, one or more data portions that have not been accessed within the predetermined amount of time can be marked  212  as “slow-access” data portions (or sections). The slow-access adjusting process  200  ends following the optional marking  212 . 
       FIG. 3  is a block diagram of a computing system  300  according to another embodiment of the invention. The computing system  300  depicts a RAID controller  302  provided for a plurality of storage devices arranged as a RAID  304 . The RAID controller  302  represents, for example, the storage device controller  107  of  FIG. 1  implemented for a RAID  304  in accordance with one embodiment of the invention. Similar to the storage device controller  107 , a slow-read adjustor  110  is provided for the RAID controller  302 . 
     For simplicity, the RAID  304  is represented with main storage devices  306 ,  307  and  308  arranged of storing data D 1 , D 2  . . . D n  and auxiliary storage devices  309  and  310  arranged for storing parity (P 1  . . . P n ). However, it should be noted that parity information may be spread between various storage devices of RAID  304 . As such, it is not necessary for a storage device to be designated to store the parity information. 
     In any case, the RAID controller  302  receives a request to access data D (e.g., a record) that has been stored as data portions (D 1 , D 2  and D n ) in RAID  304 . In other words, data D has been stored as a stripe of data across storage devices  306 ,  307  and  308  respectively as data portions D 1 , D 2  and D n  in data sections  316 ,  317  and  318  of storage devices  306 ,  307  and  308 . Parity information P 1 , . . . , P n  has been stored across what can be considered the same stripe across the storage devices  309  and  310  respectively in sections  319  and  320  of storage devices  309  and  310 . 
     In response to the request for accessing data D (D 1 , D 2  and D n ), the RAID controller  302  initiates read operations R 1 , R 2  . . . and R n  respectively on sections  316 ,  317  and  318  of the storage devices  306 ,  307  and  308 . A slow-read detector  330  provided as one of the components of a slow-read adjustor  110  operates to obtain a slow-read time t 1  to measure the time it takes to complete read operations R 1 , R 2  . . . and R n . The slow-read detector  330  then sets a timer  332  to the slow-read time t 1 . If the slow-read detector  330  detects that at least one of the read operations R 1 , R 2  . . . and R n  has not successfully completed before the timer  332  expires, a data generator  334  is activated. The data generator  334  then attempts to generate from parity data (P 1 , . . . , P n ) any data portion (D 1 , . . . , D n ) that has not already been obtained by the operations R 1 , R 2  . . . and R n . By way of example, if the slow-read detector  330  detects that the read operation R 2  has not successful completed when the timer  332  expires, the data generator  334  is activated. Upon activation, data generator  334  attempts to generate data stored in data portion  317  (D 2 ) from parity information (P 1 , . . . , P n ) stored on storage devices  309  and  310 . If this attempt is successful, data generator  334  generates data portion D 2  using parity information (P 1 , . . . , P n ). Hence, the read operation R 2  can be aborted, and data segment D 1 , D 2 , and D n  are assembled and returned as data D. 
     It also should be noted that the RAID controller  302  can optionally include a slow-reader marker  336  that marks section  317  (where D 2  has been stored) as a “slow-read” section. This enables preventative measures to be taken to prevent slow-read problems from happening again when section  317  is read on a subsequent read operation. As noted above, these preventive actions include, for example, rewriting or remapping data. To further illustrate,  FIG. 5  depicts a slow-read aversion process  500  in accordance with one embodiment of the invention. 
     However, referring now to  FIG. 4 , a flow diagram for a slow-read adjusting process  400  is depicted according to another embodiment of the invention. The slow-read adjusting process  400  can, for example, be used by the RAID controller  302  of  FIG. 3 . The slow-read adjusting process  400  initiates  402  a plurality of read operations to read a plurality of data sections stored as a stripe across a plurality of disks. Next, a slow-read time-out interval is obtained  404  for the read operations and a slow-read timer is set  406  to the slow-read time-out interval. Thereafter, it is determined  408  whether all of the read operations have successfully completed. If is determined  408  that all of the read operations have successfully completed, slow-read adjusting process  400  ends. However, if is determined  408  that at least one of the read operations has not successfully completed, it is determined  410  whether a read failure has been received so that read-failure error recovery can be performed  412 . By way of example, an error can be output and conventional read-error recovery can be performed. The slow-read adjusting process  400  ends following the read-failure error recovery operation  412 . 
     On the other hand, if is determined  410  that a read failure has not been received, it is determined  414  whether the slow-read timer has expired. If it is determined  414  that the slow-read timer has not expired, it is determined  408  whether all read operations have successfully completed, and the slow-read adjusting process  400  proceeds in a similar manner as discussed above. However, if it is determined  414  that the slow-read timer has expired, it is determined  416  whether data can be generated from parity. If data cannot be generated from parity, it is determined  408  whether all operations have been completed. In other words, the slow-read adjusting process  400  waits for the read operations to complete  408  or receive  410  a read-failure, and perform  412  read-error recovery. 
     If it is determined  416  that data can be generated, data is generated  418  from parity and provided. In other words, the slow-read adjusting process  400  does not wait for any read operation to complete or fail if the slow-read timer has expired  414 , provided it is also determined  416  that data can be generated from parity. In such cases, data is generated  418  from parity and provided. Accordingly, all read operations that did not successfully complete are aborted  420  because data has been generated using parity. In addition, data sections can optionally be marked  422  as “slow-read” sections so that preventative measures can be taken to prevent slow-read problems from happening in the future.  FIG. 5  illustrates preventative measures that can be taken in accordance with one embodiment of the invention. Slow-read adjusting process  400  ends following optional marking  422 . 
       FIG. 5  depicts a slow-read aversion process  500  in accordance with one embodiment of the invention. The slow-read aversion process  500  is typically done during maintenance time, however, this is not a requirement. The slow-read aversion process  500  initially determines  502  whether the number of marked sections in a stripe is less than or equal to a threshold (e.g., two sections in a stripe). If it is determined  502  that the number of marked sections in a stripe is less than or equal to the threshold, the marked section(s) are rewritten  504 . Thereafter, a slow-read time period is obtained  506 , and it is determined  508  whether the data in the section can be read within the slow-read time period. In other words, slow-read aversion process  500  determines whether the rewriting  504  of the data has solved the “slow-read” problem for the marked sections. To achieve this, it is determined  508  whether data can be read within an acceptable time period (i.e., a “slow-read” time period). If it is determined  508  that the “slow-read” problem is resolved (i.e., rewritten data can be read within the slow-read time period), the marked section(s) is unmarked  510  and the slow-read aversion process  500  ends. 
     However, if the slow-read aversion process  500  determines  508  that the rewritten data cannot be read within the slow-read time period or it is determined  502  that whether the number of marked sections in the stripe is greater than the threshold, the strip is remapped  512  to a different cross section of disks. Next, a second slow-read time period is obtained  514 . As will be appreciated by those skilled in the art, this second slow-read period may be the same as the first slow-read time period obtained  506 . However, the second slow-read time interval may be different to compensate for different read time expectations, for example, as a result of remapping data. As will be appreciated by those skilled in the art, read time expectations may vary for different sections of a disk. Generally, it should take less time to read sections that are closer to the perimeter of the disk than those situated closer to the center. 
     In any case, after remapping  512 , it is determined  516  whether the remapped section(s) can be read within the slow-read time period obtained at operation  514 . The slow-read aversion process  500  ends following unmarking  510  of the section(s) if it is determined  516  that the remapped section(s) can be read within the slow-read time period obtained  514 . However, if this is not the case, further action can be taken  518  to resolve the slow-read problem. For example, an error can be output, and the disk may be reformat or replaced to improve the read time. In any case, the slow-read aversion process  500  ends following operation  518 . 
     As noted above, a “rolling average” of expected access times can be used to determine a “slow-read” time out interval. This time interval can be used, for example, as the time period obtained  404  to set a timer  406  as shown in  FIG. 4 . This “rolling average” can, for example, be determined in a similar manner as an average transfer time determined for data transfer performance monitoring methods illustrated in U.S. Pat. No. 7,134,053, which is hereby incorporated herein by reference for all purposes. 
     By way of example, in one embodiment, an average transfer time for the disk drive is obtained. After transferring a first number of data blocks from the disk drive, the transfer time for the time it takes to transfer the first number of data blocks from the disk drive is measured. Thereafter, it is determined whether the measured transfer time is substantially greater than the average transfer time, and a performance error count is increased accordingly when the measured transfer time is substantially greater than the average transfer time. In this way, the average transfer time may be adjusted for more meaningful performance analysis. 
     As will be appreciated by those skilled in the art, in a similar manner, an average expected read time for a disk drive can be obtained. After reading a first number of data blocks from the disk drive, the time it takes to read the first number of data blocks from the disk drive is measured. Thereafter, it is determined whether the measured read time is substantially greater than the average read time, and a slow-read error count is increased accordingly when the measured slow-read time is substantially greater than the average expected read time. In this way, the average expected read time may be adjusted and more meaningful slow-read time periods may be obtained for various sections of a disk. More details about the average transfer times are described in U.S. Pat. No. 7,134,053. 
     The advantages of the invention are numerous. Different embodiments or implementations may yield one or more of the following advantages. It should be noted that this is not an exhaustive list and there may be other advantages which are not described herein. One advantage of the invention is that improved performance (e.g., data throughput) of disk drives or RAIDs can be achieved by reducing delay time of slow access operations. Another advantage of the invention is that overall performance can be enhanced by taking preventative measures that reduce the reoccurrence of slow access problems. Yet another advantage of the invention is that preventative measures can be performed cost effectively during maintenance times. Still another advantage is that the invention can be cost effectively implemented to use parity information which is typically provided for RAIDs. 
     The various aspects or features of the invention described above can be used alone or in various combinations. The invention is preferably implemented by software, but can also be implemented by hardware or a combination of hardware and software. The invention can also be embodied as computer readable code on a computer readable medium. The computer readable medium is any data storage device that can store data which can thereafter be read by a computer system. Examples of the computer readable medium include read-only memory, random-access memory, CD-ROMs, DVDs, magnetic tape, and optical data storage devices. The computer readable medium can also be distributed over network-coupled computer systems so that the computer readable code is stored and executed in a distributed fashion. 
     The many features and advantages of the invention are apparent from the written description, and thus, it is intended by the appended claims to cover all such features and advantages of the invention. Further, since numerous modifications and changes will readily occur to those skilled in the art, it is not desired to limit the invention to the exact construction and operation as illustrated and described. Hence, all suitable modifications and equivalents may be resorted to as falling within the scope of the invention.

Metadata:
Filing Date: 20040422
Publication Date: 20070501
Grant Date: 20070501
Priority Date: 20040422
Inventors: ENG MICHAEL
WONG DAVID
BENARESH LAMONT
Assignee: APPLE INC
CPC Classifications: [{"code": "G06F3/065", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F11/1076", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F3/0616", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F3/0689", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F11/1088", "inventive": true, "first": true, "tree": "[]"}, {"code": "G06F3/0611", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F3/0616", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F3/0611", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F3/065", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F11/1088", "inventive": true, "first": true, "tree": "[]"}, {"code": "G06F11/1076", "inventive": true, "first": false, "tree": "[]"}, {"code": "G06F3/0689", "inventive": true, "first": false, "tree": "[]"}]
Family ID: 35137820