Notes (by Eric Auer Jul+Aug/2004) on the caches which you can find on: http://www.bookcase.com/library/software/msdos.util.disk.html Please send feedback to eric*coli.uni-sb.de (replace * by @). ------------ Those caches might be useful if your PC is too old for modern 32bit caches (DR-DOS NWCACHE, MS SMARTDrive, and of course LBAcache). Some caches have very special features: COMBI provides both a RAMDISK and a CACHE, using a shared memory pool. 35SEC optimizes floppy access by maintaining a disk image in RAM. I_CACHE can cache CD-ROM and CCACHE includes a reentrant SCSI driver, allowing concurrent access. You should assume that read-ahead / track buffers help a lot for floppy but that the effect for harddisks is small - unless you have an old harddisk with "real" CHS geometry and slow rotation speed. Some caches are free, others are shareware. Some caches support delayed / staged / pooled writes in various styles: The delay is often recommended to be 1 or 5 seconds, the upper bound being up to 13 seconds and in one case even 1 hour. The written data is first held in RAM and then, often combined into whole- track writes, sent to disk at a later moment, when the system is idle. NWCACHE supports read-ahead and configurable delayed write, while SMARTDRV only allows little configuration of delayed write and LBAcache does not offer delayed write at all yet (but has read-ahead, in the optional TICKLE module). Older SMARTDRV cached BIOS disk services, newer versions cache both BIOS and DOS disk services, allowing them to cache non-BIOS FAT disks (e.g. ZIP) and giving them good hints about data type (FAT/directory versus data sectors). The caches described below are often from the pre-DOS 5 era, so instead of UMB or HMA, some of them use shadow RAM and "high memory". If the initial summary is too short, see the verbose / raw notes below! #COMBI - up to 14 MB XMS, provides cache and *ramdisk*, free clusters on the ramdisk are used to hold cache data. Dynamically creates appropriate errors if you try to read free clusters or both disk and cache run full. Can shrink itself automatically when more XMS is needed. You can FREEZE useful data into the cache. DELAYED WRITES supported, default delay is 1 second (older versions: 1/4 second). *Background Write* sends the write command to disk and then returns to the caller: The disk can fetch the data from a local buffer, new access is, if needed, delayed until the buffer is free again (the modern free DOS UDMA.SYS driver has this, too). No FLOPPY cache. Price: 30 USD (version 1.13, 1993) *QUICKCACHE II 4.20 - includes archiving / *sort* (with disk swap, can do case insensitive and 7 bit sort and use modified collate order) / system info / memory test / file finder software and verbose manuals. Up to 1.6 MB EMS or XMS, designed as a turbo version of DOS BUFFERS (using hash tables to find sectors). Exotic memory allocation (high/shadow/BIOS/...) possible. Can do track READ-AHEAD and track WRITE COMBINING (writes are delayed until you start accessing another track), optionally also cylinder write combining ("this track, all heads"). DELAYED WRITES supported (max. age of pending writes recommended 1..5 seconds, up to 1 hour possible). You can FREEZE (lock) metadata and files into the cache. Extensive API hooks int 13 functions 20-38 hex. Supports 8086/286/386/VM86-386+ CPU. Up to 2 physical harddisks, default "weight" of sectors max 30, at least 10 for metadata, depending on LRU measurement. Can poll PC XT (<= 360k) floppy if you have no CHANGE LINE. Adds int 21.0c and ctrl-c/ctrl-break to the usual (program exit, int 21.0d...) delayed write *boundaries*. Price: 25 USD (version 4.20, 1990) *HYPERDISK 4.77 (http://www.hyperware.com) - includes PC XT RAM refresh optimizer, keyboard typematic rate set / bigger buffer tool, screen saver / boss key and text mode accel driver. Includes documentation of the API. Up to 32 (63?) MB EMS/XMS. Supports shadow / high RAM. Can resize. Win3.x aware. HOTKEYs supported. Can do DELAYED WRITES. Quite configurable. Can check floppy at intervals if you have no CHANGE LINE. Long multi-sector access can be ignored by cache (useful if far below 1 MB cache allocated). Staged write delay default 1 second. Age limit for buffers possible. For use with DR DOS EMM386 and Lotus 123r3, you have to *Lock the used XMS* to avoid deadlock / swapping to disk. HOTKEYs supported. Delayed write problems (EMS/XMS/disk) lead to trash/retry now/retry later prompt, which defaults to retry later if user fails to answer. Works with BIOS extenders like OnTrack / SpeedStor. All modern CHS geometries *and* "64 head 4096 cylinder" API of SpeedStor/DiskManager/AMIBIOS/OPTiBIOS supported. Can work with floppy disk drives without a CHANGE LINE (checksums FAT). Tries to predict "trashing/overcommitment" situations and temporarily disables cache fills e.g. if you copy huge files. Up to 10 floppy and 10 harddisk drives cacheable. Price: 20 USD (version 4.77, 1998). *EMMCACHE 1.10 - a simple EMS cache, supports up to 128 CHS harddisks (functions 0..3,8), max size 32 MB. Small but effective (according to Barry Simon's test). No FLOPPY support. Price: FREE (version 1.10, 1987). *CACHE2 - extremely simple cache, only single sector access cached, only uses DOS RAM for buffers, small, only one harddisk, no FLOPPY. Price: FREE (version 2, 1986). -DCACHE - open source, limited to physical harddisks below 256 MB size, similar to EMMCACHE, max size 8 MB, open source, no FLOPPY. Price: FREE (1988). -PC-KWIK 3.19 - not very well documented, version with DELAYED WRITES has much higher price. Can use EMS, XMS or raw/DOS RAM. Price: 20-80 USD (1988). *ADCACHE 1.22 - supports DELAYED WRITES (max 60 seconds, recommended 0.2 seconds delay), supports READ-AHEAD (1/4 track recommended), no FLOPPY cache, max size 32 MB EMS. Do not use with EMM386s which can swap to disk (obvious). Max 2 physical harddisks caches, small. Price: 15 USD (version 1.22, 1990). #35SEC 1.20 - special floppy only cache, with HOTKEYs. Copies a floppy contents in whole tracks (faster) to/from RAM, so you could say it has READ-AHEAD and WRITE COMBINING. Works in the background, but not Win3.x compatible (opening/closing *DOS boxes* and using 386 enhanced mode can use (disk) swapping which interferes with the cache). Price: 10 USD (version 1.20, 1995). #I_CACHE 1.21 - can cache CD-ROM and harddisks. VDS/VDMA support. Not compatible with Win3.x 32 bit file access. Use with InDOSPolling=1 for Win3.2 386 enhanced mode. Max 16 MB XMS. Can work with floppy with no CHANGE LINE, by checking for *serno changes* or, if none present, assuming a disk change if the floppy is *idle* for more than 2.5 seconds. Uses LRU queue against trashing. Supports WRITE COMBINING to write as much as possible of a track at a time. HOTKEYs (?) and popups possible. Price: 25 USD (version 1.21, 1996). #CCACHE - includes special *reentrant SCSI driver* which allowes concurrent queued access for all ASPI drives with FAT12/FAT16 partitions. Can use EMS (4.0: no page frame needed) or XMS or raw int 15 memory. Up to 64 MB. Supports DELAYED WRITES. Dirty buffer age (up to 13 seconds) is processed. Has FREEZE support, just *enable freeze mode, access the data in question, return to normal mode*. Configurable READ-AHEAD. Floppy media check slow on Novell (and DR?) DOS. Not DesqView compatible! Delayed writes not QEMM 7.3 stealth mode compatible! Not compatible to Win3.x 32 bit file access, but compatible to 32 bit disk access. Not compatible to vfat Win3.x driver. Use for Win3.x 386 enhanced mode: VirtualHDIrq=false OverlappedIO=true ReflectDOSInt2a=true and for delayed writes: INT28Critical=true. Maximum delay for writes is 30 seconds. Delay *boundaries*: Program exit, return to prompt, int 21.0d, int 21.68, even int 21.6c "commit" flag for single file open processed. Price: 30 USD (1996). ------------ Summary (# = has unique features, + = includes bonus programs, $ = raw int 15 memory supported as well), excluding DCACHE/PC-KWIK (because they seem to be not really useful...). Note that 35SEC is ONLY for floppy. Unique: COMBI includes RAMDISK, ICACHE can cache CD-ROM (PS: CDRCACHE is a free CD-ROM ONLY cache for 386+/XMS), CCACHE has reentrant ASPI driver. SMARTDRV supports CD-ROM, too. Some caches can use hardware EMS and run on all 8086/8088 or newer CPUs (EMM386 can only run on 386 or newer, but there is a slow EMM286 XMS to EMS converter somewhere...). Name Delayed Write Read- Hot- Freeze Floppy/need Cost max. RAM Write Combine Ahead key no changel. USD MBy/type(s) CACHE2 - - - - - -/- 0 0.5 DOS(!) EMMCACHE - - - - - -/- 0 32 EMS ADCACHE yes - yes - - -/- 15 32 EMS QUICKCA+ yes yes yes - yes yes/yes 25 1.6 EMS/XMS Combi can run on a 286 CPU: COMBI# yes ??? ??? - - -/- 30 14 XMS All caches below this line need a 386 or newer CPU: HYPERDS+ yes ??? yes yes - yes/yes 20 63? EMS/XMS CCACHE# yes ??? yes - yes yes/??? 30 64 EMS/XMS$ I_CACHE# yes yes yes yes - yes/yes 25 16 XMS 35SEC# yes yes yes yes - yes/??? 10 1.5 ??? Some more modern caches: SMARTDR# yes ??? ??? - - yes/??? ??? 32? EMS/XMS? NWCACHE yes yes yes - - yes/yes ??? 8? EMS/XMS$ LBACACHE - ... yes - yes yes/... 0 32 XMS SMARTDRV and NWCACHE are part of MS and Novell/Caldera/DR DOS respectively. A 286+ version of CCACHE is available as separate download somewhere. Freeze feature of LBAcache got a CCACHE style user interface in 9/2004. Write combine and "need no floppy change line" can be implemented if there is serious interest. LBAcache can cache CHS and LBA harddisks (max 2 TB size per disk, max 8 disks). SMARTDRV can cache - in newer versions - all FAT disks of all sizes at DOS driver level but also has some support for BIOS disk access caching (afaik). More or less all other abovementioned caches do only BIOS disk access caching. As best free general purpose caches, I recommend EMMCACHE (EMS) and LBAcache (XMS). Best shareware caches seem to be COMBI, HYPERDISK, I_CACHE, CCACHE. ------------ Detailed notes follow, feel free to stop reading now ;-)... ------------ COMBI cache: 8k+1block low 16by/block hma, 1/8-14mb xms, 0.5-4k block size both ramdisk and cache 8 harddisks delayed writes shareware russia 30 usd ... bigger blocks mean bigger granularity but longer writes ... not only 1sec delayed write but also background write avail - ask disk to write at once, but already return to caller ... 1991-1993 version 1.13 Vadim V. Vlasov ... DOS 3.30-6.00 ... intercepts XMS alloc/realloc for autoshrink ... test and stats program with sources included ... djgpp-ld loves reading uninitialized sectors ... qemm/win386 conflict in hma and alloc ... ramdisk returns sector not found if reading sector which is free according to fat ... write error dynamically created if ramdisk and cache are both full ... freezable to keep valuable data cached ... VERIFY performance improved in 1.10 ... write delay was 5 ticks, now is 18 ticks ... flushes on ctrl-alt-del ... no floppy/386/ems ... size does not really change speed ... not ptsdos compatible ... ------------ QUICKCACHE II 4.20: Includes QBACK archiving, QSORT sort, QMAP system info (for support requests... phone support is 15 USD / 15 min but after registering for 25 USD you get 15 min without extra charge...), QMEMTST RAM tester, QLOC file finder, 6400 lines manuals, verbose bug/fix log. This 1988-1990 cache is for DOS 2-4, so it can manually allocate HMA/UMB or use the "brand new" 386MAX (emm386). EMS or XMS can be used for the cache, and the "write combining" or "read ahead" buffers can be put into a mapped EMS page. You have to install from floppy and the installer personalizes things, benchmarks the optimal buffer sizes, etc. (it assumes that your CHS geometry is real hardware geometry: recommended buffer size is 1 or at least 0.55 tracks). Delayed writes are possible, default delay is 1 second. If one delayed sector write happens, the whole track or cylinder ("all heads for this track") can be collected and flushed at the same time. For "CP/M software compatibility", BIOS memory size (40[13]) allocation is used in parallel (!) to DOS memory allocation of the same area. QCACHE is more made for free raw high memory than for actual UMBs, but can of course use low RAM, too. The cache has 8086 / 286 (using keyb. reset to leave protected mode after XMS copy) / 386 / 386 VM86 modes. It is suggested to allocate 1/3 of the cache as "locked" pool, and there is a tool which can force the cache to keep dir/fat data in that pool. Otherwise, you can use weighting: default is dir/fat being 10x "heavier" than normal data, maximum weight 30, frequent use increases weight. The API of this cache (sample Pascal program included) is located at int 13 functions 0x21-0x30 (0x20-0x38!?). Flushing happens at program exit, return to prompt. hotkey, no real disk change detection seems to happen. Default settings: 90 sectors (20-3200, max 1.6 MB, 18 by/sec tables), no flush interval (max 1 hour, for buffered write, 1-5 secs recommended), no read ahead, flush at least 3200 dirty sectors for each flush event, buffered read and write. Int 21.0c (flush+read stdin) is treated as error/disk change sign, as is ctrl-c/break. Buffered read is read-ahead (or "around") inside current track. Buffered write is limted to one track, so it is generally safe. You can lock both "all metadata for X:" and single files into the "lock pool" (min 40 sectors normal cache must stay free). Stats show histogram of sector usage frequency. Cache translates drive letters into "cache 1 or 2 whole int 13 harddisks", and caches floppy as well. Hash table reduces search time to "check 3 sectors", much faster than BUFFERS of DOS. "Sophisticated [LRU measurement]". Has on the fly reconfig. Speed: 14x floppy, 4x harddisk (55 msec access) claimed. For PC-/MS-DOS 2/3/4. Supports polling (for PC/XT floppy w/o change line). Now supports 32mb+ drives. Only supports 512 byte/phys sector. QSORT allows case-insensitive and 7bit sort and collating sequence changes, max record length is 254 char (truncates longer) and max input size is 50% of free disk space... uses n-way merge after 128 slot quicksort presorts. QMAP works like better MEM versions, and QMEMTST crashes (if UMB/HMA used?). ------------ HyperDisk (www.hyperware.com has version 4.77 in 2003), a share disk cache, sample options for XMS w/o hotkey: C:4096 CW:0 XIH K:- OR- ... http://www.hyperware.com/xdos.html / http://www.hyperware.com/products.htm and mainly http://www.hyperware.com/speedkit.html ... EXE and SYS version, uses 0-45k DOS RAM, delayed writing for 386+ computers (checks for C-A-D), can load into "shadow RAM" or "high memory", Windows compatible, resizeable. Extra tools: refresh optimizer (2-10% faster PC XT RAM), keyboard typematic rate setup, sticky shift keys, bigger keyboard buffer size, BIOS text mode accel with "screen saver" and "boss key". Docs include API information. Cache has max 64k used buffers, max 64k modified buffers, and the 8 flags "staged floppy/harddisk * write/writeverify" (= 4), 2*"reserved", 2*enable. The cache can monitor a bit on an I/O port (for UPS power fail signalling). There are hotkeys to enable/disable caching for harddisk/floppy and for staged writing... and of course a "write dirty buffers back to disk" key. Floppy changes can be made beeping and update can happen all N timer ticks. Even "write because system is idle" can beep. Cache size cannot become bigger than initial size without re-loading TSR, but can be changed in that range "to and fro" from the prompt while loaded. NeAT 286/386 chipset "hardware UMBs" / shadow RAM are supported. Can even avoid those for transfer buffers and only load the rest into UMBs. Caching is int 13h based and you can override geometry. Staged write delay defaults to 1 second, minimum 0.5 seconds. Floppy is checked to be still the same every 3 (configurable) seconds. One buffer is 1 track in size, or less. Default "write if idle" is "write LRU-wise oldest data until max 75% buffers are dirty" (configurable percentage). Read-ahead is on by default. You can make access bigger than N sectors bypass the cache (useful if cache is only 32-384k), but default is cache all access. You can give an upper age limit for buffers, but this is off by default. Has "QEMM virtual interrupt stealthing" and uses XMS (locked or not locked). Locking can be needed to avoid DRDOS EMM386 / Lotus123r3 memory movement or even swapping to disk of XMS areas. XMS transfer can be done real mode, protected mode, or both. DMA boundary crossing check can be disabled. Drives of <= 360k size sometimes have no disk change detection. Hotkey can be trapped via int 15h (scancode check) or int 9h (keyb IRQ). Default is to "update modified buffers" if int 21.0d disk reset is called. Can use XMS and int 15h extended memory. (XMS called expanded memory here?). If delayed write encounters an error, it beeps 3x and displays - if in text mode - a message skip/retry/abort (if no answer: retry after 4sec). Use abort only for floppy - it discards dirty data - skip means retry later. Error can be EMS error, int 15h extended memory error or drive error. Using FASTOPEN is not recommended (unreliable, bad performance, confuses (?) caches...). You can force write back of dirty buffer to happen on every program load. OnTrack and SpeedStor compatible. Okay to load before Stacker, Doublespace, Drivespace, SuperStor. Up to 10 harddisks + 10 floppies, only 512 bytes per sector, 8 .. 63 sectors per track, harddisks with max 256 heads / 1024 cyl or alternatively 64 head / 4096 cyl (SpeedStor, DiskManager, AMI/OPTI BIOS). Floppy can have 8/9/15 sectors per track 5.25" or 9/18 sectors/track 3.5". Media changes for floppy are detected by FAT checksumming if no change line. History: "Belady replacement algorithm 1967 ... baseline to compare to ... "The Greatest Forward Distance" ... theoretical algorithm only because it has to predict future events ...". Other: LeastFreq.Used, LeastRecentlyUsed. LRU is 8% worse but less CPU-intensive. Usual associativity is 1/2/4 way. Cache "trashing" (access many sectors *once*) / "overcommitment" is detected by HyperDisk with help of "a proprietary combination of linear and random access predictors to identify the onset of the condition" in their modified LRU algorithm. Maximum cache size is 63 MB. Version 4.77: 20 USD, Nov 1998. Version 4.21 was of 1991. ------------ cache2: 24-124, default 64, sectors. only single sector access cached, DOS, Quick and Dirty Software Inc., Steven Holzer, PCmag 8/1985-1986. FREE. 1k. emmcache: EMC110, Expanded Memory Disk Cache 1.10, EMS, max 32 MB, BIOS, default 512*16k, max 3k+(128by/16k) RAM, write-through, sectors organized in groups, disks 0x80-0xff, CHS, uses int 13.8 to get geometry and as install check, functions 1/2/3 hooked, others purge cache before chaining. can wrap tracks, as can DOS 3.3, double element size as in 1.00 to save DOS RAM. Freeware. Cleveland State Univ, Ohio, Frank Lozier 1986-1987. 3k. dcache: PC Mag 7 17 open source. low or EMS. one harddisk. CHS. functions 1/2/3 hooked, others purge cache before chaining. Cached if read size max 1 page (16k), if write crosses page boundary, purge cache. Binary 2k. cyl*max_head max 64k (adc missing). If write hit, do some updating. linear/sec_per_track max 64k (limited conversion: max 2 GB) Lookup: a = (linear&~7)|(linear>>16), if table[(a>>2)&mask] == a, found. table has only words, element size 4k, init refuses using > 256 MB disk. Cache size must be 16k * power of 2, max 8 MB. Takes 1.2k of RAM. Unloadable. Freeware. Ziff Communications Co. Douglas Boling 1988. pckwk319: All writes copy to cache. Reads of all sizes are cached. All writes happen at once. Detects floppy change but not for DISKCOPY. binary 20k. 20/50, with delayed writes 80 USD. Multisoft. 1988. quickcache: 340k installed size. Includes backup, sort, sysinfo, findfile, memtest (all fast). DOCS ONLY AVAILABLE AFTER INSTALL. Glassel. 1990. *** SEE ABOVE *** Shareware 25 USD. adcache: awesome disk cache 1.22 delayed write 0.0-60.0 sec, e.g. 0.2 sec. Not recommended with EMS emulators, certainly not with DISK SWAPPING ones. All cached drives must have same sec/track. Only for harddisks. Read-ahead default 1/4 track, N sectors, max 1 track. Size max 32 MB EMS, default 0.5 MB. Can use 32bit memcopy or 16bit copy. Cache index can be in EMS. Index is 1-2k/MB. Caches at most drives 0x80 and 0x81. Binary is 8k (gzipped: 5k). Shareware 15 USD. David Rifkind. 1990 combi: *** SEE ABOVE *** binary 8k sys, shareware, 1993. 35sec: 35 seconds package 1.20 ... 3k RAM, 4k binary. Not for Win32, not for DOS apps in Win, because no VMM (swap) access possible during IRQ. Win refuses to lock XMS, so better use w/o Win. 386+ for easier Asm. Very special floppy cache. Copies whole floppy to RAM in background, syncs changes back to floppy in background. Uses whole-track reads. Hotkey: copy whole floppy to/from buffer, if "from" possible to copy only changes. Only FAT. Only 10% CPU in background. Shareware 10 USD. Pavel Machek, Praha, CZ. 1995. i_cache: 1.21 quite big (228k zip contents, sys 33k, exe 48k, vdma 2k...) Local buffer size /t:sectors, power of 2 in 4..64 range, best 16, worst 4, default 8/16/32 depending on longest track. Some A20 handling, although no disk buffers in HMA expected. Can be a device based CD-ROM cache between real device and MSCDEX! Can merge SEVERAL CD-ROM to 1 cached multi-unit. Load either as CD-ROM or as harddisk cache. Load *after* CD/ASPI drivers. Load main driver *after* IC_LOW driver. Uses XMS. For (E)IDE/MO/... disk. IC_LOW is track buffer in low RAM (2-32k). VDMA checks for VDMA/VDS. Supports delayed writes. Ctrl-Alt-Del hooked. Not compatible with Win32 32BitFileAccess. Written in MASM 6.10 ... 386+ DOS 4+, min 1 MB ext. mem. Use with VERIFY OFF and buffers=10, stacks=9,256 ... for *** system.ini [386Enh] InDosPolling=1 ***. No locking used for XMS. 0.1-16 MB XMS. Do *not* use with vfat/vcache drivers -> just disable 32BitFileAccess. Resizeable. Floppy with change line or with /L+ override. Max 20 CD-ROM. Max 26 drives cached. Initially 48k RAM, max 54k with 32k track buffer and 16 MB cache. LRU queue against trashing. Delayed write-cache normally off for removable disks. Writes are 1 track at a time, sorting the queue to achieve that. Keyboard/Mouse/... activity reduces write priority. Optionally blocks keyboard during delayed write or even all disk access. CD-ROM/DA/XA/I, photo-CD, HighSierra/ISO9660, optionally with CD-Player TSR, only HSG addressing / cooked (2k/sector) reads cached, interleave ok. Text and 16 color graphics mode popup abilities, e.g. for access errors. Extra MO/CD support limited to 0.5/1/2k sector size. Shrinks during Win. Staged disk write can sound an "update bell" every 15 (5-100) ticks, configurable. If on, also beeps for media change. If change-line req'ment is off, all non-access of > 2.5 sec is treated as floppy change if there is no serno, otherwise changes are detected by disk serno changes. Shareware 25 USD. Miles Pawski 1994-1996. hyperdisk spkt: 46k, whole ZIP contains 666k, shareware. 1995 *** SEE ABOVE (notes from mail to Johnson 12/2003) *** ccache: 18k floppy binary, 76k main binary. 3600 lines of documents. includes CCDISK reentrant SCSI driver (28k) for non-int13 (ASPI only) disks, if used with CONCACHE even with async i/o. Allocates ca. 500 bytes stack and 1 sector buffer per concurrency / drive. Phys block size 0.5k only, logical (-> BIOS param block) 0.5/1/2k supported. Detects DOS partition types 1/4/5/6 (CHS FAT12/FAT16). No removable media, no IOCTL. Just drive letters and sector I/O. CONCACHE can use UMB, XMS 2, EMS 4 (no page frame) or raw int 15 RAM. Resizable in EMS/XMS mode. Min 128k, multiple of 64k, max 64 MB. Delayed writes can be done concurrently with other DOS programs or access. Or use normal delayed writes or write through. Caches by drive letter. Each "arena" uses 1..64 * 16 bits bitmap, N*16kb arena. Buffer size 1-N sectors, usually 1. Uses int 15.90/91 and usually does not share it. Usually traps IRQ itself to avoid BIOS handling. Buffers can be allocated outside UMB if needed. Default buffer size 8k, more improves performance (allows longer accesses). Hashtable size user defineable. Stack-per-disk size defineable. Aging before writing wet / dirty buffers is 1-254 ticks. Uses int 21.440d/get device params. Freeze modes: Keep/no-new, and lock-what-gets-added-during-timespan. Configurable readahead. With FAQ text, about concurrency and about LRU being weak for cyclic access. Floppies tool routes floppy access to int 40, to keep int 13 concurrent accesses lower (only func. 0-4). Written in BC++ 4.0, MKS toolkit 4.1b, using Periscope (debugger) 5.40. TSR size usually 25-30k. Media check quirk makes floppy access slow in Novell DOS. Desqview crashes. Do not delay writes if using QEMM 7.3 stealth mode. Floppy thing can hang Win. No full EMS 4.0 during Win. 32bit Win32 file access is incompatible, but Win32 disk access is okay. Cache suggests wimping out if vfat.386 found in config. Novell Server program miscounts int 2a, possibly hanging. Try, for Win3.x: VirtualHDIrq=false OverlappedIO=true ReflectDOSInt2A=true (or alternatively INT28Critical=true - otherwise delayed writes impossible!) Everything is written after at most 30 seconds. Int 21.0d triggers all pending writes to be done at once, as well as int 21.68 commiting does. The int 21.6c open/commit flag is handled, writes passed on at once, but only for that file. Shareware 30 USD. horio shoichi, 1996. ------------ cacheart: Living with DOS: disk caches (Barry Simon, Capital PC Monitor 1987) Compares Emmcache, Lightning, Polyboost, Quickcache, Speedcache, PC-Kwik, Vcache. None of them delays writes, so they are safe... DOS itself can keep dirty buffers, though. All but Emmcache zap write if data unchanged. Max 16 MB XMS, 8 MB EMS... old RAM 200ns, newer 70-100ns... Lightning, PC-Kwik and Vcache have track readahead. Pro: can be faster unless fragmented. Con: bad if it hits bad sectors or clobbers cache. Polyboost, PC-Kwik, Vcache support XMS, take care of VDISK compatibility. Speedcache, Quickcache are devices, other are programs. BUFFERS=15-20 recommended (default 1-3), search is slow if too much. Reads of above 1 sector size do not use BUFFERS(!?). Lightning: DOS or EMS. Emmcache: EMS. Speedcache: DOS, EMS or hard EMS. Others: DOS, EMS or XMS. ??PC-Kwik /d- helps a lot on 286?? Polyboost caches only 1 harddisk per instance. Polyboost and Vcache also include TTY screen speedup -> set prices shown. Set also means extra floppy cache, taking extra memory. Typically 5k main cache programs, but some quite expensive. Emmcache: Free. Lightning: 50-90 USD. Polyboost: 80 USD. Quickcache: 50 USD Quickcache: 50 USD. Speedcache: 70 USD. Super PC-Kwik: 40/50/80 USD. (low RAM / normal / pro versions) Vcache: 50 USD. EMMCACHE: 3k + 16k/MB EMS , max 4 MB Lightning: 13k + 23k/MB EMS, max 1.5 MB. (2k+"25k/MB" DOS) Polyboost: 2k + 28k/MB EMS-or-XMS, max 2.2 MB. PC-Kwik: 13k + 0k/MB if EMS, max 1 MB. (25k + 14k/MB XMS) VCache: 4k + 18k/MB EMS-or-XMS, max 15 MB. (4k + "20k/MB" DOS) Speedcache: (7k + "32k/MB" DOS) Quickcache: (9k + "32k/MB" DOS) Speed test on 286 with hardware EMS (buffers 90 usually almost as 20): Sort 140k database: BUFFERS=3/20/90 19 seconds, caches 10-12 seconds Spellcheck 40k: BUFFERS: 38-43 sec, caches 32-38 sec. Convert 500k database: BUFFERS: 1550/784/814 sec, caches: below 621 sec: Emmc./Light./Poly. 735 Vc. 650, Quic. 704 sec Speedc. 1065 PC-Kwik 735/571 sec. (EMS/low RAM) MASM/link/... 100k: BUFFERS: 80-86 sec, caches: 73-75 (Poly: 77) sec. Write same at random: BUFFERS: 18-20 sec, cheat: 2-5 sec. other: 12-13. (all except Emmcache/Speedcache zap duplicate writes) Write random: BUFFERS: 18-20 sec, cached 11-13, RAMDISK and PC-Kwik only 5 sec! Where 2 times given for PC-Kwik: EMS/conv. RAM used. Copy to floppy: BUFFERS: 30-45 sec. caches: 27-31, PC-Kwik 41 sec. Floppy to floppy copy: BUFFERS: 64-70 sec (90 buffers: even 77 sec) ... cached: 61-64 sec, PC-Kwik 69 sec. Norton disk test HDD: BUFFERS: 500-604 (535) sec. RAMDISK: 20 sec. Q. 453 Emmc. 465. Light. 671 Poly. 476 Vc. 585 PC-Kwik 490/371, Speedc. 451 Norton disk test 1.2M: BUFFERS/Emmc./Poly./Speedc./Quickc.: 415-419 sec Light. 67 sec, Vcache/PC-Kwik 61 sec. Norton disk test 360k: BUFFERS/...: 89-91 sec, others 36-37 sec.