OKLAHOMA CITY OPERATIONS _________________________________________________________________ Date: 1/8/90 John Lohmeyer Chairman X3T9.2 Subject: Additional SCSI Caching Control Prior to the forwarding of SCSI-2 I failed to note the omission of an important caching control function. My recollection is that the capability to overtly control the number of cache segments was in the original proposal. At some early stage of the process this important function was dropped. Since I failed to notice prior to forwarding that the function was not included, I propose that it be documented and added to SCSI-3. If the committee is ill-advised enough to bring SCSI-2 back for technical changes, rather than going ahead with the long needed publication, I would of course request that it be added to SCSI-2. In addition to not noticing when it was deleted, I do not recall any rationale for removing it. It appears that its omission mistakenly prejudices the standard in favor of host (including HBA) based caching. While the embedded SCSI devices can optimize their performance based upon apriori or learned information, many system providers will want to be able to control more of the SCSI based caching than SCSI-2 currently provides for. The most obvious omission is the ability to control the number of active segments. The attached proposal, Alternative 1, incorporates the capability we, and some other vendors, provide in a Vendor Not So Unique Page Code 38h. Alternative 2 expands this capability and provides additional opportunities for caching control. Since it provides more capability, I recommend the adoption of Alternative 2. G.E. Milligan Manager of Product Planning Alternative 1 Caching Page Caching Page ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | PS |Reserved| Page Code (08h) | -----|-----------------------------------------------------------------------| 1 | Page Length (0Ah) | -----|-----------------------------------------------------------------------| 2 | Number of Cache Segments | WCE | MF | RCD | -----|-----------------------------------------------------------------------| 3 | Demand Read Retention Priority | Write Retention Priority | -----|-----------------------------------------------------------------------| 4 | (MSB) | -----|--- Disable Pre-fetch Transfer Length ---| 5 | (LSB) | -----|-----------------------------------------------------------------------| 6 | (MSB) | -----|--- Minimum Pre-fetch ---| 7 | (LSB) | -----|-----------------------------------------------------------------------| 8 | (MSB) | -----|--- Maximum Pre-fetch ---| 9 | (LSB) | -----|-----------------------------------------------------------------------| 10 | (MSB) | -----|--- Maximum Pre-fetch Ceiling ---| 11 | (LSB) | ============================================================================== The Number of Segments (bits 3 through 7 of Byte 2) advises the drive how many segments the host requests that the cache be divided into. Alternative 2 Caching Page Caching Page ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | PS |Reserved| Page Code (08h) | -----|-----------------------------------------------------------------------| 1 | Page Length (12h) | -----|-----------------------------------------------------------------------| 2 | FV | ABPF | SLOG | DISC | SIZE | WCE | MF | RCD | -----|-----------------------------------------------------------------------| 3 | Demand Read Retention Priority | Write Retention Priority | -----|-----------------------------------------------------------------------| 4 | (MSB) | -----|--- Disable Pre-fetch Transfer Length ---| 5 | (LSB) | -----|-----------------------------------------------------------------------| 6 | (MSB) | -----|--- Minimum Pre-fetch ---| 7 | (LSB) | -----|-----------------------------------------------------------------------| 8 | (MSB) | -----|--- Maximum Pre-fetch ---| 9 | (LSB) | -----|-----------------------------------------------------------------------| 10 | (MSB) | -----|--- Maximum Pre-fetch Ceiling ---| 11 | (LSB) | -----|-----------------------------------------------------------------------| 12 | Number of Cache Segments | -----|-----------------------------------------------------------------------| 13 | (MSB) | -----|--- Cache Segment Size ---| 14 | (LSB) | -----|-----------------------------------------------------------------------| 15 | Number of FIFO Segments | -----|-----------------------------------------------------------------------| 16 | (MSB) | -----|--- FIFO Segment Size ---| 17 | (LSB) | -----|-----------------------------------------------------------------------| 18 | Reserved | -----|-----------------------------------------------------------------------| 19 | Reserved | ============================================================================== The FIFO valid (FV) bit (Bit 7 Byte 2), when set to one, requests that the SCSI device assign a portion of the cache facility according to the SIZE bit and Bytes 15 through 17. If FV is set to zero, Bytes 15-17 are not valid. The Abort Pre-Fetch (ABPF) bit (Bit 6 Byte 2), when set to one, requests that the SCSI device abort the pre-fetch upon selection. When set to zero, the termination of any active pre-fetch is operation and/or vendor specific. The Statistical Logging (SLOG) enable bit (Bit 5 Byte 2), when set to one, requests that the SCSI device perform caching performance logging during subsequent operations. The logging may be used for internal device optimization or reported by the Log Sense command for optimization by the host. When set to zero, SLOG requests that caching performance logging be disabled to reduce overhead time or to prevent non pertinent operations from impacting tuning values. The Discontinuity (DISC) bit (Bit 4 Byte 2), when set to one, requests that the SCSI device continue the pre-fetch across time discontinuities, such as across cylinders (or tracks in an embedded servo drive), up to the limits of the buffer space available for pre-fetch. When set to zero, the DISC requests that pre-fetches be truncated (or wrapped) at time discontinuities. The Size Enable (SIZE) bit (Bit 3 Byte 2), when set to one, indicates that the Cache Segment Size, and/or FIFO Segment Size if FV equals one, are to be used to control caching segmentation. When SIZE equals zero, the Initiator requests that the Number of Cache Segments, and/or Number of FIFO Segments if FV equals one, are to be used to control caching segmentation. Simultaneous use of both number of segments and segment size is vendor specific. The Number of Cache Segments (Byte 12) advises the drive how many segments the host requests that the cache be divided into. The Cache Segment Size field (Bytes 13 and 14) indicates the requested segment size in Bytes. This standard assumes that this field is valid only when the SIZE bit is one. The Number of FIFO Segments (Byte 15), with SIZE equals zero, advises the drive how many segments the host requests that the SCSI device allocate for a FIFO function when all other cache segments are occupied by data to be retained. If the number is at least one, caching functions in the other segments need not be impacted by cache misses to perform the SCSI buffer function. The impact of Number of FIFO Segments equal 0 is vendor specific. The FIFO Segment Size field (Bytes 16 and 17) indicates the requested segment size in Bytes. This standard assumes that this field is valid only when the SIZE bit and FV equals one.