M K S E T The MKSET utility is designed to control MK (SCSI) tape behavior when the $QIO IO$_SKIPFILE function is used. In the past, OpenVMS has always skipped files on tape by using skip record commands to actually do the motion. This has essentially simulated skips by filemark, and while it functions correctly, this sort of skipping is sometimes quite slow compared with what a tape can achieve by using its skip-filemarks commands. In V7.1, OpenVMS allows the tape driver to be set up to use skip by filemarks where the user permits. Modern tape drives keep track of the end of logical data, so MKdriver can use these facilities to position correctly if these features exist on a tape drive. (If they do not, the old skip by records skipping is used.) The skipping by filemarks, when used, will correctly sense end of tape provided the tape ends in double EOF. Utilities such as Backup and file structured copy, which use ANSI formatted tape, need the end positioning to be set correctly and work fine with the new skip method. They already continue skip-file operations across null files if any such exist. Some third party utilities may, however, depend on the documented behavior of stopping a skip by files on double EOF marks on tape. To accommodate this, OpenVMS will by default assume the use of the old skip by records form of tape motion. Because this form of positioning may be as much as 100 times slower than skip by files, however, OpenVMS provides two additional features. 1. The magtape ACP and Backup will use an added function modifier in their IO$_SKIPFILE commands to tape (IO$M_ALLOWFAST) which will permit them to use the skip by filemarks command, which is usually faster. This modifier will also be transmitted across TMSCP if all systems are at the 7.1 level. 2. A new utility, MKSET, is provided in SYS$ETC to control behavior. It works by issuing an IO$_SETCHAR function to the local SCSI magtape, with a null P1 argument and one of three function modifiers: IO$M_ALLOWFAST_NEVER, ALLOWFAST_PER_IO, or IO$M_ALLOWFAST_ALWAYS. These are selected by the MKSET commands $ MKSET/PER_IO MKcuuu: $ MKSET/ALWAYS MKcuuu: $ MKSET/NEVER MKcuuu: which set the controls. (MKcuuu: means MK unit with controller letter c and unit number uuu:, such as MKB300: where controller letter is B and unit number is 300.) The settings have the following meanings: PER_IO This setting (the default) will allow an MK device to use the skip by filemarks where the drive supports it (it must be able to do read position and report blank check at end of data), and where the IO$M_ALLOWFAST function modifier is supplied with IO$_SKIPFILE. Otherwise the tape will skip files by skipping by records. ALWAYS This setting allows an MK device to skip files by filemarks (the new method) instead of by skipping records provided the tape supports it, and without needing any modification to the IO$_SKIPFILE function. NEVER Never use skip by filemarks but always skip by skipping records, regardless of whether the tape drive supports skip by filemarks and regardless of whether the IO$_SKIPFILE function has the modifier IO$M_ALLOWFAST or not. If using a utility that depends on the old semantics of skipping with skip-records, you may need to use this, since it will also cause Backup or COPY to use the older positioning. This utility must be run on the system to which the locally direct attached SCSI magtape is connected. The utility will modify a device's characteristics even if the device is allocated to a different user. Note that if a tape does NOT support skip by filemarks, the older skip by records method will be used. If errors occur during skip by filemarks, the MKdriver support is turned off, so that the old algorithm is used when a device appears to have difficulty with the SCSI commands needed to use skip by filemarks positioning correctly. If the "skip by filemarks supported" flag within MKdriver is cleared, it remains cleared until a reboot. The MKSET settings only permit (or fail to permit) use of the skip by filemarks algorithm where it is marked as supported. Whenever skip by filemarks is used for IO$_SKIPFILE, for whatever reason, the MT$M_FASTSKIP_USED flag will be set to 1 in the DEVDEPEND longword in the MK UCB and will be returned in the second longword in the IOSB for that operation. Thus an application can use this information to determine which skip algorithm was used, which may permit it to adjust its positioning appropriately. The MKSET image requires PHY_IO privilege to be used, and should be set up as a foreign command: $ MKSET :== $SYS$ETC:MKSET prior to use. As a bit of extra information, if MKSET had a separate CLD file it would look something like this: ! Set up MK: skipfile behavior. DEFINE VERB MKSET Image sys$etc:MKSET parameter p1,prompt="MKn:",value(required,type=$device),label=UNIT qualifier ALWAYS ! Always means we always skip by filemarks if the drive allows qualifier PER_IO ! Per_io means we skip files by skip-record by default, but may use ! skip by files if the function modifier is present qualifier NEVER ! Never means never use skip by filemarks, regardless. Disallow any2 (ALWAYS, PER_IO, NEVER)