F11ACP Performance Measurements for RSX-11M Joseph S. Sventek Computer Science & Mathematics Department Lawrence Berkeley Laboratory Berkeley, CA 94720 One of the many questions presented to an RSX-11M system generator during Phase II of SYSGEN is: >* 11. FCP desired (Type for explanation) [D: MIDDLE] [S]: >; >; Five FCP's are supported by SYSGEN. They are: >; >; Non-multiheader - Minimum functionality (Size: 2K) >; Small - Full functionality, heavily overlayed (2.25K) >; Middle - Default, optimized for RMS, open/close envir. (5.2K) >; Large - Optimized for all applications (6.7K) >; PLAS - Fastest possible, optimized for create/delete (10.1K) >; Little in the way of direct information concerning performance vs. memory occupancy is provided, other than the terse one-liners above. Thus, one is forced to rely upon the intuition that the larger ACP's should perform better, since less time is spent bringing in the appropriate overlay. As a result, the system generator usually opts for as large an ACP as the system can tolerate in hopes of maximizing system performance. In order to truly "maximize system performance", a metric is needed to permit comparison of the performance of systems which are identical except for the inclusion of different ACP options. Due to the vastly different hardware configurations which populate the RSX-11M community, it is difficult to devise metrics which give accurate absolute measures; even so, one should be able to provide quantitative relative measures on a particular machine, and thereby aid the system generator in the choice of the option most appropriate to the particular system. The metric for ACP effectiveness used in this paper is based upon the following two principles: 1. The effectiveness of an ACP is large if the time necessary to perform a given benchmark is small. Symbolically, effectiveness ~ 1 / time 2. The ACP effectiveness is large if the size of the GEN partition is large. Symbolically, effectiveness ~ size(GEN) where size(GEN) = total memory - (size(RSX_EXEC) + size(ACP)). -1- Combining these two relationships, the effectiveness metric is defined as effectiveness ~ size(GEN) / time In the limit where the total memory of the system is large (eg. 1 MB 11/70), the ACP effectiveness should be dominated by the 1/time term, since different sized ACP's will have little effect upon size of the GEN partition. It is difficult to determine the constant of proportionality to arrive at an absolute effectiveness, but taking the ratio of one ACP's effectiveness to some standard ACP's effectiveness permits the determination of the relative effectiveness. Since the MIDDLE ACP is the default ACP for mapped systems, all effectivenesses listed in the tables and plotted in the figures are relative to the effectiveness of a system with a single copy of the MIDDLE ACP. This metric has been used to compare several RSX-11M v.3.2 systems with different ACP options included. The hardware configuration for the tests was an 11/34A CPU, 124KW of core memory, and an AED controller driving two AMPEX DM980 80-MB storage modules. The AED controller makes each storage module look like a 67MB RP03. Two benchmark scripts were run on the otherwise quiescent systems: 1. DCHECK.CMD - Simultaneous wildcard PIP directory listings of the two disks are performed. This simply tests the directory access portion of the ACP's. 2. DWRITE.CMD - Several different PIP commands are performed simultaneously on the two disks, which is meant to exercise most of the overlays of the ACP's. Appendix A may be consulted for the exact contents of these command files. In all cases, DP0: was the system disk, with 4490 files in 180 UIC's occupying 127000 blocks; DP1: was identical to DP0:. In order to calculate the effectiveness of the ACP's, it is necessary to calculate the size of the resulting GEN partition. For the measurements described in this paper, the following partitions made up the RSX Executive: EXEC 120000 LDRPAR 2500 DRVPAR 2000 TTPAR 20000 SYSPAR 10000 This corresponds to a 20K executive, one disk driver, a 4KW full-duplex terminal driver, and space for MCR... and the task loader. The system is then completed by inclusion of the particular ACP option, leaving the remainder of memory to the GEN partition. -2- Four ACP's were tested in various configurations: 1. MD1 - this is the ACP one gets when MIDDLE is specified to the SYSGEN question quoted above. This is usually the default ACP for mapped systems. 2. LG1 - the ACP one gets when the answer to question 11 is LARGE. 3. RO2 - the ACP one gets when the answer to question 11 is PLAS. 4. CO1 - this is a core-only ACP which was derived from [1,24]fcpco0bld.cmd and [1,24]fcpcorbld.odl. The files [1,24]fcpco1bld.cmd and [1,24]fcpco1bld.odl are provided in appendix B. Tables I and II present the data for the two benchmarks executing on systems with various ACP options. (Figures I and II are pictorial representations of the tables.) The first four rows of the tables present the data for systems which contain a single copy of the relevant ACP. Two relative effectivenesses are displayed: one for a 124KW 11/34, and a second assuming 512KW of memory, as in a 1MB 11/70. The total memory size affects the size of the GEN partition, and the "11/70" column is included to show that the relative effectiveness is dominated by the 1/time term. Two interesting trends can be observed from the data: 1. For DWRITE, which is the more realistic of the two scripts, it is the case that the order of effectiveness is MD1 < LG1 < RO2. On an 18-bit machine, CO1 is actually more effective than RO2, while the opposite is true on a 22-bit machine. 2. For DCHECK, the resident overlaid ACP is actually slower than the disk overlaid ones, since it must dynamically map itself to its data buffers. There have long been rumors that RSX-11M systems perform better when each disk drive has a dedicated ACP. When a single ACP is servicing multiple disks, much of the directory context of one disk is lost if the ACP needs to service one of the other disks, with the result that when attention is returned to the original disk, that context must be re-established via extra disk activity. By dedicating an ACP/disk, this loss of context can be avoided. To test this hypothesis, four more systems were built, each with an ACP per disk drive, using MD1, LG1, RO2 and CO1, respectively. The second four rows of tables I and II show the results of the measurements on these systems. The message from these measurements is clear: it is much more effective to dedicate an ACP per disk, even on 18-bit machines. On 18-bit machines, 2 copies of CO1 is more effective than RO2, while the -3- reverse is true for 22-bit machines. In the case of DCHECK, it is still the case that the resident overlaid system is slower than the others. Even though this metric indicates that it is more effective to use the extra memory for additional ACP's (due to the increased speed of execution), owners of 18-bit machines may still balk at dedicating ~30000 bytes of memory for the file system, since the GEN partition can become intolerably small. The only way in which multiple ACP's may appeal to these owners is if the memory cost/ACP becomes small. This can be achieved by building a multi-user F11ACP. A multi-user task is one in which the pure code and pure data have been segregated from the impure code and data; the resulting read-only segment is mapped by a separate APR. In this way, many copies of the read-write portion of the task can be simultaneously active, mapped over a single copy of the read-only segment. If the size of the read-only segment is represented by RO and that of the read-write is RW, then the memory savings by building the task multi-user is n * (RW + RO) - (RO + n * RW) = (n - 1) * RO where n is the number of copies of the task that are simultaneously active. An article by Eric Levy of JPL in the February 1981 Multi-tasker described the steps necessary to build a multi-user task for use under RSX-11M. The most recent distribution of the Software Tools Virtual Operating System (Spring 1981 RSX Symposium Tape) provides an utility (MUBLD) which performs the operations described in the article. To build a multi-user version of F11ACP, one must: 1. Patch TKB as per the June 1981 Software Dispatch for RSX-11M+ on pages 123-126. These patches permit TKB to correctly build a priveleged multi-user task. Note that the correct checksums for the ".POB" modules are P2POP.POB 21461 SGALO.POB 22734 2. Assemble FCPMU.MAC provided in appendix C below. These PSECT declarations (which were provided by Larry Baker of USGS, Menlo Park, CA) serve to define the read-only psects. 3. TKB @FCPMUBLD, using the patched version of TKB and the files FCPMUBLD.CMD and FCPMUBLD.ODL provided in appendix C below. This results in a task image FCPMU.TSK which has the RO code collected together and mapped by APR6. This task image is input for MUBLD. (The warning messages from TKB concerning multiply defined PSECTS can be safely ignored.) 4. If it has not yet been done, build the software tools system from the Spring 1981 RSX SIG Tape. After the -4- TOOLGEN is completed, it is nessary to fix a bug in MUBLD with the following sequence of commands: >"Get a copy of [307,33]mubld.w into the current directory" >SHL % ar xv mubld.w % ar xv mubld.r domu % ed domu : /PIDSIZE/ : s//20/p : w : q % ar uv mubld.r domu % rc -v mubld.r % logout > 5. >SHL -C MUBLD -V FCP Mubld extracts the RO code into a resident-library style task image named rofcp.tsk. It also generates another task image mufcp.tsk which has the RW code and is mapped over a common partition named ROFCP for its RO code. 6. Look at fcpmu.map for the sizes of the two sections of code: R/W MEM LIMITS: 120000 135623 015624 07060. R-O MEM LIMITS: 140000 157277 017300 07872. (These are the numbers one should see if the EXTSCT's in fcpmubld.cmd are as they appear in appendix C. As such the size of the RO segment is 017300 and that of the RW is 015700.) 7. Armed with the sizes of the two code sections, VMR a new system image with the appropriately sized partitions. For example, if two ACP's are desired, with the device name of the second disk being DB1:, then the appropriate VMR commands are: SET /MAIN=ROFCP:*:173:COM INS ROFCP SET /MAIN=FCPPAR:*:336:SYS ! 33600 = 2 * 15700 INS MUFCP/TASK=F11ACP/CKP=NO INS MUFCP/TASK=DB01F1/CKP=NO The copies of mufcp must go into a system partition, as tasks in a TASK partition cannot be mapped over a common region. 8. After the initial boot of the system, execute >FIX F11ACP >FIX DB01F1 before saving the system. VMR does not permit fixing of -5- tasks in SYS partitions. 9. The normal mount of DB1: in startup.cmd will cause DB01F1 to be used, since the order of ACP precedence when mounting a disk is: i. If /ACP=XXXXXX in MOU command, use XXXXXX ii. If this is ddnn: and DDNNF1 is installed, use DDNNF1 iii. Use F11ACP A system with two copies of the multi-user ACP was generated, and the same two benchmarks were run. The results of these benchmarks can be found in the ninth row of tables I and II. Since MUFCP is simply a multi-user version of FCPCO1, it is not surprising that the execution times are identical with the system with two copies of CO1. It is also apparent that the MUFCP system is the most effective ACP option in nearly every situation. The author's standard system is now the multi-user system, and has been running for more than one month without any problems. In conclusion, it is true that in multiple disk systems (program development engines), an ACP/disk provides a large performance enhancement over a single, large ACP, whether disk or memory overlaid. On memory-tight systems, this can be achieved by building a multi-user version of F11ACP. -6- Table I ACP Effectiveness for DWRITE.CMD Benchmark System Size(bytes) Time(secs) 11/34 eff. 11/70 eff. ---------------------------------------------------------------- MD1 | 10304 | 651 | 1.000 | 1.000 LG1 | 13312 | 624 | 1.026 | 1.040 RO2 | 20480 | 591 | 1.042 | 1.090 CO1 | 14912 | 599 | 1.060 | 1.082 2 * MD1 | 20608 | 401 | 1.534 | 1.606 2 * LG1 | 26624 | 354 | 1.679 | 1.808 2 * RO2 | 40960 | 318 | 1.713 | 1.982 2 * CO1 | 29824 | 333 | 1.752 | 1.915 2 * MU1 | 22080 | 334 | 1.827 | 1.925 Table II ACP Effectiveness for DCHECK.CMD Benchmark System Size(bytes) Time(secs) 11/34 eff. 11/70 eff. ---------------------------------------------------------------- MD1 | 10304 | 971 | 1.000 | 1.000 LG1 | 13312 | 971 | 0.984 | 0.997 RO2 | 20480 | 991 | 0.927 | 0.969 CO1 | 14912 | 971 | 0.975 | 0.995 2 * MD1 | 20608 | 325 | 2.824 | 2.956 2 * LG1 | 26624 | 324 | 2.737 | 2.946 2 * RO2 | 40960 | 349 | 2.328 | 2.693 2 * CO1 | 29824 | 326 | 2.669 | 2.918 2 * MU1 | 22080 | 325 | 2.800 | 2.951 -7- Appendix A - Benchmark Command Files DWRITE.CMD INSTALL $PIP/TASK=...P0P INSTALL $PIP/TASK=...P1P TIME .XQT P0P @DP0:[2,154]P0P .XQT P1P @DP1:[2,154]P1P .WAIT ...P0P .WAIT ...P1P TIME REMOVE ...P0P REMOVE ...P1P DCHECK.CMD INSTALL $PIP/TASK=...P0P INSTALL $PIP/TASK=...P1P TIME .XQT P0P NL:=DP0:[*,*]/LI .XQT P1P NL:=DP1:[*,*]/LI .WAIT ...P0P .WAIT ...P1P TIME REMOVE ...P0P REMOVE ...P1P DP0:[2,154]P0P.CMD DP0:[2,377]=DP0:[307,31]*.*;* NL:=DP0:[2,377]/FU NL:=DP0:[2,377]*.CMD DP0:[2,377]*.*/PU DP0:[2,377]*.*;1=DP0:[2,377]*.*;*/RE DP0:[2,377]*.*;*/DE DP1:[2,154]P1P.CMD DP1:[2,377]=DP1:[307,31]*.*;* NL:=DP1:[2,377]/FU NL:=DP1:[2,377]*.CMD DP1:[2,377]*.*/PU DP1:[2,377]*.*;1=DP1:[2,377]*.*;*/RE DP1:[2,377]*.*;*/DE -8- Appendix B - Files for Building FCPCO1 FCPCO1BLD.CMD ; F C P C O 1 B L D . C M D ; ; BUILD CORE RESIDENT F11ACP (FCPCO1) FOR MAPPED RSX11M ; NAME - FCPCO1 ; .ODL - FCPCORBLD.ODL ; SIZE - 6. KW ; FCB LIST - 32 FCB'S ; SEPARATE DIRECTORY BUFFERS - 3 ; ; TK:[1,54]FCPCO1/AL/AC/MM/-FP,MP:[1,34]FCPCO1/-SP=FCPCO1BLD.ODL/MP ; ; OPTIONS INPUT ; TASK=F11ACP STACK=32 UNITS=1 UIC=[1,1] PRI=149 PAR=FCPPAR:0:0 ; PAR=FCPPAR:0:30100 TSKV=.SSTVC:7 ; ; THE MAXIMUM SIZE FOR THIS FCP IS 12K. ONLY THE DIRECTORY BUFFER, HOWEVER, ; CAN LIE IN THE LAST 4K (APR7). THE FOLLOWING BUFFERS MUST BE IN THE LOWER 8K ; (APR5 AND APR6). ; ; ; ALLOCATE A SEPARATE BUFFER FOR INDEX FILE BITMAP ; ; EXTSCT=$$BUF0:1006 ; ; DEFAULT IS ONE BUFFER SHARED BETWEEN BITMAP AND FILE HEADERS (AND DIRECTORY ; BLOCKS). THIS ACTION WILL SPEED UP APPLICATIONS THAT DO A LOT OF FILE ; CREATION AND DELETION. ; ; ; ; ALLOCATE A SEPARATE BUFFER FOR FILE HEADERS ; EXTSCT=$$BUF1:1006 ; ; DEFAULT FROM ASSEMBLY IS ONE BUFFER SHARED BETWEEN FILE HEADERS ; AND DIRECTORY BLOCKS (AND INDEX FILE BITMAP). THIS ACTION WILL BENEFIT ANY ; APPLICATION THAT CAN AFFORD THE MEMORY. ; ; ; ; ALLOCATE PRIVATE FCB POOL SPACE ; ; EACH FCB = 52 OCTAL -9- ; ; EXTSCT=$$AFR1:XXXX ; ; ,WHERE XXXX = N*52 (OCTAL) AND N = NUMBER FCB'S DESIRED ; EXTSCT=$$AFR1:2500 ; ; ; *** NOTE *** ; THE PRECEDING BUFFERS AND EXTSCT'S MUST LIE IN ADDRESS SPACE BELOW APR7. ; DO NOT EXTSCT PAST 157777 OCTAL!! ; ; THE DIRECTORY BUFFER BELOW MAY LIE, IN WHOLE OR IN PART, WITHIN THE ADDRESS ; SPACE OF APR7. CONSEQUENTLY, THE MAXIMUM ALLOWABLE FOR THIS EXTSCT IS ; <3.5K + N> OR <17000 (OCTAL) + N> WHERE N REPRESENTS THE AMOUNT OF SPACE UNDER ; APR7 THAT IS STILL AVAILABLE AFTER THE PRECEDING EXTSCT'S HAVE BEEN APPLIED. ; ; ; ALLOCATE ADDITIONAL BUFFER SPACE FOR DIRECTORY BLOCKS ; ; EXTSCT=$$BUF3:XXXX ; ; ,WHERE XXXX REPRESENTS 1000 FOR EACH 'ADDITIONAL' BLOCK ; DESIRED. ; ; DEFAULT FROM ASSEMBLY IS ONE DIRECTORY BLOCK. NOTE THAT THIS ; ACTION SHOULD BE IN ADDITION TO ALLOCATING A SEPARATE BUFFER ; FOR FILE HEADERS. ALLOCATING ADDITIONAL BUFFER SPACE FOR DIRECTORY ; BLOCKS WITHOUT A SEPARATE BUFFER FOR FILE HEADERS DOES NOT ; ACCOMPLISH VERY MUCH. ; EXTSCT=$$BUF3:2000 ; ; ; / FCPCO1BLD.ODL ; F C P C O R B L D . O D L ; ; OVERLAY DESCRIPTION FOR CORE RESIDENT F11ACP - RSX11M/M+ ; ; MINIMUM SIZE -- 6.0/6.25 K PHYSICAL ; MAXIMUM SIZE -- 12 K PHYSICAL ; ; THIS ODL BUILDS A CORE RESIDENT F11ACP. IT DOES NOT REQUIRE PLAS. ; IT IS INTENDED FOR USE IN SYSTEMS WITHOUT PLAS OR WITH APPLICATIONS ; THAT WANT A SMALL RESIDENT F11ACP (THIS ODL DOES NOT REQUIRE ; A SEPARATE BUFFER FOR FILE HEADERS LIKE RESIDENT OVERLAY ODL'S). ; NOTE THAT IT PROVIDES A MINIMUM OF SPACE AVAILABLE FOR FCB'S. ; -10- ; ; STRUCTURE: ; APR5 - ROOT - CODE ; APR6 - ROOT - CODE ; APR6 - CO-TREE - BUFFERS ; APR7 - CO-TREE - DIRECTORY BUFFER (MAY OVERMAP I/O PAGE) ; ; .NAME F11ACP .ROOT F11ACP-FCPROT-FCPCO ; ; THE FOLLOWING MODULES MUST BE IN THE ROOT FCPROT: .FCTR FCP/LB:F11ACP:F11CM:SMCOM:DISPAT-FCPRT2 FCPRT2: .FCTR FCP/LB:ARWVB:OVERR:FCPGBL-CODE ; ; CO-TREE CONTAINING DIRECTORY BUFFER OVERMAPS APR7 FCPCO: .FCTR FCP/LB:F11BUF:DIRBUF:INIT ; ; THESE ARE THE REST OF THE MODULES FOR FCP CODE: .FCTR FCP/LB:ALLOC:BLXIO:CKSUM:CLACC:CLDAC:CLDIR:CRFID-CODXX1 CODXX1: .FCTR FCP/LB:DARITH:DLMRK:DRACC:DREOF:DREX:DRGET:DRINI-CODXX2 CODXX2: .FCTR FCP/LB:DRPAC:DRSEF:DRVLB:DRWRT:DWPND:FDRMV:FNDNM-CODXX3 CODXX3: .FCTR FCP/LB:GTFID:GTMAP:INFCB:INWIN:LOCAT:MPHDR:MPVBN-CODXX4 CODXX4: .FCTR FCP/LB:NXHDR:PROCK:RDHDR:RLEAS:RLFCB:RWVB:RWVBL:RW1LB-CODXX5 CODXX5: .FCTR FCP/LB:SCFAC:SCFCB:SMALC:SMNXB:SMRVB:SMSCN:WACCK:WITRN-CODXX6 CODXX6: .FCTR FCP/LB:WRHDR:WTRN1:ACCESS:ATCTL:CRFIL:DATIM:DEACC:ENTNM-CODXX7 CODXX7: .FCTR FCP/LB:EXCMP:EXCOM:EXTEN:RATCM:RDATT:RWATT:WATCM:WRATT-CODXX8 CODXX8: .FCTR FCP/LB:CLDEL:CLATT:CLCRE:CLEXT:CLFCB:CLNUP:DLBLK:DLFIL-CODXX9 CODXX9: .FCTR FCP/LB:DLHDR:DRALC:DRCPY:DREXT:EXTHD:IXEXT:RMVNM:SMDEL-CODX10 CODX10: .FCTR FCP/LB:TRUNC:DMOUNT-[1,1]EXELIB/LB-[1,54]RSX11M.STB/SS ; .END -11- Appendix C - Files for Building Multi-user F11ACP FCPMU.MAC .title fcpmu .ident /1.0/ .psect access ro,i,lcl,rel,con .psect alloc ro,i,lcl,rel,con .psect atctl ro,i,lcl,rel,con .psect blxio ro,i,lcl,rel,con .psect cksum ro,i,lcl,rel,con .psect clatt ro,i,lcl,rel,con .psect clcre ro,i,lcl,rel,con .psect cldac ro,i,lcl,rel,con .psect cldel ro,i,lcl,rel,con .psect cldir ro,i,lcl,rel,con .psect clext ro,i,lcl,rel,con .psect clfcb ro,i,lcl,rel,con .psect clnup ro,i,lcl,rel,con .psect crfid ro,i,lcl,rel,con .psect crfil ro,i,lcl,rel,con .psect datim ro,i,lcl,rel,con .psect deacc rw,i,lcl,rel,con .psect dispat rw,i,lcl,rel,con .psect dlblk ro,i,lcl,rel,con .psect dlfil ro,i,lcl,rel,con .psect dlhdr ro,i,lcl,rel,con .psect dlmrk ro,i,lcl,rel,con .psect dmount ro,i,lcl,rel,con .psect dracc ro,i,lcl,rel,con .psect dralc ro,i,lcl,rel,con .psect drcpy rw,i,lcl,rel,con .psect dreof ro,i,lcl,rel,con .psect drex ro,i,lcl,rel,con .psect drext rw,i,lcl,rel,con .psect drget ro,i,lcl,rel,con .psect drini ro,i,lcl,rel,con .psect drpac ro,i,lcl,rel,con .psect drsef ro,i,lcl,rel,con .psect drvlb ro,i,lcl,rel,con .psect drwrt ro,i,lcl,rel,con .psect dwpnd ro,i,lcl,rel,con .psect entnm ro,i,lcl,rel,con .psect excmp ro,i,lcl,rel,con .psect excom ro,i,lcl,rel,con .psect exten ro,i,lcl,rel,con .psect exthd ro,i,lcl,rel,con .psect fcpgbl ro,i,lcl,rel,con .psect fdrmv ro,i,lcl,rel,con .psect fndnm ro,i,lcl,rel,con .psect f11acp ro,i,lcl,rel,con .psect f11cm rw,i,lcl,rel,con .psect gtfid ro,i,lcl,rel,con .psect gtmap ro,i,lcl,rel,con -12- .psect infcb ro,i,lcl,rel,con .psect inwin rw,i,lcl,rel,con .psect ixext ro,i,lcl,rel,con .psect locat rw,i,lcl,rel,con .psect mphdr ro,i,lcl,rel,con .psect mpvbn ro,i,lcl,rel,con .psect nxhdr ro,i,lcl,rel,con .psect prock ro,i,lcl,rel,con .psect ratcm ro,i,lcl,rel,con .psect rdatt ro,i,lcl,rel,con .psect rdhdr ro,i,lcl,rel,con .psect rleas ro,i,lcl,rel,con .psect rlfcb ro,i,lcl,rel,con .psect rmvnm ro,i,lcl,rel,con .psect rwatt ro,i,lcl,rel,con .psect rwvb ro,i,lcl,rel,con .psect rwvbl rw,i,lcl,rel,con .psect rw1lb rw,i,lcl,rel,con .psect scfac ro,i,lcl,rel,con .psect scfcb ro,i,lcl,rel,con .psect smalc ro,i,lcl,rel,con .psect smcom rw,i,lcl,rel,con .psect smdel ro,i,lcl,rel,con .psect smnxb ro,i,lcl,rel,con .psect smrvb ro,i,lcl,rel,con .psect smscn ro,i,lcl,rel,con .psect trunc ro,i,lcl,rel,con .psect wacck ro,i,lcl,rel,con .psect watcm ro,i,lcl,rel,con .psect witrn ro,i,lcl,rel,con .psect wratt ro,i,lcl,rel,con .psect wrhdr ro,i,lcl,rel,con .psect wtrn1 rw,i,lcl,rel,con .psect dirbuf ro,i,lcl,rel,con .psect f11buf ro,i,lcl,rel,con .psect init ro,i,lcl,rel,con .psect $$afr1 rw,i,lcl,rel,con .psect $$afr2 rw,i,lcl,rel,con .psect $$buf0 rw,i,lcl,rel,con .psect $$buf1 rw,i,lcl,rel,con .psect $$buf2 rw,i,lcl,rel,con .psect $$buf3 rw,i,lcl,rel,con .psect $$buf4 rw,i,lcl,rel,con .psect $$buf5 rw,i,lcl,rel,con .end FCPMUBLD.CMD ; ; f c p m u b l d . c m d ; -13- ; build multi-user f11acp task (fcpmu) for rsx-11m ; this task image can then be munged with mubld to generate the images ; necessary for installation in an rsx-11m system ; name - fcpmu ; .odl - fcpmubld.odl ; size - ??? kw ; fcb list - 32. fcb's ; separate directory buffer - 3 blocks ; ; fcpmu/al/ac/mm/-fp/mu,fcpmu/-sp= @fcpmubld.odl ; ; options input ; task=f11acp stack=32 units=1 uic=[1,1] pri=149 par=fcppar:0:0 tskv=.sstvc:7 ; ; the maximum size for this fcp is 12k. only the directory buffer, however, ; can lie in the last 4k (apr7). the following buffers must be in the lower ; 8k (apr5 and apr6) ; ; ; allocate a separate buffer for index file bitmap ; ; extsct=$$buf0:1006 ; ; default is one buffer shared between bitmap and file headers (and directory ; blocks). this action will speed up applications that do a lot of file ; creation and deletion. ; ; ; ; allocate a separate buffer for file headers ; extsct=$$buf1:1006 ; ; default from assembly is one buffer shared between fil headers ; and directory blocks (and index file bitmap). this action will benefit any ; application that can afford the memory ; ; ; ; allocate private fcb pool space ; ; each fcb = 52 octal ; ; extsct=$$afr1:xxxx ; ; ,where xxxx = n * 52 (octal) and n = number of fcb's desired ; -14- extsct=$$afr1:2500 ; ; ; *** note *** ; the preceding buffers and extsct's must lie in address space below apr7. ; do not extsct past 157777 octal!! ; ; the directory buffer below may lie, in whole or in part, within the ; address space of apr7. consequently, the maximum allowable for this extsct ; is <3.5k + n> or <17000 (octal) + n> where n represents the amount of space ; under apr7 that is still available after the preceding extsct's have been ; applied. ; ; ; allocate additional buffer space for directory blocks ; ; extsct=$$buf3:xxxx ; ; ,where xxxx represents 1000 for each 'additional' block desired. ; ; default from assembly is one directory block. note that this ; action should be in addition to allocating a separate buffer for file ; headers. allocating additional buffer space for directory blocks ; without a separate buffer for file headers does not accomplish very much. ; extsct=$$buf3:2000 ; ; ; / FCPMUBLD.ODL ; f c p m u b l d . o d l ; ; note: this is not a real .odl file, but is referenced in the build ; files in a line as @fcpmubld.odl ; fcpmu [1,24]fcp/lb:f11acp:f11cm:smcom:dispat:arwvb:overr:fcpgbl [1,24]fcp/lb:f11buf:dirbuf:init [1,24]fcp/lb:alloc:blxio:cksum:clacc:cldac:cldir:crfid [1,24]fcp/lb:darith:dlmrk:dracc:dreof:drex:drget:drini [1,24]fcp/lb:drpac:drsef:drvlb:drwrt:dwpnd:fdrmv:fndnm [1,24]fcp/lb:gtfid:gtmap:infcb:inwin:locat:mphdr:mpvbn [1,24]fcp/lb:nxhdr:prock:rdhdr:rleas:rlfcb:rwvb:rwvbl:rw1lb [1,24]fcp/lb:scfac:scfcb:smalc:smnxb:smrvb:smscn:wacck:witrn [1,24]fcp/lb:wrhdr:wtrn1:access:atctl:crfil:datim:deacc:entnm [1,24]fcp/lb:excmp:excom:exten:ratcm:rdatt:rwatt:watcm:wratt [1,24]fcp/lb:cldel:clatt:clcre:clext:clfcb:clnup:dlblk:dlfil [1,24]fcp/lb:dlhdr:dralc:drcpy:drext:exthd:ixext:rmvnm:smdel [1,24]fcp/lb:trunc:dmount [1,1]exelib/lb,[1,54]rsx11m.stb/ss / -15-