Clockwise, a real-time file system, for Linux documentation

# The Clockwise real-time file server installation manual

Clockwise currently runs on a 200MHz Pentium-Pro, with Linux 2.2.1. It is able to schedule Seagate Cheetah disks (although I have available the settings for Quantum Atlas-II disks). I use NCR53C875 Ultra-Wide SCSI controllers to connect the disks.

- Install Linux 2.2.1 on a machine and configure the machine such that Clockwise can use a free SCSI controller and disks. I.e. use a seperate disk and controller for the root partition.
- Patch Linux 2.2.1 with this patch file. This patch contains fixes for the standard NCR SCSI driver and it installs code that allows Clockwise to retrieve the physical address of a virtual address.
- Install and build the latest Clockwise version and compile the tree. Some utilities assume that ATM is available. If this is not the case, building the utilities will fail.
- Make sure that the device driver number 60 is free (for both the character and block devices).
- Install Clockwise in the kernel and make it available for yourself:
  - insmod $CW/cw/driver/clockwise.o
  - mknod /dev/clockwise c 60 255
  $CW represents the base Clockwise directory.
- Inform Clockwise of the scheduling parameters. If you use Seagate Cheetahs, you can use the distributed numbers:
  - $CW/cwgeom/cwgeom -v -g st19101w
  If you use a different disk you need to construct this file yourself. If you need to do this, I appreciate it if you can send me the scheduling files so I can add them to the distribution.
- Install superblocks on the Clockwise disks. NOTE THAT THIS WILL DESTROY ANY EXISTING FILE SYSTEM ON THE DISKS!!! To write a superblock to a four disk configuration (e.g. on /dev/sd[b-e]) use:
  - $CW/cwsb/cwwsb /dev/sdb 0 0 0 2048 8600 0 0xF
  - $CW/cwsb/cwwsb /dev/sdc 0 0 1 2048 8600 0 0xF
  - $CW/cwsb/cwwsb /dev/sdd 0 0 2 2048 8600 0 0xF
  - $CW/cwsb/cwwsb /dev/sde 0 0 3 2048 8600 0 0xF
  This writes superblocks to all disks so that the the FTAB and FDISK are on logical disk 0, block 0, /dev/sdb is logical disk 0, /dev/sdc is logical disk 1 (etc), each disk uses a block size of 2048 sectors of 512 bytes and there are 8600 blocks of 2048 sectors available. The last two parameters represent a bitmap of all disks.
- Construct a configuration file that represents your Clockwise hardware. The file $CW/cwd/config represents my environment: /dev/sd[b-e] are 4 Seagate Cheetahs on two NCR SCSI controllers. In my case /dev/sda is a private SCSI disk on a free SCSI controller.
- Start the Clockwise deamons:
  - $CW/cwd/cwd -f config
  This utility will fork a deamon for each disk and finally tell all disk deamons to start serving requests.
- If all is well, Clockwise now runs.
- To verify this, try to allocate a dynamic partition:
  - $CW/cw/cwreserve usr0 100 1 0 0xF 0
  This command creates a dynamic partition under the name usr0, it has a size of 100 dynamic partition blocks (of 2048 sectors), each disk has 1 consecutive dynamic partition block (so, block 0 is on disk 0, block 1 is on disk 1, etc.) and all disks are to be used during the reservation.
- The dynamic partition can now be listed with:
  - $CW/cwls/cwls
  - $CW/cwusage/cwusage
  The dynamic partition can now be made available to Linux:
  - mkdir /dev/cw_dir
  - mknod /dev/cw_dir/b_usr0 b 60 0
  - mknod /dev/cw_dir/c_usr0 c 60 0
  The minor device 0 shows up in cwls.
- To install and mount an EXT2 file system in the created dynamic partition, use:
  - mkfs /dev/cw_dir/b_usr0
  - mkdir /mnt/usr0
  - mount /dev/cw_dir/b_usr0 /mnt/usr0

At this point, you are in business and you can create dynamic partitions for real-time transfers. The directory $CW/videofs contains a bunch of examples and utilities to play or record continuous media streams.