Disk Subsystem Performance Analysis for Windows — 7
© 2004 Microsoft Corporation. All rights reserved.
Such data combined with reliability, availability, and cost constraints can be used to
analyze an existing system or design a new one capable of meeting specific criteria.
This data can be refined even further if more detailed analysis is required. For
example, the individual distributions of locality, request size, and interarrival rates
can be tracked for each workload, rather than just mean values. However, the
correlations between the various characteristics compound the difficulty of the
analysis, so the typical system designer or administrator should focus on first-order
effects.
If workload characteristics are known in advance, whether obtained from empirical
data or detailed modeling, an understood hardware configuration can be evaluated
as to how it will perform under that workload. This section contains many guidelines
to aid in understanding the trade-offs made in designing and configuring a storage
subsystem to service a given workload while meeting specific performance,
reliability, availability, and cost criteria.
Simple Workload Characteristic Considerations
Read requests can result in prefetching activity at one or more points along the
storage path. In the case of sequential read workloads, this will usually provide a
performance advantage. However, for random read workloads, any prefetching
activity is wasted and might in fact interfere with useful work by delaying
subsequent request service or polluting any caches at or below the prefetcher.
Write requests can be combined or coalesced if a buffer or cache along the way
can collect multiple sequential writes and if the cache controller can issue a large
write request covering all of the write data. Completion status is returned in the
same manner as if all of the writes completed at the same time. That is, if the
individual writes at the coalescing point would normally have immediately
responded with completions to the issuing entities from that point, then they will still
do so. If they would have waited for completion confirmation from farther along the
path before responding, then they will wait until the completion confirmation comes
for the large (combined) write request. The typical scenario is a battery-backed
controller cache providing immediate completion responses and allowing long
streams of potentially-serialized small writes to be coalesced.
Caches are used to improve performance for both spatial and temporal locality.
Prefetching into a read cache is an example of a locality optimization; it assumes
that if LBN N is read, then LBN N+1 will probably be read soon. Write-back caches
provide a similar optimization, assuming that dirty data will either be overwritten
(temporal locality) or can be coalesced as adjacent LBNs are dirtied (spatial
locality). Write-back caches also allow disk requests to be reordered (or scheduled).
Disk schedulers are usually designed to reduce disk request service time, but other
criteria might be added to the scheduling heuristic, such as starvation avoidance or
prioritization of specific request types.
Request size is of particular significance in striped arrays and is covered in more
detail in “Stripe Unit Size” later in this paper. In some cases, Windows might divide
disk requests into 64K chunks.
Few systems experience a steady-state workload where the characteristics of the
requests do not fluctuate over time. Most systems experience bursts of activity and
idle periods, often tied to the 24/7 cycles of the work day/week. For example, the
activities performed online at a local bank can differ dramatically as the day
progresses: the bank staff first arrives in the morning, the bank opens its doors, the
lunch hour, the bank closes its doors, the bank staff leaves, and finally automated