Abstract:
In order to investigate the behaviour of a data storage system, the time differences between commands from an analysis device and the completion of the operations defined by those commands are analyzed. The method may use a factorial parameter table definition representing common threads of I/O events in a patterned, cyclic nature, using a host computer as the host application emulator and data logger. The workload definition is provided either from hypothetical proposed thread parameters, or by statistical and common factorial analysis of real application I/O traffic analysis, or a combination of both. The generated workloads can be run while measuring the I/O event completion timings and event queuing characteristics, facilitating engineering interpretation of results for the purpose of analysing the effects of workload and system architectural design factors, and optimisation or evaluation of total system configurations.

Description:
RELATED APPLICATION  
       [0001]     The present application claims priority to European Patent Application No. EP05255239, filed Aug. 25, 2005, the entire contents of which are incorporated by reference herein.  
       BACKGROUND OF THE INVENTION  
       [0002]     The present invention relates to the analysis of the behaviour of a storage system, such as a hard disk drive. It relates to a method of generating Input/Output (I/O) loads on the storage system and analysing the behaviour of the storage system under such workloads. It is particularly, but not exclusively, concerned with single and multi-thread workloads such as AudioNisual (AV) applications which have isochronous and possibly additional anisochronous access characteristics, to permit replication and extension of those workloads.  
         [0003]     The invention may be used with a host system to target storage system extension of I/O workload characteristics, and creation of new, hypothetical likely host data storage access patterns of applications and systems using a generic host computer.  
         [0004]     As storage systems (single hard disk drives and arrays) are designed into more and more diverse applications, both host system and storage system designers need methods to evaluate the storage and I/O performance, functionality and overall suitability to the host application data access demands. Determining the time for each I/O operation to complete and how this performance measurement relates to the application and device configurations, will allow informed design or optimisation decisions to be made.  
         [0005]     Host designers need to ensure the storage system is suitable for meeting the application needs, both in performance and reliability given an application usage profile, and to make design decisions including but not limited to; the best implementation of interface and data access pattern and typical command sector count, file system structure, physical storage device mounting etc . . . in order to optimise the total system design for required reliability and/or performance.  
         [0006]     Storage device manufacturers need a way to explore how data access patterns and other host and storage design factors affect storage performance and command handling, so as to evaluate and improve storage design and operating mode optimisation for target applications.  
         [0007]     A method is required which allows the generation of complex host application data access behaviour in order to test storage suitability. This access behaviour is based either on analysis of a real host system, followed by direct mimicking of this pattern, or modification of said access behaviour to explore evolutionary proposals, configuration choices, or purely hypothetical access behaviour pattern generation for new host application design proposals.  
         [0008]     Once the required host application data access pattern has been generated, methods are required to measure the storage response times to individual I/O events and for statistical analysis of such data.  
         [0009]     Typical storage I/O workload initiator software available, and other documented methods of I/O workload generation do not provide the flexibility to accurately define many typical but complex multi-threaded access patterns of emerging AV streaming devices. Some do not give accurate or absolute control over several progressive characteristics of an I/O event pattern, such as the exact storage addressing locations of individual thread I/O events, I/O transfer size and type characteristics. They typically offer only specific patterns or sequential/random options with weighting factors. They also do not offer specific time scheduling of independent and interrelated events of a data access workload, coupled with detailed timing response measurements at the thread level and statistical analysis of this data to assist in design and system optimisation. Other known ways of I/O workload generation are based on defining mean factors with heavy-tailed Poisson distributions, or specific mathematical distributions for several characteristics including spatial locality of I/O access request, I/O transfer sizes, I/O type and I/O request timing. These are typically based on extrapolation of characteristics from Asynchronous IT system workloads, where the mix of events from several client applications or processes are indeed high in characteristic variances. They therefore do not adequately capture and replicate the event sequence inter-relationships of many AV application workloads, where many of the processes are continuous and regular data rate and access location pattern, with low variance or no variance in iterative event characteristics. Additionally, many storage performance measurement methods are concerned primarily with testing maximum storage system throughput, i.e., saturation of the storage system with I/O requests in a defined sequence to determine the overall data rate achieved, rather than offering the facility to deliver a timed arrival pattern. Therefore, these are not generally suitable for generating isochronous workload patterns or analysis of storage system behaviours under such workloads.  
         [0010]     Alternatively, to achieve a realistic emulation of the proposed host application for the purpose of testing storage behaviour under specific isochronous and mixed thread workloads it would theoretically be possible to take actual programming of the actual step-by-step sequence of I/O commands, using an I/O sequencer, or record and playback of I/O activity from a real application. Step-by-step generation of a sequence is complex and time consuming. Record and replay is only possible where the real application exists. Neither of these approaches easily afford modification of the data access pattern characteristics, e.g. to enable a sensitivity study, without further extensive reprogramming.  
       SUMMARY OF THE INVENTION  
       [0011]     A far simpler approach is to factorise the required complex access pattern, and express it as a set of algorithm parameters (factors) which define identified threads of common activity which a general host program ‘engine’ can use to generate a host I/O event sequence. Editing of this parameter list is much quicker than sequence reprogramming, so individual thread or global pattern factors can be quickly and easily modified to explore further related test cases.  
         [0012]     Thus, at its most general, the present invention causes operations (also referred to as events or tasks) to run on a storage system, and completion of the operations be detected and recorded. In that way, by analysing the time differences for the operations, the behaviour of the storage system can be analyzed. For such a system to operate, each operation is defined by at least one command, with that command(s) being obtained by conversion of factors corresponding to the required operation, the factors including the timing characteristics of the operation.  
         [0013]     Thus, a first aspect of the present invention may provide a method of analysing the behaviour of a storage system when running an I/O workload. The method comprises creating an isochronous thread formed by a sequence of operations to be carried out by the storage system when running the thread. The thread is created by defining a plurality of factors wherein each factor corresponds to an aspect of the thread when running the I/OI workload. The plurality of factors enable absolute control over iterative access location, transfer size and access type of the operations of said sequence of operations. Next, one or more timing factors corresponding to a frequency characteristic and a timing pattern for each of the operations of the sequence of operations is defined. The storage system runs the I/O workload by interpreting the one or more timing factors of each operation of said sequence of operations to determine a scheduled time for the corresponding operation. For each operation in the sequence of operations, the factors for each operation are interpreted to determine respective operation characteristics for the corresponding operation of the sequence of operations. For each operation in the sequence of operations, the operation characteristics are converted to at least one command for the storage system. Next, for each operation of the sequence of operations, at least one command is sent to the storage system to the storage system at a sending time being either the scheduled time or the earliest subsequent time the storage system is ready to accept at least one command of the respective operation of the sequence of operations, whichever is later. Next, the time of completion of each command of the corresponding operation by the storage system is detected. From the time of completion for each command of each operation of the sequence of operations, a time of completion is derived. The time difference between the sending time and the completion time for each operation of the sequence of operations is stored. Any operation start time latency is next stored. The start time latency is the difference in time between the scheduled time and the sending time for each operation of the sequence of operations. The behaviour of the storage system is analysed with the time differences and the operation start latencies of the sequence of operations.  
         [0014]     Similarly, where there are multiple threads, a second aspect of the present invention may provide a method of analysing the behaviour of a storage system when running an I/O workload. The method comprises crating a plurality of threads being formed by a corresponding sequence of operations to be carried out by the storage system when running the respective thread. Each thread is created by defining a plurality of factors corresponding to an aspect of the thread when running the I/O workload, The plurality of factors of at least one of the threads enables absolute control over iterative access location, transfer size and access type of the operations of the sequence of operations. Each thread is further created by defining one or more timing factors corresponding to a frequency characteristic and a timing pattern for each of the operations of the sequence of operations. Next, the storage system runs the I/O workload by interpreting the one or more timing factors of each operation of the sequence of operations of each thread of the plurality of threads thereby defining an interleaved sequence of operations containing all the operations of all the plurality of threads including a scheduled time for each operation of said interleaved sequence of operations. For each operation in the interleaved sequence of operations, the factors for each operation are interpreted to determine respective operation characteristics of the corresponding operation of the interleaved sequence of operations. For each operation in the interleaved sequence of operations, at least once command is sent to the storage system at a sending time being either a scheduled time or the earliest subsequent time the storage system is ready to accept at least one command of the respective operation of the interleaved sequence of operations, whichever is later. The time of completion of each command of the corresponding operation by the storage system is next detected for each operation in the interleave sequence of operations. From the time of completion of each command of each operation of the interleaved sequence of operations, a time of completion is derived. The time difference between the sending time and the time of completion of the operation in the interleaved sequence of operations is stored. Furthermore, any operation start time latency is stored wherein the start time latency is the difference (if any) in time between the scheduled time and the sending time. The time differences and the operation start latencies are analysed to thereby analyse the behaviour of the storage system.  
         [0015]     It is not readily possible to give a complete list of all possible factors which the present invention may use. These factors may include: writing data to said storage system; reading data from said storage system; the size of data to be transferred to or from said storage system; the start location of data writing or reading; and the address range.  
         [0016]     Also, to achieve the accurate or absolute control, the factors may include values defining whether the sequence of operations of a given thread are to be carried out at incrementing or decrementing locations within a defined address range in said storage system such as would enable the emulation of playback and rewind function in an AV device for example, and the ability to define a step value—the spacing between the increments or decrements, and possibly alternatively, a factor value defining that the sequence of operations are to be carried out at random locations within a defined address range in said storage system.  
         [0017]     Preferably, the analysing step analyses the operation start time latencies only when the duration of the respective operation start time latency is greater than a predetermined threshold value.  
         [0018]     As mentioned above, the present invention derives from the time of completion of each command of each operation of said sequence of operations, a time of completion of the corresponding operation of the sequence of operations, and stores that time difference. It is also preferable to store, for subsequent use in the analysis section, the time difference between the sending time and the time of completion of each command for each operation of the sequence of operations.  
         [0019]     The workloads can be adjusted by adjusting factors within the threads in order to alter the operational sequence or characteristics, or indeed by adding or removing threads. The method may be repeated for each workload test case.  
         [0020]     Where there are a plurality of threads, the plurality of factors may enable absolute control over iterative access location, transfer size and access type of operations of the sequence of operations for only some of the threads.  
         [0021]     For the present invention, the storage system is preferably a disk drive.  
         [0022]     The present invention permits an algorithm and associated parameter structure to be defined to create host driver I/O data workloads in the target storage system wherein the term “host” is used to refer to the behaviour analysis device mentioned above.  
         [0023]     It permits a factorial definition to be created representing patterns of I/O events in a single or multi-threaded I/O access pattern (workload); creating host application access patterns (workloads) with a general host computer as the application host emulator.  
         [0024]     Other preferred features include:  
         [0025]     (a) Timing and recording of individual I/O operation times; the invention measures and records individual storage I/O operation completion timing data from the operation of such an I/O access pattern (workload).  
         [0026]     (b) The principal method is applicable to emulation of the host side of 1 to 1, 1 to many, many to 1 and many to many host/storage systems, and as such generates a required host workload at the storage system controller level. This allows direct testing and analysis of the (real) storage behaviour (response timings) in the application environment, by replacing the host with an equivalent test system which can create the workload while timing the storage response.  
         [0027]     (c) Analysis and replication of existing host system workloads; thus providing a combination of general data analysis techniques (grouping, sorting and deriving basic statistics like mean, distribution etc . . . ) of existing host to storage data traffic flows, in order to derive a factorial definition of a number of threads which when combined, represent an equivalent I/O workload to the real host application.  
         [0028]     (d) User generation of workload, real host system emulation, hypothetical workloads and factorial modification of workloads; this provides for user generation of test workloads. The workload definition step may be either based on observed real host I/O event characteristics or purely by hypothesis of new application access patterns. Further, existing workload definitions may be modified in order to explore design limits and optimisations by variation of the definition and modulation of algorithm parameters (factors). In particular, it may include the ability to define accurately, the physical device and location (logical block address) and contiguous sector ranges of a number of independent threads (data sets or streams defining tasks for the storage systems). Further, it may include definition of a function i.e. sequential, random variance, +/− step function and direction of subsequent event location variability with respect to the previous thread event location. Event trigger timings may similarly be recreated accurately using absolute intervals, random variance functions, immediate or throttled by wait periods.  
         [0029]     (e) File system architectures; the flexibility of the algorithmic thread definition structure may be such that it can be used to represent complex and specific I/O behaviours e.g. file system architecture choices can be explored by recreating a specific sequence of commands as a thread event within the definition.  
         [0030]     (f) Comparing operation timing data grouped by thread and in total (all threads combined); the individual I/O request to storage completion times may be measured and stored for each thread. Comparisons are therefore possible between threads and how thread definition factors alter these timings i.e. difference between access timings at outer diameters and inner diameters of a hard disk, how a given thread I/O architecture affects cache effectiveness etc . . . This also enables the determination of how external design characteristics i.e. mechanical mounting of the storage, or environmental conditions, affect the storage functional response and behaviour.  
         [0031]     (g) I/O Latency Logs; thread level scheduled operation ageing (lateness) may be monitored over a definable threshold factor, so as to enable reporting of potential buffer overrun situations in isochronous systems such as AV streaming applications.  
         [0032]     (h) Statistical analysis and design margin extraction; statistical analysis of operation I/O timings and operation ageing statistics enables calculation of system design margins such as storage busy time vs. idle time (Storage bus utilisation Duty Cycle and saturation).  
         [0033]     (i) Comparison of test data sets/influence design on host and storage sides; comparison of several sets of data created by varying definition factors enables evaluation of many aspects of both host and storage design and performance. Results can directly influence design and optimisation decisions for the host and storage developer.  
         [0034]     In the preferred embodiment of the invention, the sequencing apparatus (analysis design) may be a host computer connected to the storage system under test. The host will be programmed with an I/O generation and timing ‘engine’ program to read the user created definition data file and accordingly create the required host I/O operation sequence (i.e. the sequence of operations to be carried out by the storage system).  
         [0035]     The timing of operations is driven by the simulation program, which in a preferred embodiment is a loop structure scheduling forthcoming events from each independent thread, polling the system clock from a known reference starting time and triggering operations as their scheduled time matches that of the clock. In another preferred embodiment, the simulation program thread event software objects may independently interrupt and initiate the port I/O as their next scheduled trigger time arrives.  
         [0036]     Specific I/O interface configurations such as interface data transfer rate and protocol may be set either as an implemented structure in the definition file and simulation software, a run-time user option in the simulation software or by other host system configuration options. 
     
    
     BRIEF DESCRIPTION OF THE DRAWINGS  
       [0037]     Embodiments of the invention will now be described in detail, by way of example, with reference to the accompanying drawings, in which:  
         [0038]      FIG. 1  shows a block diagram of a Host and Storage system architecture, with an interface bus analyzer attached;  
         [0039]      FIG. 2  shows a block diagram outlining a method of using a Host computer with appropriate hardware and software to replace the host system for test purposes;  
         [0040]      FIG. 3  shows a typical host application I/O interface bus trace, parsed into a columnar format;  
         [0041]      FIG. 4  shows an example graphical plot of storage l/O operations in a given application;  
         [0042]      FIG. 5  shows an example summary of I/O operation groupings into threads;  
         [0043]      FIG. 6  shows an example table and histogram of a random variance generation algorithm for Sector counts of I/O commands;  
         [0044]      FIG. 7  shows various examples of storage address location patterns in typical threads;  
         [0045]      FIG. 8  shows an example multi-thread definition parameter table; and  
         [0046]      FIG. 9  shows an example output data histogram of command completion times. 
     
    
     DETAILED DESCRIPTION  
       [0047]     In the following description of embodiments, reference is made to “threads”, which have also been referred to above. A thread is a time sequenced plurality of operations, i.e. a plurality of operations in a sequence according to a timing schedule. The thread will have a common set of factors. Thus, the first thread may have a timing factor of 500 ms (frequency 2 Hz), involve a WRITE operation, three commands, and transfer two hundred sectors of data each command. A second thread may have a timing factor of 2s (frequency 0.5 Hz), be a READ operation, involve one command, and transfer one hundred sectors of data each command.  
         [0048]     By running several threads an overall plurality of operations is created, which are time-interleaved according to their timing factors.  
         [0049]     Moreover, subsequent discussion will refer to an “event”. This is the occurrence of a single operation in a given thread, so that the total set of operations created by several threads running concurrently, each defined by a set of factors, results in a sequence of events, with the events being sequentially derived from respective ones of the various threads according to the respective timing factors of that thread. Hence, an event is when an operation is created, causing the storage system to run a task. In the present invention, timing information derived from the time difference of the, or the first of, the command(s) corresponding to the task, and the completion of the task, is determined to analyze the behaviour of the storage system. This will now be described in more detail.  
         [0050]     In the embodiment, an electronic device or networked system has one or more hosts  10  connected to one or more storage device elements  12 . A simple one to one example would be a Digital Video Recorder (DVR), which has a host controller using a standard hard disk interface to connect to a single hard disk drive. Regardless of the topology of the system, the complete application system has a specific purpose, achieved through the application of host electronics and software (The host  10 ) connected by an I/O interface to hard disk storage device elements  12  (The storage). With reference to  FIG. 1  the host  10  will initiate READ and WRITE data commands and other device control functions, to the storage device elements  12  as required for the application purpose. The I/O transaction events which make up this ‘data traffic’ for a given continuous access application scenario, can generally be approximately defined by a pattern. The application scenario, for example, may be a data logging device, recording several external input values periodically. These patterns can be captured using a bus monitoring and analysis device  14 , and then analyzed and interpreted by factorisation, with the individual I/O events interrelated by common factors with respect to data transfer direction, size, order, timing and storage location address. For example, a data logger may be writing to several different storage locations once a second, incrementing slowly in storage address for each data set. Additionally, to use data threads, there may be file system activity occurring at a common indexing address area, which can be quantified in terms of address range, average frequency and timing distribution of accesses, transfer size etc . . .  
         [0051]     For these types of host-storage application systems, for many reasons during system design, evaluation or problem diagnosis, it is often necessary to understand the characteristics of the data access pattern, and the storage functional response or performance metrics resulting from the given data access pattern.  
         [0052]     There are several situations in which direct analysis with the actual system are not practical or possible, or an emulation system is preferable; for example but not exhaustively:  
         [0053]     (1) Many systems are not open computer systems, in which case access to the control architecture to allow variance of the working parameters, and measurement of system I/O metrics is impossible (e.g. consumer digital video recording system, music player etc . . . ).  
         [0054]     (2) Critical systems are preferably uninterruptible and therefore unavailable for substantial exploratory testing and analysis.  
         [0055]     (3) Probing the real system or interface to monitor in-system data traffic for analysis is complex; often expensive, requiring specialised equipment, and the data collected usually requires detailed expert analysis to draw conclusions. Also, it is only a passive exercise—not allowing application behavioural variances to be introduced to investigate the affects.  
         [0056]     (4) The system may be merely a proposal or new application idea, in which case there is no physical prototype system in existence to test the storage response, and an emulation capability is mandatory to provide the likely host driven I/O workload.  
         [0057]      FIG. 2  shows a method using a standard computer acting as host  10 , for creating a representation  20  of a definable algorithmic data access pattern, including measurement of I/O response timings, which can then be connected to a target storage system  12  in order to test and measure the system interoperability and storage response and performance. The definition of the access pattern can be determined in a number of ways as discussed below. In a particular embodiment of the invention, the definition data is input to a software program, which interprets it and outputs an I/O request stream to the Storage interface port representing the desired data access pattern.  
         [0058]     Further to this, the embodiment provides for statistical analysis of resultant monitored storage timing data in order to derive system metrics which assist in design or diagnostic decision making for system and storage engineers.  
         [0059]     In the example shown in  FIG. 1 , an interface bus analyzer is used as the monitoring and analysis device  14  to derive the data traffic of a given Host-Storage I/O activity. Using parsing software, this trace is ported into a spreadsheet application to allow easy statistical analysis.  FIG. 3  shows a simplified example fragment of bus trace data ported into a columnar format.  
         [0060]     From the trace it can be seen that a mixture of read and write commands have been monitored in time order, varying in start time, transfer size and storage address location. In this simple example, the general pattern can be seen in the time order sequence as a set of sequential read events at 1 address range, time interleaved with a set of sequential write events at another location. In more complex traces the events might appear at first to be random in nature, and the relative nature of groups of events may not be so obvious and require more sophisticated analysis. Using the simplified example further, graphical analysis ( FIG. 4 ) shows a way of viewing the access pattern of a trace in order to appreciate the relative groups of events by type (read/write), time order and storage address range. A typical trace of thousands of events would be required in order to capture a statistically valid sample of activity from which to derive accurate factorial averages and distribution statistics. However, assuming such data is available, sorting and dividing the data by various factors allows common groups of events to emerge by factorial distribution and grouping. An example sequence of factorisations to sort the data and derive groups are: divide into read and write groups, sort each by LBA, divide into LBA ranges and sort each again by time.  FIG. 5  shows an example of the basic unique properties of each group as derived from an event trace.  
         [0061]     Once approximate groups of events (threads) have been identified, the event inter-relationships within a group with respect to time, address, transfer size etc . . . can be determined. Particular factors like the timing pattern and frequency of events in a given group, and size of data transfer may be constant values or varying (typically across a narrow distribution), both of which can be defined. Typically for workloads with isochronous characteristics i.e. AV application system, timing and transfer sizes tend to be regular and periodic and so should be reflected by absolute values or very short-tailed distributions.  
         [0062]      FIG. 6  shows how an event parameter like transfer size can be constantly varied based on a function which applies variance to a base parameter value for each event, so that approximately the required variance and distribution achieving the required average values can be created.  
         [0063]     In this example the variance is random and evenly distributed. The defining parameters for the transfer size are: 
        SectorsPerCommandBase=900     SPCModX=166     SPCModY=4     Variance Type=R (Random seed)        
 
         [0068]     Variance Type defines the function to which the other parameters are applied. In this case the function uses a random seed between 0 and 1 (evenly distributed) as follows: 
 
SectorPerCommandBase+(Integer(Randomseed*SPCModX)*SPCModY)) 
 
         [0069]     The functions available to control the variability of these factors are programmed into the simulation engine and defined at the event group (thread or stream) level in the definition file. Alternative variance functions might be fixed (set base value, no variance), random normal distribution about a median, incrementing etc.  
         [0070]     The relative start address of time ordered events in a group can also be analyzed, to ascertain whether overall data access for a given range is contiguous, whether there is a common gap function (in sectors) between command start addresses, and whether the start address is incrementing or decrementing relative to the previous event. ( FIG. 7  shows various common examples of access address patterns). If events are sequential in nature (positive or negative address changes), then the range of addresses can be set and when the limits are reached the sequence can begin from the start address again. The number of cycles can also be set.  
         [0071]     The overall process of statistical grouping, sorting and deriving event relationships can be applied to obtain parameters for each derived thread, which when input to the workload definition, control the exact nature of the generated I/O threads in terms of: 
        a. event types e.g. read, write, special commands &amp; specific command sequences;     b. event location patterns (device and data address)—spatial locality and iterative event address progression patterns;     c. event transfer size characteristics; and     d. event timing characteristics—the time domain pattern.        
 
         [0076]      FIG. 8  shows the example derivation of X groups of events (threads) by storage address location, and the parameters which describe those threads. This set of threads represent a close approximation of the original data access pattern monitored in the system, and can be used to simulate the application host I/O requests while measuring storage response times.  
         [0077]     In another example, a real system streaming workload (a definition of sets of factors for several threads), derived as the above method describes, may be manipulated with respect to event frequency, location, transfer size etc . . . in order to factorially change the access pattern characteristics to investigate the effects or explore performance or functional design boundaries. I.e. The event transfer size of a thread could be halved while the event frequency could be doubled to see what effect this has on the system and storage. In another practical example, increasing the transfer size or decreasing event time interval will increase data rate of a thread, for instance, when the objective is to emulate a Fast-Forward or Rewind function in an AN application.  
         [0078]     In yet another example, the workload may be defined purely hypothetically, in order to define a group of threads based on a particular system application requirement, i.e. data organisation (file system or metadata) and isochrnnous transfer rate proposal. (The transfer rate of a thread is implied by the mean transfer size and timing interval resulting from the definition file.)  
         [0079]     In a particular embodiment, the definition can be loaded into the simulating computer. The computer runs a program which interprets the definition file and accordingly creates I/O requests at the Storage Interface port, representing the desired data access pattern. The program can control the total run time of the workload profile, in order ensure repeatability of iterative test runs. The program logs all I/O request-to-completion times; in a preferred embodiment, as a histogram of command counts by millisecond timing, displayed by thread ( FIG. 9 ).  
         [0080]     The program also monitors event lateness (operation start latency) beyond a set threshold (where previous events are still ongoing at the storage system and therefore delay subsequent event start times). This data allows interpretation by the user of how well the total system in any given configuration, achieves the response times required by a time dependant application (isochronous) emulation and also, whether an event time deadline is breached. An example of such a system is the digital video recorder, where real time video/audio data being recorded or played back must be transferred at a minimum average rate in order to prevent data loss either in the written data to the storage or the read data represented on the viewing medium. The lateness data allows the user to observe whether a workload becomes increasingly delayed i.e. the storage bandwidth is saturated, or how much buffering would be required to absorb the delays incurred without breaching the buffering deadline (buffer under-run or over-run).  
         [0081]     The data collected is used to derive meaningful performance and functional conclusions, such as overall data rate, data rate per stream, effectiveness (hit rate) of caching algorithms, storage command completion time distribution, total storage busy vs. idle time at the interface bus, and the relative contribution of various threads. Any test which results in 100% busy time implies no margin for isochronous workload.  
         [0082]     The program can be provided with global modulation parameters which can modify individual thread parameters of every thread.  
         [0083]     With a repeatable method of measuring system overall and thread level performance, and the ability to manipulate many basic characteristics of the workload and run comparative tests, many design factors may be explored including:  
         [0084]     (a) Access pattern factors—the design of the host interface, data organisation (file system and file layout), I/O size, number of streams, stream interleave, internal host scatter/gather algorithm etc . . . .  
         [0085]     (b) Physical factors—under repeatable application representative workloads, sensitivity to mechanical rigidity and general design of the storage device mounting enclosure, injection of environmental factors i.e. temperature, vibration . . . .  
         [0086]     (c) Storage system configuration—interface and system I/O modes of operation, caching configurations.  
         [0087]     As set forth above, the present invention is described by way of the preferred embodiment but is not limited to the above embodiment. From the invention thus described, it will be obvious that the embodiments of the invention may be varied in many ways. Such variations are not to be regarded as a departure from the spirit and scope of the invention, and all such modifications as would be obvious to one skilled in the art are intended for inclusion within the scope of the following claims.