NASD Programmer's Documentation
Digital Unix implementation notes

The Digital Unix NASD port is a fairly complete port. At the time this document is being written (2 February 1999), it is the most complete port of the NASD tree.

Supported optional features

  • NASD-NFS client (only available with Digital Unix source license)
  • Idle times are supported with NASD_CMU_PDL enabled (see below)
  • Drive may run at user-level, or be compiled into the kernel
  • NFS server may run at user-level, or be compiled into the kernel

  • Other notes

  • physclone (utils/clone/physclone) will zero the disklabel of the target before copying the disk
  • See Compiling NASD for instructions on compiling NASD on Digital Unix
  • See Compiling NASD into the dux kernel for details on compiling NASD functionality into the Digital Unix kernel
  • The NASD port assumes Digital Unix on the Alpha AXP. It has not been tested on other hardware platforms.
  • On AXP processors, NASD uses on-chip cycle counters for timing.

  • NASD_CMU_PDL

    The Parallel Data Lab at Carnegie Mellon University has built a set of support functionality into the Digital Unix kernel, and interfaces to this functionality are provided in a separate library, libpdl.a. If this functionality is available to you, you can set the location of the library and include files by including the necessary link commands for the library in the ARCHLIBS definition that applies to your platform in NASD_site.def, and the necessary commands to find the include files in SARCHDEFINES in that same file. You should also be sure that NASD_CMU_PDL is defined to 1 in NASD_site.def if you have this support enabled, or that it is defined to 0 if you do not.


    nasd_od_kio.c

    When compiled into the dux kernel, the NASD drive uses nasd_od_kio.c as its I/O module. This module fully supports all I/O module functionality.

    Every nasd_k_flush_check_millliseconds milliseconds, a thread will wake up and look at the number of dirty pages. If the number of dirty pages exceeds nasd_k_dirty_percent percent of the available cache blocks, it will awaken another thread which will flush dirty blocks from the cache. Every nasd_k_flush_interval wakeups, the wakeup of this flush thread will occur regardless of how much of the cache is dirty.

    When the drive is compiled into the dux kernel, the data page of each cache block is literally a page of memory, and the corresponding vm_page_t is also stored. This allows the kernel to coalesce I/Os quickly and efficiently by linking these pages together and hanging them off a struct buf which will be passed to BDEVSW_STRATEGY() in order to perform the I/O.


    <--- ---> ^<br>|<br>|
    Adding control objects Linux implementation notes NASD Programmer's Documentation