COMPILATION LISTING OF SEGMENT disk_meters Compiled by: Multics PL/I Compiler, Release 30, of February 16, 1988 Compiled at: Honeywell Bull, Phoenix AZ, SysM Compiled on: 08/08/88 1127.5 mst Mon Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Limited, 1984 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* *********************************************************** */ 8 9 10 11 12 /****^ HISTORY COMMENTS: 13* 1) change(86-01-16,Fawcett), approve(86-04-10,MCR7383), 14* audit(86-05-27,Wallman), install(86-07-18,MR12.0-1098): 15* Add support for subvolumes, 3380 and 3390. 16* 2) change(86-11-10,Fawcett), approve(86-11-10,MCR7125), 17* audit(87-01-08,Farley), install(87-01-09,MR12.0-1266): 18* Changed by Tom Oke to call get_vol_list as per documentation. 19* 3) change(86-11-10,Fawcett), approve(86-11-10,MCR7547), 20* audit(87-01-08,Farley), install(87-01-09,MR12.0-1266): 21* Changed to display subvolume devices correctly. 22* END HISTORY COMMENTS */ 23 24 25 /* Disk meter for optimizing disk system. */ 26 27 /* Rewritten Spring 1984 by Tom Oke. */ 28 /* Cleaned up for installation August 1984 by Chris Jones. */ 29 /* Format modifications and statistics correction October 1984 by Tom Oke. */ 30 /* Skip IO types without seeks in long mode. November 1984 by T. Oke. */ 31 /* November 1984 by T. Oke, major changes to printing and device selection to 32* utilize get_vol_list_ routine and select by logical, physical, drive and 33* subsystem. */ 34 35 /* format: style4,delnl,insnl,indattr,ifthen,dclind10 */ 36 37 disk_meters: 38 dskm: 39 proc; 40 41 dcl areas area based; 42 dcl arg char (arg_len) based (arg_ptr); 43 dcl arg_count fixed bin; 44 dcl arg_index fixed bin; 45 dcl arg_len fixed bin (21); 46 dcl arg_list_ptr ptr; 47 dcl arg_ptr ptr; 48 49 dcl ave_queue float bin (63); 50 dcl ave_seek float bin (63); 51 dcl buddy_pic picture "99"; 52 dcl channel_sum float bin (63); 53 dcl channel_time float bin (63); 54 dcl code fixed bin (35); 55 dcl copy_size fixed bin (19) static; 56 dcl date_time char (24); 57 dcl delta fixed bin (71); 58 dcl dev fixed bin; 59 dcl dev_pic picture "99"; 60 dcl disk_segp ptr static; 61 dcl disksp_static ptr static; 62 dcl edac_errors fixed bin; 63 dcl errors fixed bin; 64 dcl fdelta float bin (63); 65 dcl ferrors fixed bin; 66 dcl float_seconds float bin (27); 67 dcl float_seek float bin (63); 68 dcl i fixed bin; 69 dcl i_minutes fixed bin; 70 dcl i_seconds fixed bin; 71 dcl io_per_second float bin (27); 72 dcl io_per_second_per_drive 73 float bin (27); 74 dcl io_per_second_per_subsystem 75 float bin (27); 76 dcl j fixed bin; 77 dcl lv_ptr ptr static initial (null ()); 78 dcl MYNAME char (11) static options (constant) initial ("disk_meters"); 79 dcl odiskp ptr; 80 dcl odisksp ptr; 81 dcl odp ptr; 82 dcl old_clock fixed bin (71) static init (0); 83 dcl old_dev fixed bin; 84 dcl old_sx fixed bin; 85 dcl print_busy bit (1); 86 dcl print_channels bit (1); 87 dcl print_detail bit (1); 88 dcl print_drive bit (1); 89 dcl print_header bit (1); /* header */ 90 dcl print_io_rate bit (1); 91 dcl print_queue bit (1); 92 dcl print_subsys (32) bit (1); 93 dcl print_system bit (1); 94 dcl pv fixed bin; 95 dcl pv_name_max_space fixed bin; 96 dcl pv_ptr ptr static initial (null ()); 97 dcl queue_sum float bin (63); 98 dcl reset bit (1); 99 dcl rrset bit (1); 100 dcl save_clock fixed bin (71); 101 dcl seek_to_time float bin (63); 102 dcl seeks fixed bin (35); 103 dcl seek_sum float bin (63); 104 dcl selected_drive bit (1); /* true if any drive selected */ 105 dcl small_code fixed bin; 106 dcl sub_sys_limit fixed bin static; /* defined sub-sys */ 107 dcl subsys_name char (4); 108 dcl sx fixed bin; 109 dcl temp_segp ptr static initial (null ()); 110 /* pointer to temp seg */ 111 dcl total_seek float bin (63); 112 113 dcl io_name (0:6) char (6) static options (constant) 114 initial ("PageRd", "PageWt", "VtocRd", "VtocWt", "Test ", "BootRd", "BootWt"); 115 116 /* Name matching structures. */ 117 118 dcl match_count fixed bin; 119 dcl match_type fixed bin; /* type of name */ 120 dcl 1 match (64), 121 2 type fixed bin, 122 2 name char (32); 123 124 dcl PV fixed bin static options (constant) initial (1); 125 /* physical volume */ 126 dcl LV fixed bin static options (constant) initial (2); 127 /* logical volume */ 128 dcl DV fixed bin static options (constant) initial (3); 129 /* drive */ 130 dcl SY fixed bin static options (constant) initial (4); 131 /* subsys */ 132 133 dcl match_keys (4) char (16) static options (constant) 134 initial ("-logical_volume", "-physical_volume", "-device", "-subsystem"); 135 136 137 dcl seconds pic "99"; 138 dcl minutes pic "99"; 139 dcl hours pic "zzzzz9"; 140 141 /* Storage overlay of base of tempseg used to create initial "0" reading. */ 142 143 dcl seg_overlay (copy_size) bit (36) based (temp_segp); 144 145 dcl sys_info$max_seg_size fixed bin (35) ext static; 146 147 dcl error_table_$bad_arg fixed bin (35) ext; 148 dcl error_table_$badstar fixed bin (35) ext; 149 dcl error_table_$noarg fixed bin (35) ext; 150 dcl error_table_$too_many_names 151 fixed bin (35) ext; 152 dcl check_star_name_$entry entry (char (*), fixed bin (35)); 153 dcl clock_ entry returns (fixed bin (71)); 154 dcl com_err_ entry () options (variable); 155 dcl cu_$arg_count_rel entry (fixed bin, ptr, fixed bin (35)); 156 dcl cu_$arg_list_ptr entry (ptr); 157 dcl cu_$arg_ptr_rel entry (fixed bin, ptr, fixed bin (21), fixed bin (35), ptr); 158 dcl date_time_ entry (fixed bin (71), char (*)); 159 dcl get_temp_segment_ entry (char (*), ptr, fixed bin (35)); 160 dcl get_vol_list_ entry (ptr, ptr, ptr, char (8), fixed bin (35)); 161 dcl ioa_ entry () options (variable); 162 dcl ioa_$nnl entry () options (variable); 163 dcl match_star_name_ entry (char (*), char (*), fixed bin (35)); 164 dcl release_temp_segment_ entry (char (*), ptr, fixed bin (35)); 165 dcl ring_zero_peek_ entry (ptr, ptr, fixed bin (19), fixed bin (35)); 166 dcl ring0_get_$segptr entry (char (*), char (*), ptr, fixed bin); 167 dcl system_info_$timeup entry (fixed bin (71)); 168 169 dcl (addr, addrel, bin, divide, float, hbound, index, null, ptr, rel, size, substr, unspec) 170 builtin; 171 172 173 /* initialize first time, or everytime. */ 174 175 print_busy, print_channels, print_detail, print_drive, print_header, print_io_rate = "0"b; 176 reset, rrset, print_queue, print_subsys, print_system = "0"b; 177 178 179 call cu_$arg_list_ptr (arg_list_ptr); 180 call init_args; 181 182 if temp_segp = null () /* no tempseg */ 183 then do; 184 call get_temp_segment_ (MYNAME, temp_segp, code); 185 if code ^= 0 then do; 186 call com_err_ (code, MYNAME, "Getting temp segment"); 187 return; 188 end; 189 190 odisksp = temp_segp; 191 call ring0_get_$segptr ("", "disk_seg", disk_segp, small_code); 192 if small_code ^= 0 then do; 193 code = small_code; 194 RELEASE_RETURN: 195 call com_err_ (code, MYNAME, "disk_seg"); 196 release_quit: 197 call release_temp_segment_ (MYNAME, temp_segp, code); 198 temp_segp = null (); 199 old_clock = 0; /* reset clock too. */ 200 if lv_ptr ^= null () then do; 201 lv_list_ptr = lv_ptr; 202 free lv_list in (lv_list.area_ptr -> areas); 203 lv_ptr = null (); 204 end; 205 if pv_ptr ^= null () then do; 206 pv_list_ptr = pv_ptr; 207 free pv_list in (pv_list.area_ptr -> areas); 208 pv_ptr = null (); 209 end; 210 return; 211 end; 212 213 call ring_zero_peek_ (disk_segp, temp_segp, size (disk_data), code); 214 if code ^= 0 then 215 goto RELEASE_RETURN; 216 217 copy_size = bin (odisksp -> disk_data.free_offset, 19); 218 sub_sys_limit = odisksp -> disk_data.subsystems; 219 if 2 * copy_size > sys_info$max_seg_size then do; 220 call com_err_ (0, MYNAME, "disk_seg is too big to be metered."); 221 goto RELEASE_RETURN; 222 end; 223 disksp_static = ptr (temp_segp, odisksp -> disk_data.free_offset); 224 unspec (seg_overlay) = "0"b; /* clear old copy */ 225 end; 226 else odisksp = temp_segp; 227 228 disksp = disksp_static; 229 230 /* Get arguments. */ 231 232 match_count = 0; 233 234 do while (get_next_arg ()); 235 parse_loop: 236 if index (arg, "-") = 1 then do; 237 if arg = "-rl" | arg = "-release" then 238 goto release_quit; 239 else if arg = "-chn" | arg = "-channels" then 240 print_channels = "1"b; 241 else if arg = "-dtl" | arg = "-detail" then 242 print_detail, print_busy = "1"b; 243 else if arg = "-q" | arg = "-queue" then 244 print_queue = "1"b; 245 else if arg = "-sys" | arg = "-system" then 246 print_system = "1"b; 247 248 else if arg = "-lg" | arg = "-long" then do; 249 print_channels, print_queue, print_system = "1"b; 250 print_detail, print_busy, print_io_rate = "1"b; 251 print_header, print_drive = "1"b; 252 end; 253 254 else if arg = "-he" | arg = "-header" then 255 print_header = "1"b; 256 257 else if arg = "-drv" | arg = "-drive" then 258 print_drive = "1"b; 259 260 else if arg = "-busy" then 261 print_busy = "1"b; 262 263 else if arg = "-rate" then 264 print_io_rate = "1"b; 265 266 else if arg = "-rs" | arg = "-reset" then 267 reset = "1"b; 268 else if arg = "-rr" | arg = "-report_reset" then 269 rrset = "1"b; 270 else if arg = "-lv" | arg = "-logical_volume" then do; 271 match_type = LV; 272 goto get_match_names; 273 end; 274 else if arg = "-dv" | arg = "-device" then do; 275 match_type = DV; 276 goto get_match_names; 277 end; 278 else if arg = "-sub" | arg = "-subsystem" then do; 279 match_type = SY; 280 goto get_match_names; 281 end; 282 else if arg = "-pv" | arg = "-physical_volume" then do; 283 match_type = PV; 284 goto get_match_names; 285 end; 286 else do; /* bad argument */ 287 call com_err_ (error_table_$bad_arg, MYNAME, arg); 288 return; 289 end; 290 end; 291 else do; /* presume subsys */ 292 match_type = SY; 293 goto match_name_loop; 294 295 get_match_names: 296 if ^get_next_arg () then do; 297 call com_err_ (error_table_$noarg, MYNAME, "Name missing after ^a.", match_keys (match_type)); 298 return; 299 end; 300 301 match_name_loop: 302 call check_star_name_$entry (arg, code); 303 if code = error_table_$badstar then do; 304 call com_err_ (code, MYNAME, arg); 305 return; 306 end; 307 308 if match_count < hbound (match, 1) then do; 309 match_count = match_count + 1; 310 match (match_count).name = arg; 311 match (match_count).type = match_type; 312 end; 313 else do; 314 call com_err_ (error_table_$too_many_names, MYNAME, arg); 315 return; 316 end; 317 if ^get_next_arg () then 318 goto end_parse_loop; 319 if index (arg, "-") = 1 then 320 goto parse_loop; 321 goto match_name_loop; 322 end; 323 end_parse_loop: 324 end; 325 326 /* setup listing defaults */ 327 328 if print_channels = "0"b & print_drive = "0"b & print_system = "0"b & print_header = "0"b then 329 print_drive, print_header = "1"b; 330 331 /* Read current meters. */ 332 333 call ring_zero_peek_ (disk_segp, disksp, copy_size, code); 334 if code ^= 0 then 335 goto ERROR_RETURN; 336 337 call get_vol_list_ (pv_ptr, lv_ptr, null (), get_vol_list_version, code); 338 if code ^= 0 then 339 goto ERROR_RETURN; 340 341 lv_list_ptr = lv_ptr; 342 pv_list_ptr = pv_ptr; 343 pv_name_max_space = pv_list.pv_name_max_length; 344 345 /* determine which sub-systems and drives have been selected. */ 346 /* At end of loop pv_list.pv_info.used will be on for selected drives 347* and print_subsys (sx) will be set for sub-systems with drives selected. 348* The sx of the drive will be stored in pv_list.pv_info.device_type. 349* 350* If a secondary device is selected, the primary device will also be 351* selected. */ 352 353 print_subsys = "0"b; 354 selected_drive = "0"b; 355 356 do i = 1 to pv_list.pv_name_count; 357 if ^pv_list.pv_info (i).used then 358 goto end_accept_loop; 359 if match_count = 0 then 360 goto drive_accept; /* Default */ 361 do j = 1 to match_count; 362 goto match_case (match (j).type); 363 364 match_case (1): /* PV */ 365 call match_star_name_ ((pv_list.pv_info (i).pvname), match (j).name, code); 366 if code = 0 then 367 goto drive_accept; 368 goto drive_no_match; 369 370 match_case (2): /* LV */ 371 call match_star_name_ ((lv_list.lv_info (pv_list.pv_info (i).lvx).lvname), match (j).name, code); 372 if code = 0 then 373 goto drive_accept; 374 goto drive_no_match; 375 376 match_case (3): /* DV */ 377 call match_star_name_ ((pv_list.pv_info (i).drive_name), match (j).name, code); 378 if code = 0 then 379 goto drive_accept; 380 goto drive_no_match; 381 382 match_case (4): /* SY */ 383 call match_star_name_ (substr (pv_list.pv_info (i).drive_name, 1, 4), match (j).name, code); 384 if code = 0 then 385 goto drive_accept; 386 goto drive_no_match; 387 drive_no_match: 388 end; 389 goto drive_skip; 390 391 /* Accept drive and flag sub-system as ready for stats */ 392 393 drive_accept: 394 selected_drive = "1"b; 395 do sx = 1 to disk_data.subsystems; 396 if substr (pv_list.pv_info (i).drive_name, 1, 4) = disk_data.array (sx).name then 397 goto sub_sys_accept; 398 end; 399 call com_err_ (0, MYNAME, "disk_table/disk_seg inconsistency."); 400 return; 401 402 sub_sys_accept: 403 pv_list.pv_info (i).device_type = sx; 404 print_subsys (sx) = "1"b; 405 406 dev = bin (substr (pv_list.pv_info (i).drive_name, 6, 2)); 407 diskp = addrel (disksp, disk_data.array (sx).offset); 408 dp = addr (disktab.devtab (dev)); 409 if devtab.pdi ^= dev & devtab.pdi ^= 0 then do; 410 pv_list.pv_info (disktab.devtab (devtab.pdi).pvtx).device_type = sx; 411 pv_list.pv_info (disktab.devtab (devtab.pdi).pvtx).used = "1"b; 412 end; 413 goto end_accept_loop; 414 415 drive_skip: 416 pv_list.pv_info (i).used = "0"b; /* skip drive */ 417 end_accept_loop: 418 end; 419 420 if ^selected_drive then do; 421 call com_err_ (error_table_$bad_arg, MYNAME, "No selection matches."); 422 return; 423 end; 424 425 426 save_clock = clock_ (); 427 if old_clock = 0 then do; 428 call system_info_$timeup (old_clock); 429 end; 430 delta = save_clock - old_clock; 431 fdelta = float (delta); 432 float_seconds = fdelta / 1000000.0; 433 i_seconds = divide (delta, 1000000, 17, 0); 434 i_minutes = divide (i_seconds, 60, 17, 0); 435 hours = divide (i_minutes, 60, 17, 0); 436 seconds = i_seconds - (i_minutes * 60); 437 minutes = i_minutes - (hours * 60); 438 439 call ioa_ ("^2-Metering Time: ^a:^a:^a", hours, minutes, seconds); 440 441 /* Process output */ 442 443 if reset then 444 goto reset_meter; 445 446 447 if print_system then do; 448 call print_q_stats ("FREE", addr (odisksp -> disk_data.free_q), "1"b); 449 450 call ioa_ ("^-Stagnate time ^.3f seconds, ^i PL/1 interrupt service^[s^].", 451 float (disk_data.stagnate_time) / 1000000.0, disk_data.bail_outs - odisksp -> disk_data.bail_outs, 452 disk_data.bail_outs - odisksp -> disk_data.bail_outs ^= 1); 453 454 call date_time_ (disk_data.max_depth_reset_time, date_time); 455 call ioa_ ("^-Maximum Depth Meters reset at: ^a", date_time); 456 457 do i = 0 to MAX_IO_TYPE; 458 do j = 0 to MAX_IO_TYPE; 459 if rel (addr (odisksp -> disk_data.sys_info (j))) = disk_data.sys_info (i).depth_map then 460 goto mapped; 461 end; 462 call ioa_ ("Bad depth mapping!!."); 463 j = TEST; 464 465 mapped: 466 if i ^= TEST then 467 call ioa_ (" ^6a Max Load ^4i, Depth ^3i (^a), Fraction ^6.4f", io_name (i), 468 disk_data.sys_info (i).max_depth, disk_data.sys_info (i).depth, io_name (j), 469 disk_data.sys_info (i).fraction); 470 end; 471 end; 472 473 474 io_per_second = 0.0; 475 476 477 /* Print per subsystem. */ 478 479 if print_header then 480 do sx = 1 to disk_data.subsystems; 481 subsys_name = disk_data.array (sx).name; 482 if print_subsys (sx) then do; 483 diskp = addrel (disksp, disk_data.array (sx).offset); 484 odiskp = addrel (odisksp, disk_data.array (sx).offset); 485 errors = disktab.errors - odiskp -> disktab.errors; 486 ferrors = disktab.ferrors - odiskp -> disktab.ferrors; 487 edac_errors = disktab.edac_errors - odiskp -> disktab.edac_errors; 488 call ioa_ ( 489 "^/Subsystem ^a:^[^s^; ^i Error^]^[s^]^[^s^; ^i Fatal Error^]^[s^]^[^s^; ^i EDAC Error^]^[s^]", 490 subsys_name, errors = 0, errors, errors > 1, ferrors = 0, ferrors, ferrors > 1, edac_errors = 0, 491 edac_errors, edac_errors > 1); 492 call print_subsys_info; 493 end; 494 end; 495 496 if print_drive & ^print_detail then do; 497 call ioa_ ("^/ Drive ^va Ave ATB ATB ATB", pv_name_max_space, " PV"); 498 call ioa_ (" ^vx Reads Writes Seek Reads Writes I/O^/", pv_name_max_space); 499 end; 500 501 502 /* Print per drive. */ 503 504 old_sx = 0; 505 old_dev = -1; 506 do pv = 1 to pv_list.pv_name_count; 507 if ^pv_list.pv_info (pv).used then 508 goto skip_drive; 509 sx = pv_list.pv_info (pv).device_type; /* get sub-system */ 510 if sx ^= old_sx then do; /* sub-system changed */ 511 if old_sx ^= 0 then do; /* cleanup old */ 512 call print_channel_info; 513 io_per_second = io_per_second + io_per_second_per_subsystem; 514 if print_io_rate & io_per_second_per_subsystem > 0.0 then 515 call ioa_ ("^-^a IO Rate ^6.1f", subsys_name, io_per_second_per_subsystem / float_seconds); 516 end; 517 io_per_second_per_subsystem = 0.0; 518 subsys_name = disk_data.array (sx).name; 519 diskp = addrel (disksp, disk_data.array (sx).offset); 520 odiskp = addrel (odisksp, disk_data.array (sx).offset); 521 old_sx = sx; 522 old_dev = -1; 523 end; 524 525 dev = bin (substr (pv_list.pv_info (pv).drive_name, 6, 2)); 526 if pv_list.pv_info (pv).is_sub_vol then 527 if dev = old_dev then 528 goto skip_drive; 529 dp = addr (disktab.devtab (dev)); 530 odp = addr (odiskp -> disktab.devtab (dev)); 531 io_per_second_per_drive = 0.0; 532 if devtab.pdi = dev then 533 call print_device; 534 io_per_second_per_subsystem = io_per_second_per_subsystem + io_per_second_per_drive; 535 skip_drive: 536 old_dev = dev; 537 end; 538 call print_channel_info; 539 io_per_second = io_per_second + io_per_second_per_subsystem; 540 if print_io_rate & io_per_second_per_subsystem > 0.0 then 541 call ioa_ ("^-^a IO Rate ^6.1f", subsys_name, io_per_second_per_subsystem / float_seconds); 542 543 544 545 if print_io_rate & io_per_second > 0.0 then 546 call ioa_ ("^-Sum of Selected Drives ^6.1f IO/second.", io_per_second / float_seconds); 547 548 reset_meter: 549 if reset | rrset then do; 550 unspec (temp_segp -> seg_overlay) = unspec (disksp -> seg_overlay); 551 old_clock = save_clock; 552 end; 553 return; 554 555 ERROR_RETURN: 556 call com_err_ (code, MYNAME); 557 return; 558 559 /* Routine to print information of drive (primary and buddy too). */ 560 561 print_device: 562 proc; 563 564 dcl channel_wait_sum fixed bin (71); 565 dcl (drive_lv, buddy_lv) fixed bin; 566 dcl (drive_pv, buddy_pv) fixed bin; 567 568 dev_pic = dev; 569 drive_pv = disktab.devtab (dev).pvtx; 570 drive_lv = pv_list.pv_info (drive_pv).lvx; 571 572 if devtab.buddy ^= 0 & devtab.buddy ^= dev then do; 573 buddy_pic = devtab.buddy; 574 buddy_pv = disktab.devtab (devtab.buddy).pvtx; 575 buddy_lv = pv_list.pv_info (buddy_pv).lvx; 576 end; 577 else do; 578 buddy_pic = 0; 579 buddy_lv, buddy_pv = 0; 580 end; 581 582 /* Determine if drive and buddy were busy. */ 583 584 channel_wait_sum = 0; 585 do i = 0 to MAX_IO_TYPE; 586 channel_wait_sum = 587 channel_wait_sum + devtab.opt_info (i).channel_wait - odp -> devtab.opt_info (i).channel_wait; 588 end; 589 590 if channel_wait_sum = 0 then 591 return; 592 593 call print_dev (dev); 594 if devtab.buddy ^= 0 then do; 595 call print_dev ((devtab.buddy)); 596 call print_q_stats (subsys_name || "_" || dev_pic || "/" || buddy_pic, 597 addr (odiskp -> disktab (dev).devtab.wq), print_queue); 598 end; 599 else call print_q_stats (subsys_name || "_" || dev_pic, addr (odiskp -> disktab (dev).devtab.wq), print_queue); 600 601 if print_busy then 602 call ioa_ (" Channels ^.2f% busy, ^i Comb^[s^], ^6.1f IO/second.", 100.0 * channel_wait_sum / fdelta, 603 disktab (dev).devtab.comb - odiskp -> disktab (dev).devtab.comb, 604 disktab (dev).devtab.comb - odiskp -> disktab (dev).devtab.comb ^= 1, 605 io_per_second_per_drive / float_seconds); 606 607 return; 608 609 print_dev: 610 proc (dev); 611 612 /* Print individual device information. */ 613 614 dcl dev fixed bin; 615 616 dcl buddyp ptr; /* buddy devtab ptr */ 617 dcl buddy_seeks float bin (63); /* seeks on buddy */ 618 dcl device_read_sum fixed bin (35); 619 dcl device_seeks float bin (63); /* total seeks on device */ 620 dcl device_total_io float bin (63); 621 dcl device_write_sum fixed bin (35); 622 dcl dp ptr; 623 dcl need_buddy bit (1); /* need to count buddy */ 624 dcl obuddyp ptr; /* old buddy devtab */ 625 dcl odp ptr; 626 dcl read_sum fixed bin (35); 627 dcl total_io float bin (63); 628 dcl total_read float bin (63); 629 dcl total_write float bin (63); 630 dcl write_sum fixed bin (35); 631 632 odp = addr (odiskp -> disktab.devtab (dev)); 633 dp = addr (disktab.devtab (dev)); 634 if dev = dp -> devtab.pdi & dp -> devtab.buddy ^= 0 then do; 635 need_buddy = "1"b; 636 buddyp = addr (disktab.devtab (dp -> devtab.buddy)); 637 obuddyp = addr (odiskp -> disktab.devtab (dp -> devtab.buddy)); 638 end; 639 else need_buddy = "0"b; 640 641 642 seek_sum, buddy_seeks = 0.0; 643 do i = 0 to MAX_IO_TYPE; /* determine if zero */ 644 if i ^= TEST then do; 645 seek_sum = 646 seek_sum 647 + float (dp -> devtab.opt_info (i).seek_count - odp -> devtab.opt_info (i).seek_count); 648 if need_buddy then 649 buddy_seeks = 650 buddy_seeks 651 + 652 float (buddyp -> devtab.opt_info (i).seek_count 653 - obuddyp -> devtab.opt_info (i).seek_count); 654 end; 655 end; 656 if (seek_sum + buddy_seeks) = 0.0 /* no work */ 657 then 658 return; 659 660 io_per_second_per_drive = io_per_second_per_drive + seek_sum; 661 662 if print_detail then do; 663 if pv_list.pv_info (drive_pv).is_sub_vol then 664 call print_sv (drive_pv); 665 else do; 666 if dev = dp -> devtab.pdi then 667 call ioa_ ( 668 "^/^a_^a:^-PV-^va^-of LV-^va^[ PDIR^;^]^/ #Seeks AveSeek Queue-wait Channel-wait Queued Multiplier", 669 subsys_name, dev_pic, pv_list.pv_name_max_length, pv_list.pv_info (drive_pv).pvname, 670 lv_list.lv_name_max_length, lv_list.lv_info (drive_lv).lvname, 671 lv_list.lv_info (drive_lv).pdirs_ok); 672 else call ioa_ ( 673 "^/^a_^a:^-PV-^va^-of LV-^va^[ PDIR^;^]^/ #Seeks AveSeek (Secondary Device)", 674 subsys_name, buddy_pic, pv_list.pv_name_max_length, pv_list.pv_info (buddy_pv).pvname, 675 lv_list.lv_name_max_length, lv_list.lv_info (buddy_lv).lvname, 676 lv_list.lv_info (buddy_lv).pdirs_ok); 677 end; 678 end; 679 channel_sum, queue_sum = 0.0; 680 total_seek = 0.0; 681 read_sum, write_sum, device_read_sum, device_write_sum = 0; 682 do i = 0 to MAX_IO_TYPE; 683 684 /* Determine summations, and possibly print detail output. */ 685 686 if i = TEST then 687 if print_detail then 688 call ioa_ (" TEST ^3i UNLOAD^[s^], ^3i TEST^[s^]", 689 dp -> devtab.opt_info (i).seek_sum - odp -> devtab.opt_info (i).seek_sum, 690 dp -> devtab.opt_info (i).seek_sum - odp -> devtab.opt_info (i).seek_sum ^= 1, 691 dp -> devtab.opt_info (i).seek_count - odp -> devtab.opt_info (i).seek_count, 692 dp -> devtab.opt_info (i).seek_count - odp -> devtab.opt_info (i).seek_count ^= 1); 693 else ; 694 else do; 695 channel_time = 696 float (dp -> devtab.opt_info (i).channel_wait - odp -> devtab.opt_info (i).channel_wait); 697 channel_sum = channel_sum + channel_time; 698 699 float_seek, device_seeks = 700 float (dp -> devtab.opt_info (i).seek_count - odp -> devtab.opt_info (i).seek_count); 701 702 if need_buddy then 703 device_seeks = 704 device_seeks 705 + 706 float (buddyp -> devtab.opt_info (i).seek_count 707 - obuddyp -> devtab.opt_info (i).seek_count); 708 709 seeks = dp -> devtab.opt_info (i).seek_count - odp -> devtab.opt_info (i).seek_count; 710 711 if write_map (i) then do; 712 write_sum = write_sum + seeks; 713 device_write_sum = device_write_sum + device_seeks; 714 end; 715 else do; 716 read_sum = read_sum + seeks; 717 device_read_sum = device_read_sum + device_seeks; 718 end; 719 720 if float_seek = 0.0 then 721 float_seek = 1.0e30; 722 if device_seeks = 0.0 then 723 device_seeks = 1.0e30; 724 seek_to_time = device_seeks * 1.0e3; 725 /* milli secs */ 726 ave_seek = 727 float (dp -> devtab.opt_info (i).seek_sum - odp -> devtab.opt_info (i).seek_sum) 728 / float_seek; 729 total_seek = 730 total_seek 731 + float (dp -> devtab.opt_info (i).seek_sum - odp -> devtab.opt_info (i).seek_sum); 732 ave_queue = 733 float (dp -> devtab.opt_info (i).queue_wait - odp -> devtab.opt_info (i).queue_wait) 734 / seek_to_time; 735 queue_sum = 736 queue_sum 737 + float (dp -> devtab.opt_info (i).queue_wait - odp -> devtab.opt_info (i).queue_wait); 738 739 if print_detail & print_drive & device_seeks < 1.0e29 then 740 if dev = dp -> devtab.pdi then 741 call ioa_ (" ^6a ^7i ^7.2f ^10.1f ^4.1f%^7.1f ^7i ^10.1f", io_name (i), seeks, 742 ave_seek, ave_queue, (channel_time * 100.0) / fdelta, channel_time / seek_to_time, 743 dp -> devtab.opt_info (i).depth, dp -> devtab.opt_info (i).multiplier); 744 else call ioa_ (" ^6a ^7i ^7.2f", io_name (i), seeks, ave_seek); 745 746 end; 747 end; 748 749 /* output simple summation. */ 750 751 if read_sum = 0 then 752 total_read = 0.0; 753 else total_read = (0.001 * fdelta) / float (read_sum); 754 if write_sum = 0 then 755 total_write = 0.0; 756 else total_write = (0.001 * fdelta) / float (write_sum); 757 total_io = read_sum + write_sum; 758 if total_io = 0.0 then 759 total_io = 1.0e30; 760 761 device_total_io = device_read_sum + device_write_sum; 762 if device_total_io = 0.0 then 763 device_total_io = 1.0e30; 764 765 if ^print_detail & print_drive then do; 766 767 if pv_list.pv_info (drive_pv).is_sub_vol then 768 call print_sv (drive_pv); 769 else do; 770 if dev = dp -> devtab.pdi then 771 call ioa_ ( 772 "^9a^va ^[^s^8x^;^8i^] ^[^s^8x^;^8i^]^[^s Idle^;^6i^] ^[^s^8x^;^8i^] ^[^s^8x^;^8i^] ^[^s^;^8i^]", 773 pv_list.pv_info (drive_pv).drive_name, pv_name_max_space, 774 pv_list.pv_info (drive_pv).pvname, read_sum = 0, read_sum, write_sum = 0, write_sum, 775 total_io > 1.0e29, total_seek / total_io, total_read = 0.0, total_read, 776 total_write = 0.0, total_write, device_total_io > 1.0e29, 777 (0.001 * fdelta) / device_total_io); 778 else call ioa_ ( 779 "^9a^va ^[^s^8x^;^8i^] ^[^s^8x^;^8i^]^[^s Idle^;^6i^] ^[^s^8x^;^8i^] ^[^s^8x^;^8i^]", 780 pv_list.pv_info (buddy_pv).drive_name, pv_name_max_space, 781 pv_list.pv_info (buddy_pv).pvname, read_sum = 0, read_sum, write_sum = 0, write_sum, 782 total_io > 1.0e29, total_seek / total_io, total_read = 0.0, total_read, 783 total_write = 0.0, total_write); 784 end; 785 end; 786 787 788 print_sv: 789 proc (pv_index); 790 791 dcl pv_index fixed bin; 792 dcl (sv_idx, f_sv_idx, l_sv_idx, lv_index) 793 fixed bin; 794 795 /**** find first subvol in pv_info for this dev */ 796 797 f_sv_idx = pv_index - (pv_list.pv_info (pv_index).sv_num); 798 799 /**** find last subvol in pv_info */ 800 801 l_sv_idx = f_sv_idx + (pv_list.pv_info (pv_index).num_of_sv - 1); 802 803 do sv_idx = f_sv_idx to l_sv_idx; 804 lv_index = pv_list.pv_info (sv_idx).lvx; 805 if print_detail & print_drive then do; 806 if pv_list.pv_info (sv_idx).used then 807 call ioa_$nnl ( 808 "^/^8a:^-PV-^va^-of LV-^va^[ PDIR^;^]^[^/ #Seeks AveSeek Queue-wait Channel-wait Queued Multiplier^/^]", 809 pv_list.pv_info (sv_idx).drive_name, pv_list.pv_name_max_length, 810 pv_list.pv_info (sv_idx).pvname, lv_list.lv_name_max_length, 811 lv_list.lv_info (lv_index).lvname, lv_list.lv_info (lv_index).pdirs_ok, 812 (l_sv_idx = sv_idx)); 813 else call ioa_$nnl ( 814 "^/^8a:^-^3x^vx^-^6x^vx^[^/ #Seeks AveSeek Queue-wait Channel-wait Queued Multiplier^/^]", 815 pv_list.pv_info (sv_idx).drive_name, pv_list.pv_name_max_length, 816 lv_list.lv_name_max_length, (l_sv_idx = sv_idx)); 817 end; 818 else do; 819 if (sv_idx ^= l_sv_idx) then do; 820 if pv_list.pv_info (sv_idx).used then 821 call ioa_ ("^9a^va", pv_list.pv_info (sv_idx).drive_name, pv_name_max_space, 822 pv_list.pv_info (sv_idx).pvname); 823 else call ioa_ ("^9a", pv_list.pv_info (sv_idx).drive_name); 824 end; 825 else do; 826 call ioa_$nnl ("^9a^[^va^;^2s^vx^]", pv_list.pv_info (sv_idx).drive_name, 827 pv_list.pv_info (sv_idx).used, pv_name_max_space, pv_list.pv_info (sv_idx).pvname, 828 pv_name_max_space); 829 call ioa_ ( 830 " ^[^s^8x^;^8i^] ^[^s^8x^;^8i^]^[^s Idle^;^6i^] ^[^s^8x^;^8i^] ^[^s^8x^;^8i^] ^[^s^;^8i^]", 831 read_sum = 0, read_sum, write_sum = 0, write_sum, total_io > 1.0e29, 832 total_seek / total_io, total_read = 0.0, total_read, total_write = 0.0, 833 total_write, device_total_io > 1.0e29, (0.001 * fdelta) / device_total_io); 834 end; 835 end; 836 end; 837 838 /**** let the rest of print_dev print the last */ 839 840 pv_index = l_sv_idx; 841 end print_sv; 842 843 end print_dev; 844 845 end print_device; 846 847 print_q_stats: 848 proc (drive_name, oqhtp, print); 849 850 /* pointer to qht is low area is passed, then the relative offset is correct 851* for the other too. */ 852 853 dcl drive_name char (*); 854 dcl oqhtp ptr; 855 dcl print bit (1); 856 857 dcl qhtp ptr; 858 dcl 1 q like qht based (qhtp); 859 860 if ^print then 861 return; 862 qhtp = addrel (disksp, rel (oqhtp)); 863 call ioa_ (" ^a Queue: Ave ^5.1f, Alloc ^i, Max Depth ^i/^i, Cur Depth ^i", drive_name, 864 float (q.sum - oqhtp -> q.sum) / (float (q.count - oqhtp -> q.count) + 1.0e-5), q.count - oqhtp -> q.count, 865 q.max_depth, disk_data.free_q_size, q.depth); 866 end print_q_stats; 867 868 /* Print channel information. */ 869 870 print_channel_info: 871 proc; 872 873 /* pointer to disktab is low area is passed, then the relative 874* offset is correct for the other too. */ 875 876 dcl ocp ptr; 877 dcl headed bit (1); /* header printed */ 878 dcl 1 c like chantab based (ocp); 879 880 if ^print_channels then 881 return; 882 headed = "0"b; 883 do i = 1 to disktab.nchan; 884 ocp = addr (addrel (odisksp, diskp -> disktab.channels) -> disk_channel_table (i)); 885 cp = addr (addrel (disksp, diskp -> disktab.channels) -> disk_channel_table (i)); 886 887 /* Determine if this channel is to be printed */ 888 889 if cp -> c.connects - ocp -> c.connects > 0 | (cp -> c.ioi_use | cp -> c.inop | cp -> c.broken) then do; 890 if ^headed then do; 891 call ioa_ ("^/ ^a Channel Information 892 Term by Interrupt get_io Term w/o 893 Connects RUN w/o term w/o term Active Status", subsys_name); 894 headed = "1"b; 895 end; 896 call ioa_ ( 897 "^2x^3a^8i^1x^[^8i^;^s^8x^]^2x^[^9i^;^s^9x^]^2x^[^8i^;^s^8x^]^1x^[^8i^;^s^8x^] ^[ IOI^]^[ INOP^]^[ BROKEN^]", 898 cp -> chantab.chanid, cp -> c.connects - ocp -> c.connects, 899 cp -> c.status_from_run - ocp -> c.status_from_run > 0, 900 cp -> c.status_from_run - ocp -> c.status_from_run, 901 cp -> c.no_status_terminate - ocp -> c.no_status_terminate > 0, 902 cp -> c.no_status_terminate - ocp -> c.no_status_terminate, 903 cp -> c.no_io_terminate - ocp -> c.no_io_terminate > 0, 904 cp -> c.no_io_terminate - ocp -> c.no_io_terminate, 905 cp -> c.terminate_not_active - ocp -> c.terminate_not_active > 0, 906 cp -> c.terminate_not_active - ocp -> c.terminate_not_active, cp -> c.ioi_use = "1"b, 907 cp -> c.inop = "1"b, cp -> c.broken = "1"b); 908 end; 909 end; 910 call ioa_ (); 911 return; 912 end print_channel_info; 913 914 print_subsys_info: 915 proc; 916 917 918 /* Process per-subsystem locking info. */ 919 920 call ioa_ ("^14t Locks Waits %Calls Average %CPU"); 921 call print_lock ("Call Lock", addr (odiskp -> disktab.call_lock_meters)); 922 call print_lock ("Run Lock", addr (odiskp -> disktab.run_lock_meters)); 923 call print_lock ("Int Lock", addr (odiskp -> disktab.int_lock_meters)); 924 call print_lock ("Alloc Lock", addr (odiskp -> disktab.alloc_wait_meters)); 925 return; 926 927 print_lock: 928 proc (lock_name, odlp); 929 930 /* pointer to disk_lock_meters is low area is passed, then the relative 931* offset is correct for the other too. */ 932 933 dcl lock_name char (*); 934 dcl odlp ptr; 935 936 dcl dlp ptr; 937 dcl lockings float bin (63); 938 dcl waitings float bin (63); 939 dcl 1 l like disk_lock_meters based (dlp); 940 941 dlp = addrel (disksp, rel (odlp)); 942 lockings = float (l.count - odlp -> l.count); 943 if lockings = 0.0 then 944 return; 945 waitings = float (l.waits - odlp -> l.waits); 946 if waitings = 0.0 then 947 waitings = 1.0; 948 call ioa_ (" ^a:^14t^10i^8i ^8.4f% ^8.3f ^9.5f%", lock_name, l.count - odlp -> l.count, 949 l.waits - odlp -> l.waits, 100.0 * float (l.waits - odlp -> l.waits) / lockings, 950 0.001 * float (l.wait_time - odlp -> l.wait_time) / waitings, 951 100.0 * float (l.wait_time - odlp -> l.wait_time) / fdelta); 952 end print_lock; 953 end print_subsys_info; 954 955 /* initialize argument processing. */ 956 957 init_args: 958 proc; 959 960 dcl code fixed bin (35); 961 962 arg_index = 1; 963 call cu_$arg_count_rel (arg_count, arg_list_ptr, code); 964 if code ^= 0 then 965 goto ERROR_RETURN; 966 return; 967 968 /* Get next arguments. Returns "0"b if failure. */ 969 970 get_next_arg: 971 entry returns (bit (1)); 972 973 if arg_index <= arg_count then do; 974 call cu_$arg_ptr_rel (arg_index, arg_ptr, arg_len, code, arg_list_ptr); 975 if code = 0 then do; 976 arg_index = arg_index + 1; 977 return ("1"b); /* success */ 978 end; 979 end; 980 return ("0"b); /* no argument */ 981 982 end init_args; 983 1 1 /* BEGIN INCLUDE FILE - get_vol_list_.incl.pl1 */ 1 2 1 3 1 4 1 5 /****^ HISTORY COMMENTS: 1 6* 1) change(86-03-12,Fawcett), approve(86-05-13,MCR7383), 1 7* audit(86-05-27,Wallman), install(86-07-18,MR12.0-1098): 1 8* Add support for subvolumes. 1 9* END HISTORY COMMENTS */ 1 10 1 11 1 12 /* Defines structure interface to the routine get_vol_list_, which acquires 1 13* information from the system disk_table on physical and logical volume 1 14* names allocates the structures if needed and returns control to the 1 15* caller. The area_ptr in each structure is the area the structure was 1 16* allocated in, and can be used for freeing the structure. */ 1 17 1 18 /* Created November-22- 1984 by Tom Oke - MDC-ACTC. */ 1 19 1 20 /* December 17, 1984 by T. Oke, include version and area_ptr. */ 1 21 1 22 dcl (lv_list_ptr, pv_list_ptr) ptr; 1 23 1 24 dcl get_vol_list_version char (8) static options (constant) initial ("gvlist02"); 1 25 1 26 dcl 1 pv_list based (pv_list_ptr), 1 27 2 version char (8) unaligned, /* struct version */ 1 28 2 area_ptr ptr, /* area allocated in */ 1 29 2 pv_name_max_length fixed bin, 1 30 2 pv_name_count fixed bin, 1 31 2 pv_info (1 refer (pv_list.pv_name_count)) aligned, 1 32 3 used bit (1) unaligned, /* entry in use */ 1 33 3 storage_system bit (1) unaligned, /* storage system */ 1 34 3 permanent bit (1) unaligned, /* cannot demount */ 1 35 3 hc_accepted bit (1) unaligned, /* vol accpt ring 0 */ 1 36 3 rpv bit (1) unaligned, 1 37 3 is_sub_vol bit (1) unaligned, 1 38 3 pad bit (4) unaligned, 1 39 3 device_type fixed bin (8) unsigned unaligned, 1 40 3 lvx fixed bin unaligned, /* index in lv_list */ 1 41 3 drive_name char (8) unaligned, /* like dska_01 */ 1 42 3 pvname char (32) unaligned, 1 43 3 sv_num fixed bin (17), /* if this is a subvolume then what number */ 1 44 3 num_of_sv fixed bin (17); /* if this is a subvolume how many */ 1 45 1 46 dcl 1 lv_list based (lv_list_ptr), 1 47 2 version char (8) unaligned, /* struct version */ 1 48 2 area_ptr ptr, /* area allocated in */ 1 49 2 lv_name_max_length fixed bin, 1 50 2 lv_name_count fixed bin, 1 51 2 lv_info (1 refer (lv_list.lv_name_count)) aligned, 1 52 3 used bit (1) unaligned, /* in use */ 1 53 3 hv_mounted bit (1) unaligned, /* hvol OK */ 1 54 3 public bit (1) unaligned, /* public use */ 1 55 3 mounting bit (1) unaligned, /* mount in progress */ 1 56 3 demounting bit (1) unaligned, /* demount in progress */ 1 57 3 pdirs_ok bit (1) unaligned, /* can use pdirs */ 1 58 3 prev_bootload bit (1) unaligned, /* can auto-accept pvs */ 1 59 3 vacate_pdirs bit (1) unaligned, /* demand move pdirs */ 1 60 3 pad bit (26) unaligned, 1 61 3 lvname char (32) unaligned; 1 62 1 63 /* END INCLUDE FILE - get_vol_list_.incl.pl1 */ 984 2 1 /* Begin include file ...... dskdcl.incl.pl1 */ 2 2 2 3 /****^ HISTORY COMMENTS: 2 4* 1) change(85-09-09,Fawcett), approve(85-09-09,MCR6979), 2 5* audit(86-01-17,CLJones), install(86-03-21,MR12.0-1033): 2 6* Support for FIPS dev 0. 2 7* 2) change(88-05-10,Farley), approve(88-06-03,MCR7906), 2 8* audit(88-08-03,Fawcett), install(88-08-08,MR12.2-1080): 2 9* Added reconnect_announce_time to chantab to allow announcement of 2 10* reconnects at a throttled rate. Otherwise only report them in the syserr 2 11* log. Also added IO_TYPE constant array for displaying I/O type. 2 12* END HISTORY COMMENTS */ 2 13 2 14 /* Structures used by the Disk DIM */ 2 15 2 16 /* Modified 84-03-21 by T. Oke for system wide free queue. */ 2 17 /* Modified 84-04-24 by T. Oke for dynamic channel table. */ 2 18 /* Modified 84-05-03 by T. Oke to hold sx for azm analysis. */ 2 19 /* Modified 84-05-14 by T. Oke for larger quentry and adaptive optimization. */ 2 20 /* Modifies 84-11-26 by R. A. Fawcett for device 0 (fips) */ 2 21 2 22 /* format: style4,delnl,insnl,tree,ifthenstmt,indnoniterend */ 2 23 2 24 dcl disk_seg$ ext; /* disk data segment */ 2 25 2 26 dcl disksp ptr, /* pointer to disk subsystem info */ 2 27 diskp ptr, /* pointer to disk DIM info structure */ 2 28 optp ptr, /* pointer to opt_info */ 2 29 sysp ptr; /* pointer to sys_info */ 2 30 2 31 dcl 1 disk_data based (disksp) aligned, /* disk subsystem information */ 2 32 2 subsystems fixed bin, /* number of subsystems */ 2 33 2 free_offset bit (18), /* offset of first unused location in segment */ 2 34 2 status_mask bit (36), /* mask for checking for disk error */ 2 35 2 lock bit (36) unal, /* disk_data lock */ 2 36 2 free_q like qht, /* head/tail offsets */ 2 37 2 free_q_size fixed bin, /* length of queue */ 2 38 2 array (32), /* per subsystem info */ 2 39 ( 2 40 3 offset bit (18), /* location of data for this subsystem */ 2 41 3 mbz bit (18), /* low 18 of old style indirect word */ 2 42 3 name char (4) 2 43 ) unal, /* name of subsystem */ 2 44 2 stagnate_time fixed bin (35), /* stagnatation period */ 2 45 2 bail_outs fixed bin (35), /* times ALM called PL1 */ 2 46 2 pad bit (36), /* double word align */ 2 47 2 max_depth_reset_time fixed bin (71), /* time max_reset done */ 2 48 /* Upper bound is MAX_IO_TYPE, hard coded to avoid dynamic calculation */ 2 49 2 sys_info (0:6) like sys_info, /* MUST BE DOUBLE WORD ALIGNED */ 2 50 2 free_q_entries (2 refer (disk_data.free_q_size)) like quentry; 2 51 2 52 2 53 /* The following system table is used to hold the maximum queue loading 2 54* permitted system-wide for each IO type. From the current loading and 2 55* the maximum loading a multiplier fraction is calculated. These combine 2 56* to produce the final optimization multiplier to derive a Logcial Seek 2 57* from a Physical Seek. */ 2 58 2 59 dcl 1 sys_info aligned based (sysp), 2 60 3 depth float bin (27), /* current load */ 2 61 3 max_depth float bin (27), /* max permissible */ 2 62 3 fraction float bin (27), /* load fraction */ 2 63 3 depth_map bit (18) unaligned, /* which depth counter */ 2 64 3 pad bit (18) unaligned; 2 65 2 66 /* Maximum number of channels per sub-system. Must be a power of two. It must 2 67* be at or below the size of disk_init's chan_array size. Shift factor is for 2 68* dctl's use. */ 2 69 2 70 dcl dskdcl_chans_per_subsys fixed bin static options (constant) initial (32); 2 71 dcl dskdcl_chans_per_subsys_shift fixed bin static options (constant) initial (5); 2 72 2 73 2 74 dcl 1 disktab based (diskp) aligned, /* control structure for DIM's */ 2 75 2 lock bit (36) unal, /* data base lock */ 2 76 2 nchan fixed bin, /* number of disk channels */ 2 77 2 first_dev fixed bin unal, /* frist device number 0 or 1 */ 2 78 2 last_dev fixed bin unal, /* highest disk drive number */ 2 79 2 channels_online fixed bin, /* number of disk channels actually in use */ 2 80 2 dev_busy bit (72), /* busy bit for each device (only 0-63 used) */ 2 81 2 dev_queued bit (72), /* requests queued bit for each device (only 0-63 used) */ 2 82 2 abs_mem_addr fixed bin (26) unsigned, /* absolute memory address of this structure */ 2 83 2 channels bit (18) unal, /* location of chantab for this subsystem */ 2 84 2 dev_index fixed bin (17) unal, /* current device to check */ 2 85 2 errors fixed bin, /* error count */ 2 86 2 ferrors fixed bin, /* fatal error count */ 2 87 2 edac_errors fixed bin, /* count of EDAC correctable errors */ 2 88 2 call_lock_meters like disk_lock_meters, /* lock meters for call side of DIM */ 2 89 2 int_lock_meters like disk_lock_meters, /* lock meters for interrupt side of DIM */ 2 90 2 alloc_wait_meters like disk_lock_meters, /* meters for queue entry allocations */ 2 91 2 run_lock_meters like disk_lock_meters, /* lock meters for run calls */ 2 92 2 devtab (0:0 refer (disktab.last_dev)) like devtab; /* device information table */ 2 93 2 94 dcl 1 disk_channel_table (1 refer (disktab.nchan)) like chantab based aligned; 2 95 2 96 2 97 dcl qp ptr, /* pointer to queue entry */ 2 98 cp ptr; /* pointer to channel information table */ 2 99 2 100 2 101 /* Queue entry, 6 words. Cylinder and sector variables are over-size for 2 102* expansion space. They will always be positive and upper bits can be 2 103* stolen for other fields. 2 104* 2 105* Entries are forward and back linked to permit easy chasing and removal. */ 2 106 2 107 dcl 1 quentry based (qp) aligned, /* queue entry */ 2 108 /* WORD 1 */ 2 109 2 next bit (18) unaligned, /* forward link */ 2 110 2 prev bit (18) unaligned, /* back link */ 2 111 /* WORD 2 */ 2 112 2 intrpt bit (1) unaligned, /* completion interrupt desired */ 2 113 2 used bit (1) unaligned, /* entry in use */ 2 114 2 type fixed bin (4) unsigned unaligned, /* IO type */ 2 115 2 pad bit (6) unaligned, /* future expansion */ 2 116 2 coreadd bit (24) unaligned, /* main memory address */ 2 117 /* WORD 3 */ 2 118 2 pvtx fixed bin (8) unsigned unaligned, /* for AZM/ol_dump */ 2 119 2 pdi fixed bin (6) unsigned unaligned, /* physical device */ 2 120 2 dev fixed bin (6) unsigned unaligned, /* device in sub-sys */ 2 121 2 pad2 bit (5) unaligned, 2 122 2 cylinder fixed bin (11) unsigned unaligned, /* cylinder of request */ 2 123 /* WORD 4 */ 2 124 2 n_sectors fixed bin (6) unsigned unaligned, /* # sectors of IO */ 2 125 2 pad3 bit (9) unaligned, 2 126 2 sector bit (21) unaligned, /* device sector desired */ 2 127 /* WORDS 5&6 */ 2 128 2 time fixed bin (71); /* clock at queue */ 2 129 2 130 2 131 2 132 dcl 1 chantab based (cp) aligned, /* channel information table */ 2 133 2 chx fixed bin (35), /* io_manager channel index */ 2 134 2 ioi_ctx fixed bin (35), /* ioi channel table index */ 2 135 2 statusp ptr, /* pointer to hardware status word */ 2 136 2 chanid char (8), /* channel name */ 2 137 ( 2 138 2 pad0 bit (18), 2 139 2 in_use bit (1), /* non-zero if channel being used */ 2 140 2 active bit (1), /* non-zero if channel active */ 2 141 2 rsr bit (1), /* non-zero if RSR in progress */ 2 142 2 ioi_use bit (1), /* non-zero if channel usurped by IOI */ 2 143 2 inop bit (1), /* non-zero if channel inoperative */ 2 144 2 broken bit (1), /* non-zero if channel broken */ 2 145 2 action_code bit (2), /* saved from status */ 2 146 2 pad1 bit (10) 2 147 ) unal, 2 148 ( 2 149 2 qrp bit (18), /* rel ptr to queue entry */ 2 150 2 pad2 bit (3), 2 151 2 command bit (6), /* peripheral command */ 2 152 2 erct fixed bin (8) 2 153 ) unal, /* error retry count */ 2 154 2 select_data, /* data passed to IOM on select */ 2 155 ( 2 156 3 limit bit (12), /* limit on number of sectors */ 2 157 3 mbz bit (3), 2 158 3 sector bit (21) 2 159 ) unaligned, /* sector address */ 2 160 2 reconnect_announce_time fixed bin (52), /* reconnect announcement throttle */ 2 161 2 connect_time fixed bin (52), /* time of last connect */ 2 162 2 connects fixed bin, /* count of connects performed */ 2 163 2 detailed_status (0:17) bit (8) unal, /* detailed status bytes */ 2 164 2 rstdcw bit (36), /* restore command */ 2 165 2 scdcw bit (36), /* select command */ 2 166 2 sddcw bit (36), /* select data xfer */ 2 167 2 dcdcw bit (36), /* command to read or write */ 2 168 2 dddcw bit (36), /* data xfer DCW */ 2 169 2 dscdcw bit (36), /* RSR command */ 2 170 2 dsddcw bit (36), /* RSR data xfer */ 2 171 2 rssdcw bit (36), /* RSS command */ 2 172 2 status bit (36) aligned, /* saved status */ 2 173 /* Lossage counters for interrupt loss. */ 2 174 2 no_io_terminate fixed bin (35), /* no t bit from io_manager$get_status */ 2 175 2 terminate_not_active fixed bin (35), /* terminate, but not active */ 2 176 2 no_status_terminate fixed bin (35), /* interrupt with no terminate */ 2 177 2 status_from_run fixed bin (35); /* status missed til run called */ 2 178 2 179 dcl 1 qht aligned based, /* queue head/tail structure */ 2 180 2 sum fixed bin (35), /* sum of depths */ 2 181 2 count fixed bin (35), /* allocs */ 2 182 2 max_depth fixed bin (17) unaligned, /* high water mark */ 2 183 2 depth fixed bin (17) unaligned, /* current depth */ 2 184 2 head bit (18) unaligned, /* queue head */ 2 185 2 tail bit (18) unaligned; /* queue tail */ 2 186 2 187 dcl dp ptr, /* pointer to device information table */ 2 188 pvtdip ptr; /* pointer to dim_info in PVT entry */ 2 189 2 190 dcl 1 devtab based (dp) aligned, /* device information table */ 2 191 ( 2 192 2 pvtx fixed bin (8), /* index of PVT entry for device */ 2 193 2 inop bit (1), /* device inoperative */ 2 194 2 was_broken bit (1), /* device previously broken */ 2 195 2 broken bit (1), /* device down */ 2 196 2 abandoned bit (1), /* device lost and gone forever */ 2 197 2 forward bit (1), /* moving low->high */ 2 198 2 pad bit (10), 2 199 2 buddy unsigned fixed bin (6), /* other device on this spindle or 0 */ 2 200 2 pdi unsigned fixed bin (6) 2 201 ) unal, /* primary device index */ 2 202 2 cylinder fixed bin (35), /* current cylinder position */ 2 203 2 comb fixed bin (35), /* number of combs */ 2 204 2 pad1 fixed bin (35), 2 205 2 time_inop fixed bin (52), /* time drive became inoperative */ 2 206 2 wq like qht, /* work queue */ 2 207 /* Upper bound must be MAX_IO_TYPE, constant to avoid dynamic calculation. */ 2 208 2 opt_info (0:6) like opt_info; /* optimizer */ 2 209 2 210 2 211 /* Optimizing table for device. Must be even multiple words long. */ 2 212 /* Slope and intercept define a straight line of y = intercept - slope*x 2 213* Multiplier is calculated from this and current system loading. 2 214* 2 215* sys_info is the offset to the relevant system queue loading fraction. */ 2 216 2 217 dcl 1 opt_info aligned based (optp), 2 218 3 multiplier float bin (27), /* depth mult */ 2 219 3 slope float bin (27), /* slope of line */ 2 220 3 intercept float bin (27), /* Y intercept */ 2 221 3 sys_info bit (18) unaligned, /* offset to sys_info */ 2 222 3 depth fixed bin (17) unaligned, /* elements in queue */ 2 223 3 channel_wait fixed bin (52), /* total channel time waiting */ 2 224 3 queue_wait fixed bin (52), /* total queue time waiting */ 2 225 3 seek_sum fixed bin (35) unaligned, /* sum of seeks */ 2 226 3 seek_count fixed bin (35) unaligned; /* number of seeks */ 2 227 2 228 2 229 dcl 1 pvtdi based (pvtdip) aligned, /* disk DIM info in PVT entry */ 2 230 ( 2 231 2 sx fixed bin (11), /* structure index */ 2 232 2 usable_sect_per_cyl fixed bin (11), /* # of usable sectors on disk cylinder */ 2 233 2 unused_sect_per_cyl fixed bin (11) 2 234 ) unal; /* # of unused sectors at end of cylinder */ 2 235 2 236 dcl 1 disk_lock_meters based aligned, /* lock meters for disk DIM */ 2 237 2 count fixed bin, /* total number of attempts */ 2 238 2 waits fixed bin, /* number of attempts which required waiting */ 2 239 2 wait_time fixed bin (52); /* total time spent waiting */ 2 240 2 241 dcl ( 2 242 RST_LISTX init (1), /* listx for restore */ 2 243 SC_LISTX init (2), /* listx for select */ 2 244 DSC_LISTX init (6), /* listx for RSR */ 2 245 RSS_LISTX init (8) 2 246 ) fixed bin (12) static options (constant); /* listx for RSS */ 2 247 2 248 /* IO types defined. Value is also index of write_map to determine if 2 249* the IO type is a read or a write. */ 2 250 2 251 dcl ( 2 252 PAGE_READ init (0), 2 253 PAGE_WRITE init (1), 2 254 VTOC_READ init (2), 2 255 VTOC_WRITE init (3), 2 256 TEST init (4), 2 257 BOOTLOAD_READ init (5), 2 258 BOOTLOAD_WRITE init (6), 2 259 MAX_IO_TYPE init (6) 2 260 ) fixed bin (4) static options (constant); 2 261 2 262 dcl IO_TYPE (0:6) char (16) 2 263 initial ("Page Read", "Page Write", "VTOC Read", "VTOC Write", "Test", "Bootload Read", "Bootload Write") 2 264 static options (constant); 2 265 2 266 /* Map indexed by IO type to determine if operation is a read or write. */ 2 267 2 268 dcl write_mapping bit (7) initial ("0101001"b) static options (constant); 2 269 dcl write_map (0:6) bit (1) defined (write_mapping); 2 270 2 271 /* Map indexed by IO type to determine if operation is a sector IO. */ 2 272 2 273 dcl sector_mapping bit (7) initial ("0011111"b) static options (constant); 2 274 dcl sector_map (0:6) bit (1) defined (sector_mapping); 2 275 2 276 /* Map indexed by IO type to determine if operation is done on behalf of bce */ 2 277 2 278 dcl bootload_mapping bit (7) initial ("0000011"b) static options (constant); 2 279 dcl bootload_map (0:6) bit (1) defined (bootload_mapping); 2 280 2 281 /* End of include file ...... dskdcl.incl.pl1 */ 985 986 end disk_meters; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 08/08/88 1115.1 disk_meters.pl1 >special_ldd>install>MR12.2-1080>disk_meters.pl1 984 1 07/24/86 2051.8 get_vol_list_.incl.pl1 >ldd>include>get_vol_list_.incl.pl1 985 2 08/08/88 1111.3 dskdcl.incl.pl1 >special_ldd>install>MR12.2-1080>dskdcl.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. DV constant fixed bin(17,0) initial dcl 128 ref 275 LV constant fixed bin(17,0) initial dcl 126 ref 271 MAX_IO_TYPE constant fixed bin(4,0) initial dcl 2-251 ref 457 458 585 643 682 MYNAME 000043 constant char(11) initial packed unaligned dcl 78 set ref 184* 186* 194* 196* 220* 287* 297* 304* 314* 399* 421* 555* PV constant fixed bin(17,0) initial dcl 124 ref 283 SY constant fixed bin(17,0) initial dcl 130 ref 279 292 TEST constant fixed bin(4,0) initial dcl 2-251 ref 463 465 644 686 addr builtin function dcl 169 ref 408 448 448 459 529 530 596 596 599 599 632 633 636 637 884 885 921 921 922 922 923 923 924 924 addrel builtin function dcl 169 ref 407 483 484 519 520 862 884 885 941 alloc_wait_meters 26 based structure level 2 dcl 2-74 set ref 924 924 area_ptr 2 based pointer level 2 in structure "pv_list" dcl 1-26 in procedure "dskm" ref 207 area_ptr 2 based pointer level 2 in structure "lv_list" dcl 1-46 in procedure "dskm" ref 202 areas based area(1024) dcl 41 ref 202 207 arg based char packed unaligned dcl 42 set ref 235 237 237 239 239 241 241 243 243 245 245 248 248 254 254 257 257 260 263 266 266 268 268 270 270 274 274 278 278 282 282 287* 301* 304* 310 314* 319 arg_count 000100 automatic fixed bin(17,0) dcl 43 set ref 963* 973 arg_index 000101 automatic fixed bin(17,0) dcl 44 set ref 962* 973 974* 976* 976 arg_len 000102 automatic fixed bin(21,0) dcl 45 set ref 235 237 237 239 239 241 241 243 243 245 245 248 248 254 254 257 257 260 263 266 266 268 268 270 270 274 274 278 278 282 282 287 287 301 301 304 304 310 314 314 319 974* arg_list_ptr 000104 automatic pointer dcl 46 set ref 179* 963* 974* arg_ptr 000106 automatic pointer dcl 47 set ref 235 237 237 239 239 241 241 243 243 245 245 248 248 254 254 257 257 260 263 266 266 268 268 270 270 274 274 278 278 282 282 287 301 304 310 314 319 974* array 11 based structure array level 2 dcl 2-31 ave_queue 000110 automatic float bin(63) dcl 49 set ref 732* 739* ave_seek 000112 automatic float bin(63) dcl 50 set ref 726* 739* 744* bail_outs 112 based fixed bin(35,0) level 2 dcl 2-31 ref 450 450 450 450 bin builtin function dcl 169 ref 217 406 525 broken 6(23) based bit(1) level 2 packed packed unaligned dcl 878 ref 889 896 buddy 0(24) based fixed bin(6,0) level 2 packed packed unsigned unaligned dcl 2-190 ref 572 572 573 574 594 595 634 636 637 buddy_lv 001367 automatic fixed bin(17,0) dcl 565 set ref 575* 579* 672 672 buddy_pic 000114 automatic picture(2) packed unaligned dcl 51 set ref 573* 578* 596 672* buddy_pv 001371 automatic fixed bin(17,0) dcl 566 set ref 574* 575 579* 672 778 778 buddy_seeks 001404 automatic float bin(63) dcl 617 set ref 642* 648* 648 656 buddyp 001402 automatic pointer dcl 616 set ref 636* 648 702 c based structure level 1 unaligned dcl 878 call_lock_meters 16 based structure level 2 dcl 2-74 set ref 921 921 chanid 4 based char(8) level 2 dcl 2-132 set ref 896* channel_sum 000116 automatic float bin(63) dcl 52 set ref 679* 697* 697 channel_time 000120 automatic float bin(63) dcl 53 set ref 695* 697 739 739 channel_wait 16 based fixed bin(52,0) array level 3 dcl 2-190 ref 586 586 695 695 channel_wait_sum 001364 automatic fixed bin(71,0) dcl 564 set ref 584* 586* 586 590 601 channels 11 based bit(18) level 2 packed packed unaligned dcl 2-74 ref 884 885 chantab based structure level 1 dcl 2-132 check_star_name_$entry 000042 constant entry external dcl 152 ref 301 clock_ 000044 constant entry external dcl 153 ref 426 code 000122 automatic fixed bin(35,0) dcl 54 in procedure "dskm" set ref 184* 185 186* 193* 194* 196* 213* 214 301* 303 304* 333* 334 337* 338 364* 366 370* 372 376* 378 382* 384 555* code 001530 automatic fixed bin(35,0) dcl 960 in procedure "init_args" set ref 963* 964 974* 975 com_err_ 000046 constant entry external dcl 154 ref 186 194 220 287 297 304 314 399 421 555 comb 40 based fixed bin(35,0) array level 3 dcl 2-74 set ref 601 601 601 601 connects 16 based fixed bin(17,0) level 2 dcl 878 ref 889 889 896 896 copy_size 000010 internal static fixed bin(19,0) dcl 55 set ref 217* 219 224 333* 550 550 count 1 based fixed bin(35,0) level 2 in structure "q" dcl 858 in procedure "print_q_stats" ref 863 863 863 863 count based fixed bin(17,0) level 2 in structure "l" dcl 939 in procedure "print_lock" ref 942 942 948 948 cp 001342 automatic pointer dcl 2-97 set ref 885* 889 889 889 889 896 896 896 896 896 896 896 896 896 896 896 896 896 cu_$arg_count_rel 000050 constant entry external dcl 155 ref 963 cu_$arg_list_ptr 000052 constant entry external dcl 156 ref 179 cu_$arg_ptr_rel 000054 constant entry external dcl 157 ref 974 date_time 000123 automatic char(24) packed unaligned dcl 56 set ref 454* 455* date_time_ 000056 constant entry external dcl 158 ref 454 delta 000132 automatic fixed bin(71,0) dcl 57 set ref 430* 431 433 depth 116 based float bin(27) array level 3 in structure "disk_data" dcl 2-31 in procedure "dskm" set ref 465* depth 15(18) based fixed bin(17,0) array level 3 in structure "devtab" packed packed unaligned dcl 2-190 in procedure "dskm" set ref 739* depth 2(18) based fixed bin(17,0) level 2 in structure "q" packed packed unaligned dcl 858 in procedure "print_q_stats" set ref 863* depth_map 121 based bit(18) array level 3 packed packed unaligned dcl 2-31 set ref 459 dev parameter fixed bin(17,0) dcl 614 in procedure "print_dev" ref 609 632 633 634 666 739 770 dev 000134 automatic fixed bin(17,0) dcl 58 in procedure "dskm" set ref 406* 408 409 525* 526 529 530 532 535 568 569 572 593* 596 596 599 599 601 601 601 601 dev_pic 000135 automatic picture(2) packed unaligned dcl 59 set ref 568* 596 599 666* device_read_sum 001406 automatic fixed bin(35,0) dcl 618 set ref 681* 717* 717 761 device_seeks 001410 automatic float bin(63) dcl 619 set ref 699* 702* 702 713 717 722 722* 724 739 device_total_io 001412 automatic float bin(63) dcl 620 set ref 761* 762 762* 770 770 829 829 device_type 6(10) based fixed bin(8,0) array level 3 packed packed unsigned unaligned dcl 1-26 set ref 402* 410* 509 device_write_sum 001414 automatic fixed bin(35,0) dcl 621 set ref 681* 713* 713 761 devtab 36 based structure array level 2 in structure "disktab" dcl 2-74 in procedure "dskm" set ref 408 529 530 632 633 636 637 devtab based structure level 1 dcl 2-190 in procedure "dskm" disk_channel_table based structure array level 1 dcl 2-94 set ref 884 885 disk_data based structure level 1 dcl 2-31 set ref 213 213 disk_lock_meters based structure level 1 dcl 2-236 disk_segp 000012 internal static pointer dcl 60 set ref 191* 213* 333* diskp 001340 automatic pointer dcl 2-26 set ref 407* 408 410 411 483* 485 486 487 519* 529 569 574 601 601 633 636 883 884 885 disksp 001336 automatic pointer dcl 2-26 set ref 213 213 228* 333* 395 396 407 407 450 450 450 454 459 465 465 465 479 481 483 483 484 518 519 519 520 550 862 863 885 941 disksp_static 000014 internal static pointer dcl 61 set ref 223* 228 disktab based structure level 1 dcl 2-74 divide builtin function dcl 169 ref 433 434 435 dlp 001514 automatic pointer dcl 936 set ref 941* 942 945 948 948 948 948 948 dp 001416 automatic pointer dcl 622 in procedure "print_dev" set ref 633* 634 634 636 637 645 666 686 686 686 686 695 699 709 726 729 732 735 739 739 739 770 dp 001344 automatic pointer dcl 2-187 in procedure "dskm" set ref 408* 409 409 410 411 529* 532 572 572 573 574 586 594 595 drive_lv 001366 automatic fixed bin(17,0) dcl 565 set ref 570* 666 666 drive_name parameter char packed unaligned dcl 853 in procedure "print_q_stats" set ref 847 863* drive_name 7 based char(8) array level 3 in structure "pv_list" packed packed unaligned dcl 1-26 in procedure "dskm" set ref 376 382 382 396 406 525 770* 778* 806* 813* 820* 823* 826* drive_pv 001370 automatic fixed bin(17,0) dcl 566 set ref 569* 570 663 663* 666 767 767* 770 770 edac_errors 14 based fixed bin(17,0) level 2 in structure "disktab" dcl 2-74 in procedure "dskm" ref 487 487 edac_errors 000136 automatic fixed bin(17,0) dcl 62 in procedure "dskm" set ref 487* 488 488* 488 error_table_$bad_arg 000032 external static fixed bin(35,0) dcl 147 set ref 287* 421* error_table_$badstar 000034 external static fixed bin(35,0) dcl 148 ref 303 error_table_$noarg 000036 external static fixed bin(35,0) dcl 149 set ref 297* error_table_$too_many_names 000040 external static fixed bin(35,0) dcl 150 set ref 314* errors 12 based fixed bin(17,0) level 2 in structure "disktab" dcl 2-74 in procedure "dskm" ref 485 485 errors 000137 automatic fixed bin(17,0) dcl 63 in procedure "dskm" set ref 485* 488 488* 488 f_sv_idx 001451 automatic fixed bin(17,0) dcl 792 set ref 797* 801 803 fdelta 000140 automatic float bin(63) dcl 64 set ref 431* 432 601 739 753 756 770 829 948 ferrors 13 based fixed bin(17,0) level 2 in structure "disktab" dcl 2-74 in procedure "dskm" ref 486 486 ferrors 000142 automatic fixed bin(17,0) dcl 65 in procedure "dskm" set ref 486* 488 488* 488 float builtin function dcl 169 ref 431 450 645 648 695 699 702 726 729 732 735 753 756 863 863 942 945 948 948 948 float_seconds 000143 automatic float bin(27) dcl 66 set ref 432* 514 540 545 601 float_seek 000144 automatic float bin(63) dcl 67 set ref 699* 720 720* 726 fraction 120 based float bin(27) array level 3 dcl 2-31 set ref 465* free_offset 1 based bit(18) level 2 dcl 2-31 ref 217 223 free_q 4 based structure level 2 dcl 2-31 set ref 448 448 free_q_size 10 based fixed bin(17,0) level 2 dcl 2-31 set ref 863* get_temp_segment_ 000060 constant entry external dcl 159 ref 184 get_vol_list_ 000062 constant entry external dcl 160 ref 337 get_vol_list_version 000006 constant char(8) initial packed unaligned dcl 1-24 set ref 337* hbound builtin function dcl 169 ref 308 headed 001476 automatic bit(1) packed unaligned dcl 877 set ref 882* 890 894* hours 001330 automatic picture(6) packed unaligned dcl 139 set ref 435* 437 439* i 000146 automatic fixed bin(17,0) dcl 68 set ref 356* 357 364 370 376 382 382 396 402 406 415* 457* 459 465 465 465 465 465* 585* 586 586* 643* 644 645 645 648 648* 682* 686 686 686 686 686 686 686 686 686 695 695 699 699 702 702 709 709 711 726 726 729 729 732 732 735 735 739 739 739 744* 883* 884 885* i_minutes 000147 automatic fixed bin(17,0) dcl 69 set ref 434* 435 436 437 i_seconds 000150 automatic fixed bin(17,0) dcl 70 set ref 433* 434 436 index builtin function dcl 169 ref 235 319 inop 6(22) based bit(1) level 2 packed packed unaligned dcl 878 ref 889 896 int_lock_meters 22 based structure level 2 dcl 2-74 set ref 923 923 io_name 000030 constant char(6) initial array packed unaligned dcl 113 set ref 465* 465* 739* 744* io_per_second 000151 automatic float bin(27) dcl 71 set ref 474* 513* 513 539* 539 545 545 io_per_second_per_drive 000152 automatic float bin(27) dcl 72 set ref 531* 534 601 660* 660 io_per_second_per_subsystem 000153 automatic float bin(27) dcl 74 set ref 513 514 514 517* 534* 534 539 540 540 ioa_ 000064 constant entry external dcl 161 ref 439 450 455 462 465 488 497 498 514 540 545 601 666 672 686 739 744 770 778 820 823 829 863 891 896 910 920 948 ioa_$nnl 000066 constant entry external dcl 162 ref 806 813 826 ioi_use 6(21) based bit(1) level 2 packed packed unaligned dcl 878 ref 889 896 is_sub_vol 6(05) based bit(1) array level 3 packed packed unaligned dcl 1-26 ref 526 663 767 j 000154 automatic fixed bin(17,0) dcl 76 set ref 361* 362 364 370 376 382* 458* 459* 463* 465 l based structure level 1 unaligned dcl 939 l_sv_idx 001452 automatic fixed bin(17,0) dcl 792 set ref 801* 803 806 813 819 840 lock_name parameter char packed unaligned dcl 933 set ref 927 948* lockings 001516 automatic float bin(63) dcl 937 set ref 942* 943 948 lv_index 001453 automatic fixed bin(17,0) dcl 792 set ref 804* 806 806 lv_info 6 based structure array level 2 dcl 1-46 lv_list based structure level 1 unaligned dcl 1-46 set ref 202 lv_list_ptr 001332 automatic pointer dcl 1-22 set ref 201* 202 202 341* 370 666 666 666 672 672 672 806 806 806 813 lv_name_count 5 based fixed bin(17,0) level 2 dcl 1-46 ref 202 lv_name_max_length 4 based fixed bin(17,0) level 2 dcl 1-46 set ref 666* 672* 806* 813* lv_ptr 000016 internal static pointer initial dcl 77 set ref 200 201 203* 337* 341 lvname 7 based char(32) array level 3 packed packed unaligned dcl 1-46 set ref 370 666* 672* 806* lvx 6(18) based fixed bin(17,0) array level 3 packed packed unaligned dcl 1-26 ref 370 570 575 804 match 000226 automatic structure array level 1 unaligned dcl 120 set ref 308 match_count 000224 automatic fixed bin(17,0) dcl 118 set ref 232* 308 309* 309 310 311 359 361 match_keys 000010 constant char(16) initial array packed unaligned dcl 133 set ref 297* match_star_name_ 000070 constant entry external dcl 163 ref 364 370 376 382 match_type 000225 automatic fixed bin(17,0) dcl 119 set ref 271* 275* 279* 283* 292* 297 311 max_depth 117 based float bin(27) array level 3 in structure "disk_data" dcl 2-31 in procedure "dskm" set ref 465* max_depth 2 based fixed bin(17,0) level 2 in structure "q" packed packed unaligned dcl 858 in procedure "print_q_stats" set ref 863* max_depth_reset_time 114 based fixed bin(71,0) level 2 dcl 2-31 set ref 454* minutes 001327 automatic picture(2) packed unaligned dcl 138 set ref 437* 439* multiplier 12 based float bin(27) array level 3 dcl 2-190 set ref 739* name 12 based char(4) array level 3 in structure "disk_data" packed packed unaligned dcl 2-31 in procedure "dskm" ref 396 481 518 name 1 000226 automatic char(32) array level 2 in structure "match" packed packed unaligned dcl 120 in procedure "dskm" set ref 310* 364* 370* 376* 382* nchan 1 based fixed bin(17,0) level 2 dcl 2-74 ref 883 need_buddy 001420 automatic bit(1) packed unaligned dcl 623 set ref 635* 639* 648 702 no_io_terminate 34 based fixed bin(35,0) level 2 dcl 878 ref 896 896 896 896 no_status_terminate 36 based fixed bin(35,0) level 2 dcl 878 ref 896 896 896 896 null builtin function dcl 169 ref 182 198 200 203 205 208 337 337 num_of_sv 22 based fixed bin(17,0) array level 3 dcl 1-26 ref 801 obuddyp 001422 automatic pointer dcl 624 set ref 637* 648 702 ocp 001474 automatic pointer dcl 876 set ref 884* 889 896 896 896 896 896 896 896 896 896 odiskp 000156 automatic pointer dcl 79 set ref 484* 485 486 487 520* 530 596 596 599 599 601 601 632 637 921 921 922 922 923 923 924 924 odisksp 000160 automatic pointer dcl 80 set ref 190* 217 218 223 226* 448 448 450 450 459 484 520 884 odlp parameter pointer dcl 934 ref 927 941 942 945 948 948 948 948 948 odp 001424 automatic pointer dcl 625 in procedure "print_dev" set ref 632* 645 686 686 686 686 695 699 709 726 729 732 735 odp 000162 automatic pointer dcl 81 in procedure "dskm" set ref 530* 586 offset 11 based bit(18) array level 3 packed packed unaligned dcl 2-31 ref 407 483 484 519 520 old_clock 000020 internal static fixed bin(71,0) initial dcl 82 set ref 199* 427 428* 430 551* old_dev 000164 automatic fixed bin(17,0) dcl 83 set ref 505* 522* 526 535* old_sx 000165 automatic fixed bin(17,0) dcl 84 set ref 504* 510 511 521* opt_info based structure level 1 dcl 2-217 in procedure "dskm" opt_info 12 based structure array level 2 in structure "devtab" dcl 2-190 in procedure "dskm" oqhtp parameter pointer dcl 854 ref 847 862 863 863 863 pdi 0(30) based fixed bin(6,0) level 2 packed packed unsigned unaligned dcl 2-190 ref 409 409 410 411 532 634 666 739 770 pdirs_ok 6(05) based bit(1) array level 3 packed packed unaligned dcl 1-46 set ref 666* 672* 806* print parameter bit(1) packed unaligned dcl 855 ref 847 860 print_busy 000166 automatic bit(1) packed unaligned dcl 85 set ref 175* 241* 250* 260* 601 print_channels 000167 automatic bit(1) packed unaligned dcl 86 set ref 175* 239* 249* 328 880 print_detail 000170 automatic bit(1) packed unaligned dcl 87 set ref 175* 241* 250* 496 662 686 739 765 805 print_drive 000171 automatic bit(1) packed unaligned dcl 88 set ref 175* 251* 257* 328 328* 496 739 765 805 print_header 000172 automatic bit(1) packed unaligned dcl 89 set ref 175* 251* 254* 328 328* 479 print_io_rate 000173 automatic bit(1) packed unaligned dcl 90 set ref 175* 250* 263* 514 540 545 print_queue 000174 automatic bit(1) packed unaligned dcl 91 set ref 176* 243* 249* 596* 599* print_subsys 000175 automatic bit(1) array packed unaligned dcl 92 set ref 176* 353* 404* 482 print_system 000176 automatic bit(1) packed unaligned dcl 93 set ref 176* 245* 249* 328 447 ptr builtin function dcl 169 ref 223 pv 000177 automatic fixed bin(17,0) dcl 94 set ref 506* 507 509 525 526* pv_index parameter fixed bin(17,0) dcl 791 set ref 788 797 797 801 840* pv_info 6 based structure array level 2 dcl 1-26 pv_list based structure level 1 unaligned dcl 1-26 set ref 207 pv_list_ptr 001334 automatic pointer dcl 1-22 set ref 206* 207 207 342* 343 356 357 364 370 376 382 382 396 402 406 410 411 415 506 507 509 525 526 570 575 663 666 666 672 672 767 770 770 778 778 797 801 804 806 806 806 806 813 813 820 820 820 823 826 826 826 pv_name_count 5 based fixed bin(17,0) level 2 dcl 1-26 ref 207 356 506 pv_name_max_length 4 based fixed bin(17,0) level 2 dcl 1-26 set ref 343 666* 672* 806* 813* pv_name_max_space 000200 automatic fixed bin(17,0) dcl 95 set ref 343* 497* 498* 770* 778* 820* 826* 826* pv_ptr 000022 internal static pointer initial dcl 96 set ref 205 206 208* 337* 342 pvname 11 based char(32) array level 3 packed packed unaligned dcl 1-26 set ref 364 666* 672* 770* 778* 806* 820* 826* pvtx 36 based fixed bin(8,0) array level 3 packed packed unaligned dcl 2-74 set ref 410 411 569 574 q based structure level 1 unaligned dcl 858 qht based structure level 1 dcl 2-179 qhtp 001464 automatic pointer dcl 857 set ref 862* 863 863 863 863 863 quentry based structure level 1 dcl 2-107 queue_sum 000202 automatic float bin(63) dcl 97 set ref 679* 735* 735 queue_wait 20 based fixed bin(52,0) array level 3 dcl 2-190 ref 732 732 735 735 read_sum 001426 automatic fixed bin(35,0) dcl 626 set ref 681* 716* 716 751 753 757 770 770* 778 778* 829 829* rel builtin function dcl 169 ref 459 862 941 release_temp_segment_ 000072 constant entry external dcl 164 ref 196 reset 000204 automatic bit(1) packed unaligned dcl 98 set ref 176* 266* 443 548 ring0_get_$segptr 000076 constant entry external dcl 166 ref 191 ring_zero_peek_ 000074 constant entry external dcl 165 ref 213 333 rrset 000205 automatic bit(1) packed unaligned dcl 99 set ref 176* 268* 548 run_lock_meters 32 based structure level 2 dcl 2-74 set ref 922 922 save_clock 000206 automatic fixed bin(71,0) dcl 100 set ref 426* 430 551 seconds 001326 automatic picture(2) packed unaligned dcl 137 set ref 436* 439* seek_count 23 based fixed bin(35,0) array level 3 packed packed unaligned dcl 2-190 ref 645 645 648 648 686 686 686 686 699 699 702 702 709 709 seek_sum 22 based fixed bin(35,0) array level 3 in structure "devtab" packed packed unaligned dcl 2-190 in procedure "dskm" ref 686 686 686 686 726 726 729 729 seek_sum 000214 automatic float bin(63) dcl 103 in procedure "dskm" set ref 642* 645* 645 656 660 seek_to_time 000210 automatic float bin(63) dcl 101 set ref 724* 732 739 seeks 000212 automatic fixed bin(35,0) dcl 102 set ref 709* 712 716 739* 744* seg_overlay based bit(36) array packed unaligned dcl 143 set ref 224* 550* 550 selected_drive 000216 automatic bit(1) packed unaligned dcl 104 set ref 354* 393* 420 size builtin function dcl 169 ref 213 213 small_code 000217 automatic fixed bin(17,0) dcl 105 set ref 191* 192 193 stagnate_time 111 based fixed bin(35,0) level 2 dcl 2-31 ref 450 status_from_run 37 based fixed bin(35,0) level 2 dcl 878 ref 896 896 896 896 sub_sys_limit 000024 internal static fixed bin(17,0) dcl 106 set ref 218* substr builtin function dcl 169 ref 382 382 396 406 525 subsys_name 000220 automatic char(4) packed unaligned dcl 107 set ref 481* 488* 514* 518* 540* 596 599 666* 672* 891* subsystems based fixed bin(17,0) level 2 dcl 2-31 ref 218 395 479 sum based fixed bin(35,0) level 2 dcl 858 ref 863 863 sv_idx 001450 automatic fixed bin(17,0) dcl 792 set ref 803* 804 806 806 806 806 813 813 819 820 820 820 823 826 826 826* sv_num 21 based fixed bin(17,0) array level 3 dcl 1-26 ref 797 sx 000221 automatic fixed bin(17,0) dcl 108 set ref 395* 396* 402 404 407 410 479* 481 482 483 484* 509* 510 518 519 520 521 sys_info based structure level 1 dcl 2-59 in procedure "dskm" sys_info 116 based structure array level 2 in structure "disk_data" dcl 2-31 in procedure "dskm" set ref 459 sys_info$max_seg_size 000030 external static fixed bin(35,0) dcl 145 ref 219 system_info_$timeup 000100 constant entry external dcl 167 ref 428 temp_segp 000026 internal static pointer initial dcl 109 set ref 182 184* 190 196* 198* 213* 223 224 226 550 terminate_not_active 35 based fixed bin(35,0) level 2 dcl 878 ref 896 896 896 896 total_io 001430 automatic float bin(63) dcl 627 set ref 757* 758 758* 770 770 778 778 829 829 total_read 001432 automatic float bin(63) dcl 628 set ref 751* 753* 770 770* 778 778* 829 829* total_seek 000222 automatic float bin(63) dcl 111 set ref 680* 729* 729 770 778 829 total_write 001434 automatic float bin(63) dcl 629 set ref 754* 756* 770 770* 778 778* 829 829* type 000226 automatic fixed bin(17,0) array level 2 dcl 120 set ref 311* 362 unspec builtin function dcl 169 set ref 224* 550* 550 used 6 based bit(1) array level 3 packed packed unaligned dcl 1-26 set ref 357 411* 415* 507 806 820 826* wait_time 2 based fixed bin(52,0) level 2 dcl 939 ref 948 948 948 948 waitings 001520 automatic float bin(63) dcl 938 set ref 945* 946 946* 948 waits 1 based fixed bin(17,0) level 2 dcl 939 ref 945 945 948 948 948 948 wq 44 based structure array level 3 dcl 2-74 set ref 596 596 599 599 write_map defined bit(1) array packed unaligned dcl 2-269 ref 711 write_mapping 000004 constant bit(7) initial packed unaligned dcl 2-268 ref 711 711 write_sum 001436 automatic fixed bin(35,0) dcl 630 set ref 681* 712* 712 754 756 757 770 770* 778 778* 829 829* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. BOOTLOAD_READ internal static fixed bin(4,0) initial dcl 2-251 BOOTLOAD_WRITE internal static fixed bin(4,0) initial dcl 2-251 DSC_LISTX internal static fixed bin(12,0) initial dcl 2-241 IO_TYPE internal static char(16) initial array packed unaligned dcl 2-262 PAGE_READ internal static fixed bin(4,0) initial dcl 2-251 PAGE_WRITE internal static fixed bin(4,0) initial dcl 2-251 RSS_LISTX internal static fixed bin(12,0) initial dcl 2-241 RST_LISTX internal static fixed bin(12,0) initial dcl 2-241 SC_LISTX internal static fixed bin(12,0) initial dcl 2-241 VTOC_READ internal static fixed bin(4,0) initial dcl 2-251 VTOC_WRITE internal static fixed bin(4,0) initial dcl 2-251 bootload_map defined bit(1) array packed unaligned dcl 2-279 bootload_mapping internal static bit(7) initial packed unaligned dcl 2-278 disk_seg$ external static fixed bin(17,0) dcl 2-24 dskdcl_chans_per_subsys internal static fixed bin(17,0) initial dcl 2-70 dskdcl_chans_per_subsys_shift internal static fixed bin(17,0) initial dcl 2-71 optp automatic pointer dcl 2-26 pvtdi based structure level 1 dcl 2-229 pvtdip automatic pointer dcl 2-187 qp automatic pointer dcl 2-97 sector_map defined bit(1) array packed unaligned dcl 2-274 sector_mapping internal static bit(7) initial packed unaligned dcl 2-273 sysp automatic pointer dcl 2-26 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR_RETURN 004251 constant label dcl 555 ref 334 338 964 RELEASE_RETURN 001407 constant label dcl 194 ref 214 221 disk_meters 001236 constant entry external dcl 37 drive_accept 002672 constant label dcl 393 ref 359 366 372 378 384 drive_no_match 002667 constant label dcl 387 ref 368 374 380 386 drive_skip 003034 constant label dcl 415 ref 389 dskm 001227 constant entry external dcl 37 end_accept_loop 003041 constant label dcl 417 ref 357 413 end_parse_loop 002352 constant label dcl 323 ref 317 get_match_names 002151 constant label dcl 295 ref 272 276 280 284 get_next_arg 007445 constant entry internal dcl 970 ref 234 295 317 init_args 007414 constant entry internal dcl 957 ref 180 mapped 003455 constant label dcl 465 ref 459 match_case 000000 constant label array(4) dcl 364 ref 362 match_name_loop 002214 constant label dcl 301 ref 293 321 parse_loop 001625 constant label dcl 235 ref 319 print_channel_info 006702 constant entry internal dcl 870 ref 512 538 print_dev 004565 constant entry internal dcl 609 ref 593 595 print_device 004267 constant entry internal dcl 561 ref 532 print_lock 007265 constant entry internal dcl 927 ref 921 922 923 924 print_q_stats 006554 constant entry internal dcl 847 ref 448 596 599 print_subsys_info 007202 constant entry internal dcl 914 ref 492 print_sv 006074 constant entry internal dcl 788 ref 663 767 release_quit 001432 constant label dcl 196 ref 237 reset_meter 004232 constant label dcl 548 ref 443 skip_drive 004141 constant label dcl 535 ref 507 526 sub_sys_accept 002747 constant label dcl 402 ref 396 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 10160 10262 7701 10170 Length 10602 7701 102 303 256 20 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME dskm 1748 external procedure is an external procedure. print_device internal procedure shares stack frame of external procedure dskm. print_dev internal procedure shares stack frame of external procedure dskm. print_sv internal procedure shares stack frame of external procedure dskm. print_q_stats internal procedure shares stack frame of external procedure dskm. print_channel_info internal procedure shares stack frame of external procedure dskm. print_subsys_info internal procedure shares stack frame of external procedure dskm. print_lock internal procedure shares stack frame of external procedure dskm. init_args internal procedure shares stack frame of external procedure dskm. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 copy_size dskm 000012 disk_segp dskm 000014 disksp_static dskm 000016 lv_ptr dskm 000020 old_clock dskm 000022 pv_ptr dskm 000024 sub_sys_limit dskm 000026 temp_segp dskm STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME dskm 000100 arg_count dskm 000101 arg_index dskm 000102 arg_len dskm 000104 arg_list_ptr dskm 000106 arg_ptr dskm 000110 ave_queue dskm 000112 ave_seek dskm 000114 buddy_pic dskm 000116 channel_sum dskm 000120 channel_time dskm 000122 code dskm 000123 date_time dskm 000132 delta dskm 000134 dev dskm 000135 dev_pic dskm 000136 edac_errors dskm 000137 errors dskm 000140 fdelta dskm 000142 ferrors dskm 000143 float_seconds dskm 000144 float_seek dskm 000146 i dskm 000147 i_minutes dskm 000150 i_seconds dskm 000151 io_per_second dskm 000152 io_per_second_per_drive dskm 000153 io_per_second_per_subsystem dskm 000154 j dskm 000156 odiskp dskm 000160 odisksp dskm 000162 odp dskm 000164 old_dev dskm 000165 old_sx dskm 000166 print_busy dskm 000167 print_channels dskm 000170 print_detail dskm 000171 print_drive dskm 000172 print_header dskm 000173 print_io_rate dskm 000174 print_queue dskm 000175 print_subsys dskm 000176 print_system dskm 000177 pv dskm 000200 pv_name_max_space dskm 000202 queue_sum dskm 000204 reset dskm 000205 rrset dskm 000206 save_clock dskm 000210 seek_to_time dskm 000212 seeks dskm 000214 seek_sum dskm 000216 selected_drive dskm 000217 small_code dskm 000220 subsys_name dskm 000221 sx dskm 000222 total_seek dskm 000224 match_count dskm 000225 match_type dskm 000226 match dskm 001326 seconds dskm 001327 minutes dskm 001330 hours dskm 001332 lv_list_ptr dskm 001334 pv_list_ptr dskm 001336 disksp dskm 001340 diskp dskm 001342 cp dskm 001344 dp dskm 001364 channel_wait_sum print_device 001366 drive_lv print_device 001367 buddy_lv print_device 001370 drive_pv print_device 001371 buddy_pv print_device 001402 buddyp print_dev 001404 buddy_seeks print_dev 001406 device_read_sum print_dev 001410 device_seeks print_dev 001412 device_total_io print_dev 001414 device_write_sum print_dev 001416 dp print_dev 001420 need_buddy print_dev 001422 obuddyp print_dev 001424 odp print_dev 001426 read_sum print_dev 001430 total_io print_dev 001432 total_read print_dev 001434 total_write print_dev 001436 write_sum print_dev 001450 sv_idx print_sv 001451 f_sv_idx print_sv 001452 l_sv_idx print_sv 001453 lv_index print_sv 001464 qhtp print_q_stats 001474 ocp print_channel_info 001476 headed print_channel_info 001514 dlp print_lock 001516 lockings print_lock 001520 waitings print_lock 001530 code init_args THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. fx1_to_fl2 r_l_a r_g_a r_e_as r_ne_as call_ext_out_desc call_ext_out return_mac fl2_to_fx1 mpfx2 signal_op ext_entry any_to_any_truncate_unpack_picture divide_fx3 op_freen_ THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. check_star_name_$entry clock_ com_err_ cu_$arg_count_rel cu_$arg_list_ptr cu_$arg_ptr_rel date_time_ get_temp_segment_ get_vol_list_ ioa_ ioa_$nnl match_star_name_ release_temp_segment_ ring0_get_$segptr ring_zero_peek_ system_info_$timeup THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$bad_arg error_table_$badstar error_table_$noarg error_table_$too_many_names sys_info$max_seg_size LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 37 001226 175 001243 176 001251 179 001267 180 001276 182 001277 184 001304 185 001324 186 001326 187 001352 190 001353 191 001356 192 001404 193 001406 194 001407 196 001432 198 001453 199 001456 200 001460 201 001464 202 001466 203 001474 205 001477 206 001503 207 001505 208 001513 210 001516 213 001517 214 001536 217 001540 218 001545 219 001547 220 001553 221 001577 223 001600 224 001604 225 001612 226 001613 228 001615 232 001617 234 001620 235 001625 237 001641 239 001651 241 001664 243 001700 245 001713 248 001726 249 001736 250 001744 251 001747 252 001751 254 001752 257 001765 260 002000 263 002007 266 002016 268 002031 270 002044 271 002054 272 002056 274 002057 275 002067 276 002071 278 002072 279 002102 280 002104 282 002105 283 002115 284 002117 287 002120 288 002144 290 002145 292 002146 293 002150 295 002151 297 002156 298 002213 301 002214 303 002234 304 002240 305 002263 308 002264 309 002267 310 002270 311 002300 312 002303 314 002304 315 002327 317 002330 319 002335 321 002351 323 002352 328 002353 333 002366 334 002403 337 002405 338 002426 341 002430 342 002433 343 002435 353 002440 354 002452 356 002453 357 002463 359 002470 361 002472 362 002501 364 002505 366 002536 368 002540 370 002541 372 002577 374 002601 376 002602 378 002632 380 002634 382 002635 384 002664 386 002666 387 002667 389 002671 393 002672 395 002674 396 002703 398 002717 399 002721 400 002746 402 002747 404 002754 406 002760 407 002774 408 003003 409 003007 410 003016 411 003031 413 003033 415 003034 417 003041 420 003043 421 003045 422 003074 426 003075 427 003104 428 003107 430 003115 431 003121 432 003124 433 003127 434 003134 435 003136 436 003150 437 003166 439 003214 443 003243 447 003245 448 003247 450 003261 454 003342 455 003360 457 003400 458 003407 459 003415 461 003432 462 003434 463 003453 465 003455 470 003530 474 003532 479 003534 481 003545 482 003551 483 003556 484 003564 485 003567 486 003572 487 003575 488 003600 492 003677 494 003700 496 003702 497 003706 498 003734 504 003754 505 003755 506 003757 507 003767 509 003774 510 004000 511 004002 512 004004 513 004005 514 004010 517 004043 518 004045 519 004052 520 004060 521 004063 522 004065 525 004067 526 004107 529 004117 530 004124 531 004127 532 004131 534 004136 535 004141 537 004143 538 004145 539 004146 540 004151 545 004204 548 004232 550 004236 551 004246 553 004250 555 004251 557 004266 561 004267 568 004270 569 004300 570 004306 572 004314 573 004323 574 004333 575 004337 576 004344 578 004345 579 004351 584 004353 585 004355 586 004363 588 004373 590 004375 593 004400 594 004402 595 004407 596 004412 598 004445 599 004446 601 004466 607 004564 609 004565 632 004567 633 004574 634 004577 635 004611 636 004613 637 004617 638 004622 639 004623 642 004624 643 004627 644 004635 645 004637 648 004654 655 004672 656 004674 660 004700 662 004703 663 004705 666 004717 672 005007 679 005073 680 005076 681 005077 682 005103 686 005111 693 005215 695 005216 697 005227 699 005231 702 005243 709 005261 711 005263 712 005270 713 005274 714 005301 716 005302 717 005306 720 005313 722 005317 724 005323 726 005325 729 005337 732 005342 735 005351 739 005354 744 005457 747 005513 751 005515 753 005522 754 005530 756 005535 757 005543 758 005551 761 005554 762 005562 765 005565 767 005571 770 005603 778 005750 843 006073 788 006074 797 006076 801 006105 803 006111 804 006117 805 006126 806 006132 813 006227 817 006271 819 006272 820 006275 823 006335 824 006356 826 006357 829 006430 836 006546 840 006550 841 006553 847 006554 860 006565 862 006574 863 006602 866 006701 870 006702 880 006703 882 006706 883 006707 884 006717 885 006731 889 006736 890 006744 891 006746 894 006766 896 006770 909 007172 910 007174 911 007201 914 007202 920 007203 921 007217 922 007232 923 007242 924 007252 925 007264 927 007265 941 007276 942 007305 943 007311 945 007313 946 007317 948 007323 952 007413 957 007414 962 007417 963 007421 964 007434 966 007436 970 007445 973 007450 974 007453 975 007472 976 007474 977 007475 980 007511 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved