[comp.sys.amiga] Overhead And Implementation Notes of ASDG RRD

perry@well.UUCP (01/26/87)

	Some poeple have asked for more information about the ASDG Recoverable
Ram Disk internals,  specifically how  implementation  details  affect  memory
usage and performance.

	First,  the ASDG RRD is a track disk driver. This differs considerable
from the implementation of RAM:. See Figure 1 for a quick block diagram.

	Floppies and VD0:

	Exec Proper <---------> File Handler <---------> TrackDisk Device

	RAM:

        Exec Proper <---------> Ram Handler

	(Figure 1)

	This fundemental difference between the implementation of VD0: and RAM:
leads to many differences in other ways:

	(1) VD0:  is  totally  compatible  with  AmigaDOS since it is dependent
	    upon the  very same  FileHandler to  implement a file system as the
	    floppies use.

	    Because the RamHandler has  to provide all of the outward function-
	    ality  of  a FileHandler,  this  functionality was reimplemented in
	    the RamHandler. Unfortunately, there are still some incompatibilit-
	    ies between RamHandler and FileHandler which manifest themselves as
	    bugs such as the 1.2 ``can't  delete a directory from the workbench
	    bug.''

	(2) Speed of RAM: to RAM:  transfers  are much faster than VD0: to VD0:
	    since the ram:  device  simply  passes  blocks around inside itself
	    while vd0: must  pass blocks to the filehandler and then accept the
	    blocks from the filehandler in return.

	(3) RAM: can sometimes use space more  efficiently (and sometime less).
	    This is what Kim@Amdahl   brought up. He said that for 60 files and
	    some number of  directories, 128K  of memory seemed to disappear as
	    ``overhead.''

	    The ASDG RRD allocates a track at a time. If the AmigaDOS FileHand-
	    ler says ``allocate  exactly 1 sector per track'' a full 8K will be
	    allocated. This space is *not* lost however  since  the FileHandler
	    ultimately gets around to allocating other sectors per track.

	    Remember, asdg.vdisk.device  does  make decisions over where to put
	    data on the logical  disk, it is only  responsible  for making sure
	    a block request made by the FileHandler is satisfied.

	    In Kim's case, AmigaDOS has obviously made some choices about where
	    to put blocks which resulted in tracks not being completely consum-
	    ed before other tracks were allocated.

 	    This apparent ``overhead'' disappears  as  the RRD becomes full and
	    tracks become used completely.

	    What follows is a more complete study of memory overhead.

	    A completely empty vd0:

		6K used by driver code.
		4K used by AmigaDOS to deal with driver.
		8K used by root track (only preallocated track).
		7K used by miscellaneous data.

		For a total of 25K of memory gone just to give you an empty
		disk. RAM: immediately after initialization consumes 9K.

		Of this, the 8K for the root track is not overhead since you're
		going to need  the  space anyway. This leaves 8K above the RAM:
		device in overhead.

	    Each track consumes:

		142 bytes  of overhead. This includes a checksum for every sec-
		tor and some magic cookies I need.

	    My studies indicate the AmigaDOS   makes  much better block assign-
	    ments for small  files than large  ones. That is:  an 8K files will
	    cause 8K worth of  memory  to be used by VD0: while a 55K file will
	    cause 65K worth of memory to  be used assuming  you're copying onto
	    a completely empty file system. Note (again) that you will get full
	    use out of the ``missing'' 10K. Later, when  FileHandler puts other
	    things on the mostly empty tracks it's allocated.

	    On the whole, while VD0: may  use  more memory early on, the memory
	    utilzation  of VD0: as the device becomes  full approaches the opt-
	    imal amount needed to store the data itself.

	A while back when Fred Fish posted Rick Spanbauer's Disk Benchmark res-
	ults, the write speed on VD0: was slower  than  the read speed. This is
	because during writes a checksum of each sector written is taken.

	The checksum for each sector  is  useful  in finding single byte or bit
	errors which  would  otherwize  cause you to use corrupted data without
	knowing it. And then again,  most  operations on the ram disk are reads
	anyway (with no performance degradation).

	I might add that on a  68010  Amiga,  the performance was about 5Kbytes
	per second faster than Fred's results. I guess this is the influence of
	tight loops (very tight, 2 instructions) running faster.

Perry S. Kivolowitz
ASDG Incorporated
(201) 540-9670

kim@amdahl.UUCP (01/28/87)

In article <2482@well.UUCP>, perry@well.UUCP (Perry S. Kivolowitz) writes:
> 
>         Some poeple have asked for more information about the ASDG Recoverable
> Ram Disk internals,  specifically how  implementation  details  affect  memory
> usage and performance.
>
> [ discussion of RRD's memory utilization, performance, etc. ]

Thanks for the info, Perry.  To use memory most efficiently, and have
the best performance, it would seem that one should:

1 - Set HighCyl in the Mountlist such that one's normal ram load just
    about fills VD0: (rather than just setting it to give the largest
    possible vdisk).

2 - Use VD0: for more or less "permanent" files, and use the normal
    RAM: device for the transient stuff (like intermediate compiler
    files, and such).

/kim

-- 
UUCP:  kim@amdahl.amdahl.com
  or:  {sun,decwrl,hplabs,pyramid,ihnp4,seismo,oliveb,cbosgd}!amdahl!kim
DDD:   408-746-8462
USPS:  Amdahl Corp.  M/S 249,  1250 E. Arques Av,  Sunnyvale, CA 94086
CIS:   76535,25

[  Any thoughts or opinions which may or may not have been expressed  ]
[  herein are my own.  They are not necessarily those of my employer. ]