KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q82203: SMARTDrive 4.0 Design Overview

Article: Q82203
Product(s): Microsoft Windows 95.x Retail Product
Version(s): WINDOWS:3.1,3.11
Operating System(s): 
Keyword(s): 
Last Modified: 27-SEP-1999

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Windows versions 3.1, 3.11 
- Microsoft Windows for Workgroups version 3.1 
-------------------------------------------------------------------------------

SUMMARY
=======

SMARTDrive version 4.0 is a utility included with Microsoft Windows and
Microsoft Windows for Workgroups.

SMARTDrive 4.0 is designed as block-oriented disk cache. It hooks into the system
at the MS-DOS device driver level, rather than at the ROM BIOS INT13 level. Each
block device driver on the MS-DOS device driver chain is "front- ended" by
SMARTDrive 4.0, which provides the caching.

SMARTDrive version 4.0 does not cache a temporary or permanent swapfile. Although
SMARTDrive 4.0 is designed as a block-oriented disk cache and hooks into the
system at the MS-DOS device driver level, SMARTDrive includes code which
determines whether what is being cached is part of the swapfile. If SMARTDrive
determines that disk access was made to access the swapfile, SMARTDrive. does
not cache that data.

MORE INFORMATION
================

SMARTDrive 4.0 calls the MS-DOS level device driver to perform any needed
physical disk I/O. This design yields the following benefits:

1. It is independent of the INT13 interface. Many device drivers do not use the
  INT13 interface. This means that these devices can be cached where
  INT13-level caches cannot. Examples are Bernoulli drives, some hard cards,
  and many SCSI and WORM drives. SMARTDrive 4.0 can cache any disk controller
  that uses an MS-DOS block device driver.

2. It is independent of disk geometry. Some disk managers and disk controllers
  use a disk-geometry mapping scheme that causes the logical geometry (that is,
  what MS-DOS sees) to be different from the physical geometry. Examples are
  many PS/2 systems, Ontrack's Disk Manager, and several disk controllers.

  INT13-based caches are sensitive to this difference and often have problems.
  For example, some disk-management software actually change the ROM BIOS
  specified disk geometry on the fly and thus confuse INT13-based caches.

  There usually is an interface to determine the true geometry, but this
  requires detection of the specific disk manager driver and generally
  complicates the disk cache software. Often, logical tracks actually cross
  physical track boundaries, which then cause track caches to incur performance
  penalties (inter-track seeks and rotational latencies).

  Also, to get around the ROM BIOS 1024 cylinder limitation, disk managers and
  controllers "fold" multiple tracks into 1 logical track. Doing this yields
  the above problem as well as forcing track caches to have a very large track
  buffer. In some cases, this cache is as large as 31.5K and must reside in low
  memory. The design of SMARTDrive 4.0 eliminates the geometry mismatch
  problem.

3. SMARTDrive 4.0 is also a write-behind cache. It adds significant performance
  improvement when files are being written. An application writes data to what
  it thinks is the disk. SMARTDrive takes this data and place it in a cache
  rather than physically writing it to the disk. This write-behind data stays
  in the cache until one of the following events occurs:

   - The cache fills up. The oldest block in the cache is freed up and if it is
     write-behind data, it is physically written to the disk.

   - The system goes idle. SMARTDrive writes the oldest write-behind data block
     to the physical disk. As long as the system is idle, it continues to write
     data until all the write-behind data has been written. This includes both
     Windows and MS-DOS applications being idle.

     When a disk-reset operation occurs (INT21H, function 0DH), SMARTDrive
     writes all write-behind data to the physical disk. This is a synchronous
     operation -- SMARTDrive does not give up control until all data has been
     written. Because of this feature, disk defragmenting programs and other
     utilities (such as Chkdsk) do not get the benefit of write-behind caching,
     but this feature provides safety because this is a common way to "commit
     files" (that is, to make sure that all writes have been completed) under
     MS-DOS. A number of applications force a system reboot, and they generally
     issue a disk reset prior to jumping to FFFF:0.

   - If a block is older than 5 seconds, it is written to the physical disk.

  NOTE: SMARTDrive cannot flush its buffers when exiting Windows if you are
  running a version of QEMM earlier than 6.02. Earlier versions of QEMM trap
  the INT 2Fh shutdown broadcast. After exiting Windows in this configuration,
  SMARTDrive does not increase its cache size to the size prior to starting
  Windows, nor is the cache flushed.

4. SMARTDrive 4.0 implements a shrink algorithm that frees memory for Windows
  that is similar to the one in SMARTDrive 3.x. The difference is that
  SMARTDrive 4.0 watches for the Windows startup broadcast while SMARTDrive 3.x
  provides an IOCTL interface. The net effect is identical but the SMARTDrive
  4.0 code is much simpler. When you exit Windows, the process is reversed and
  the memory is reacquired by SMARTDrive 4.0.

Testing the Performance of SMARTDrive 4.0
-----------------------------------------

1. Hard disk performance tests do not produce representative results because
  they often use the disk-reset function. These are designed to test the
  physical performance of the disk, not the disk cache. Disk defragmenting
  programs and other utilities that directly manipulate the disk (such as
  CHKDSK) also issue a disk reset to make sure that the data is really written
  to the disk. These does not show performance gains with write-behind caching.

2. Cache size. SMARTDrive automatically determines a reasonable cache size based
  on the amount of free extended memory when it initially loads. Any tests
  should load SMARTDrive with the cache size specified on the command line. A
  small cache does not perform as well as a large cache.

3. Windows startup speed is not a good test of SMARTDrive's performance because
  the shrink algorithm causes the cache to be flushed.

Double Buffering and Bus Masters
--------------------------------

Certain disk controllers support a concept called bus mastering. This is where
the actual disk controller takes over the bus in order to transfer data to or
from system RAM. Some SCSI controllers have this feature. A problem occurs when
running in the virtual 8086 mode that Windows 3.0 and 3.1 virtual machines
provide. Memory managers such as QEMM and EMM386.EXE also use virtual 8086 mode.
The read or write address that is passed to MS-DOS is often not the same as the
actual physical memory address. This can cause data to be read from the wrong
location or cause data to be written to the wrong address, which in turn can
cause erratic system behavior, general protection faults, and the system to stop
responding (hang).

Microsoft created a standard called Virtual DMA Services, which provides an
interface that allows these bus-master controllers to get the correct address
and avoid the problems mentioned above. However, some older bus- master
controller cards do not support this standard. To allow SMARTDrive to work with
these older bus mastering cards, a feature has been added to SMARTDrive that
provides a memory buffer that has the same physical and virtual addresses. This
avoids the system instability problem at the cost of 2.5K of conventional memory
and a small amount of performance (the cost of moving the data to and from the
buffer.) To use this feature, place the following line in the CONFIG.SYS file:

  DEVICE=SMARTDRV.EXE /DOUBLE_BUFFER+

NOTE: This line does not install the cache, only the double-buffer driver; the
cache must be installed in the AUTOEXEC.BAT file.

Most disk controllers do not need double buffering. This includes all MFM, RLL,
and IDE controllers as well as many ESDI and SCSI devices. The Windows 3.1 Setup
program will not install the double buffer driver in most cases. In the cases
where Setup is unable to determine if double buffering is needed or not, it will
install the driver based on the reasoning that it is better to error on the side
of safety.

A feature has been added to SMARTDrive to help determine if double buffering is
unneeded and allow removal of the driver. Once the system is running with
SMARTDrive loaded, type "SMARTDRV" (without quotation marks) at the MS-DOS
command prompt. The following will appear:

  Copyright 1991,1992 Microsoft Corp.

  Cache size: 1,048,576 bytes
  Cache size while running Windows: 1,048,576 bytes

               Disk Caching Status

  drive   read cache   write cache   buffering
  --------------------------------------------
  A:       yes           no           no
  B:       yes           no           no
  C:       yes           yes          yes
  D:       yes           yes          -

      Microsoft SMARTDrive Disk Cache version 4.00

  For help, type "Smartdrv /?".

NOTE: The double buffer driver must be loaded for SMARTDrive to determine if
there is a need for buffering. If the double buffer driver is not loaded, all
entries in the buffering column read "no."

To determine if double buffering is required, look at the column labeled
buffering. For each drive that is being cached, it can have one of three values:
yes, no, or -. "Yes" indicates that double buffering is needed and being
performed; "no" indicates that buffering is not needed. "-" indicates that
SMARTDrive has not yet determined the necessity of double buffering.If the
buffering column has all "no" entries in it, the double buffer driver is
unneeded and can be safely removed from the CONFIG.SYS file.

Additional query words: 3.10 3.1 SMARTDRV.EXE smart drive 3.11

======================================================================
Keywords          :  
Technology        : kbAudDeveloper kbWin3xSearch kbWFWSearch kbZNotKeyword3 kbWin310 kbWin311 kbWFW310
Version           : WINDOWS:3.1,3.11

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.