COMPILATION LISTING OF SEGMENT before_journal_meters Compiled by: Multics PL/I Compiler, Release 33a, of May 30, 1990 Compiled at: ACTC Technologies Inc. Compiled on: 10/16/90 1521.0 mdt Tue Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) BULL HN Information Systems Inc., 1990 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 6* * * 7* *********************************************************** */ 8 9 10 11 12 13 14 /****^ HISTORY COMMENTS: 15* 1) change(90-09-10,Zimmerman), approve(90-09-10,MCR8199), 16* audit(90-10-12,Gray), install(90-10-16,MR12.4-1043): 17* Cause -rr and -rs to reset metering time, generate stats in absence of 18* before_journal, correct attemp to print no-existant data when process is 19* non-priveledged. 20* END HISTORY COMMENTS */ 21 22 23 24 25 26 /* DESCRIPTION: 27* before_journal_meters - command level interface to bjm_get_journal_status 28* and interface to ring zero meters in dm_journal_seg_ 29* 30* usage: 31* bjmt [JNL_PATH1 ... JNL_PATHn] [-rr] [-rs] [-lg] 32**/ 33 34 /* HISTORY: 35*Written by M. Pandolf, 09/01/83. 36*Modified: 37*01/01/84 by M. Pandolf: to add .bj suffix to pathnames and fix reference 38* to dm_journal. 39*12/03/84 by Maggie Sharpe: to use ERROR_RETURN; to reference dm_journal_segp 40* only if metering_regions_filled is on; cleaned up dcls and format. 41*12/13/84 by R. Michael Tague: Added -bf control argument. 42*12/17/84 by R. Michael Tague: Rationalized control argument flag settings. 43*01/16/85 by R. Michael Tague: Stopped the -lg argument from causing the 44* user_wants_meters_printed flag to be set. 45*02/14/85 by R. Michael Tague: Changed the -bf argument so that it would not 46* set the user_wants_meters_printed flag. 47*03/19/85 by S. Cox: Added dm_not_available_ handler. 48*03/27/85 by Lee A. Newcomb: Added reporting of the new 49* transaction_storage_limit_hits per-journal meter. 50*04/09/85 by Lee A. Newcomb: To use convert_access_class_ and not the obsolete 51* convert_authorization_. 52**/ 53 54 /* format: style2 */ 55 56 before_journal_meters: 57 bjmt: 58 procedure () options (variable); 59 60 61 /* DECLARATIONS */ 62 63 /* Automatic */ 64 65 dcl arg_count fixed bin; /* number of command line args */ 66 dcl status_code fixed bin (35); /* standard system status code */ 67 dcl user_wants_meters_reset 68 bit (1) aligned; /* true if ctl arg was -rr or -rs */ 69 dcl user_wants_meters_printed 70 bit (1) aligned; /* true if ctl arg was -rr, -lg, or */ 71 dcl user_wants_long_report bit (1) aligned; /* true if ctl arg was -lg */ 72 dcl arg_number fixed bin; /* index into command line args */ 73 dcl arg_ptr pointer; /* pointer to a command line arg */ 74 dcl arg_length fixed bin (21); /* length of command line arg pointed to by arg_ptr */ 75 dcl metering_regions_filled 76 bit (1) aligned; /* true if current copy of dm_journal_seg_ is available */ 77 dcl journal_seg_max_length fixed bin (19); /* self explanatory */ 78 dcl binary_time fixed bin (71); /* standard clock time */ 79 dcl ascii_time char (24); /* above time, but readable by Joe Average */ 80 dcl area_ptr pointer; /* used instead of many calls to get_system_free_area_ */ 81 dcl bj_index fixed bin; /* index into bj_status for one journal */ 82 dcl bj_dir char (168); /* directory path of dir containing journal */ 83 dcl bj_entry char (32); /* entry name of journal */ 84 dcl new_ptr pointer dim (1); /* pointer to copy of current ring 0 meter image */ 85 dcl old_ptr pointer dim (1); /* pointer to copy of previous ring 0 meter image */ 86 dcl total_metering_time fixed bin (71); /* raw number of seconds for this meter */ 87 dcl total_metering_seconds fixed bin; /* number of seconds for display */ 88 dcl total_metering_minutes fixed bin; /* number of minutes for display */ 89 dcl total_metering_hours fixed bin; /* number of hours for display */ 90 dcl avg_n_bytes_per_bi fixed bin (71); /* self explanatory */ 91 dcl avg_n_ci_per_recycle fixed bin (71); /* self explanatory */ 92 dcl avg_n_bytes_per_txn fixed bin (71); /* self explanatory */ 93 dcl avg_n_bi_per_txn fixed bin (71); /* self explanatory */ 94 dcl total_bi_bytes fixed bin (71); /* sum of all before bytes written in journal */ 95 dcl total_bi_written fixed bin (71); /* sum of all bi written, incl recycled */ 96 dcl total_non_null_txns fixed bin (71); /* count of txns having > 0 records */ 97 dcl total_recycles fixed bin (71); /* self explanatory */ 98 dcl total_ci_recycled fixed bin (71); /* sum of no. times each ci recycled */ 99 dcl local_area area; /* allocate and forget about freeing */ 100 dcl is_pathname_ptr pointer; /* self explanatory */ 101 dcl no_path_specified bit (1); /* true if command line specifies no path */ 102 103 /* Based */ 104 105 dcl arg char (arg_length) based (arg_ptr); 106 dcl first_arg_char char (1) based (arg_ptr); 107 dcl is_pathname dim (arg_count) bit (1) aligned based (is_pathname_ptr); 108 109 /* Builtin */ 110 111 dcl (addr, clock, divide, empty, mod, null, unspec) 112 builtin; 113 114 /* Constant */ 115 116 dcl ( 117 IOA_GENERAL_RS_NO_NEW_LINE 118 bit (1) aligned init ("0"b), 119 IOA_GENERAL_RS_DONT_PAD 120 bit (1) aligned init ("1"b), 121 MY_NAME char (32) init ("before_journal_meters") 122 ) internal static options (constant); 123 124 /* Entry */ 125 126 dcl before_journal_manager_$get_journal_status 127 entry (char (*), char (*), ptr, ptr, ptr, fixed bin (35)); 128 dcl com_err_ entry () options (variable); 129 dcl convert_access_class_$to_string 130 entry (bit (72) aligned, char (*), fixed bin (35)); 131 dcl cu_$arg_count entry (fixed bin, fixed bin (35)); 132 dcl cu_$arg_list_ptr entry (ptr); 133 dcl cu_$arg_ptr entry (fixed bin, ptr, fixed bin (21), fixed bin (35)); 134 dcl date_time_ entry (fixed bin (71), char (*)); 135 dcl expand_pathname_$add_suffix 136 entry (char (*), char (*), char (*), char (*), fixed bin (35)); 137 dcl get_system_free_area_ entry () returns (ptr); 138 dcl ioa_ entry () options (variable); 139 dcl ioa_$general_rs entry (ptr, fixed bin, fixed bin, char (*), fixed bin (21), bit (1) aligned, 140 bit (1) aligned); 141 dcl metering_util_$define_regions 142 entry options (variable); 143 dcl metering_util_$fill_buffers 144 entry (fixed bin, fixed bin (71), char (*), (*) ptr, (*) ptr, fixed bin (35)); 145 dcl metering_util_$reset entry (fixed bin, fixed bin (35)); 146 dcl ring_zero_peek_$get_max_length 147 entry (char (*), fixed bin (19), fixed bin (35)); 148 149 /* Condition */ 150 151 dcl dm_not_available_ condition; 152 153 /* External Static */ 154 155 dcl dm_error_$system_not_initialized 156 fixed bin (35) ext static; 157 dcl error_table_$bad_arg fixed bin (35) ext static; 158 dcl error_table_$no_info fixed bin (35) ext static; 159 160 /* Internal Static */ 161 162 dcl Metering_regions_defined 163 bit (1) aligned internal static variable init ("0"b); 164 dcl Region_id fixed bin internal static variable init (0); 165 dcl Saved_bj_global_meters_ptr 166 pointer internal static variable init (null ()); 167 dcl Saved_bj_status_ptr pointer internal static variable init (null ()); 168 169 170 171 on dm_not_available_ call ERROR_RETURN (dm_error_$system_not_initialized, ""); 172 173 /* obtain argument info for this command */ 174 175 call cu_$arg_count (arg_count, status_code); 176 if status_code ^= 0 177 then do; 178 call com_err_ (status_code, MY_NAME); 179 goto MAIN_RETURN; 180 end; 181 182 183 /* analyze the args, looking for either a control arg or a pathname */ 184 185 user_wants_meters_reset = "0"b; 186 user_wants_meters_printed = "1"b; 187 user_wants_long_report = "0"b; 188 189 allocate is_pathname in (local_area); 190 is_pathname (*) = "0"b; 191 no_path_specified = "1"b; 192 193 new_ptr (1) = null (); 194 old_ptr (1) = null (); 195 196 arg_processing_loop: 197 do arg_number = 1 to arg_count; 198 call cu_$arg_ptr (arg_number, arg_ptr, arg_length, status_code); 199 if arg_length > 0 200 then if (arg = "-report_reset") | (arg = "-rr") 201 then user_wants_meters_reset, user_wants_meters_printed = "1"b; 202 else if (arg = "-reset") | (arg = "-rs") 203 then do; 204 user_wants_meters_reset = "1"b; 205 user_wants_meters_printed = "0"b; 206 end; 207 else if (arg = "-long") | (arg = "-lg") 208 then user_wants_long_report = "1"b; 209 else if (arg = "-brief") | (arg = "-bf") 210 then user_wants_long_report = "0"b; 211 else if first_arg_char = "-" 212 then call ERROR_RETURN (error_table_$bad_arg, "^/The argument is ""^a"".", arg); 213 else do; 214 is_pathname (arg_number) = "1"b; 215 no_path_specified = "0"b; 216 end; 217 else call ERROR_RETURN (error_table_$bad_arg, "^/One of the supplied arguments is """"."); 218 219 220 end arg_processing_loop; 221 222 /* get a copy of the ring zero meters */ 223 224 metering_regions_filled = "0"b; 225 226 if ^Metering_regions_defined 227 then do; 228 call ring_zero_peek_$get_max_length ("dm_journal_seg_", journal_seg_max_length, status_code); 229 if status_code = 0 230 then do; 231 call metering_util_$define_regions (Region_id, status_code, "dm_journal_seg_", 0, 232 journal_seg_max_length); 233 if status_code = 0 234 then Metering_regions_defined = "1"b; 235 end; 236 end; 237 238 if Metering_regions_defined 239 then do; 240 call metering_util_$fill_buffers (Region_id, binary_time, ascii_time, new_ptr, old_ptr, status_code); 241 if status_code = 0 242 then metering_regions_filled = "1"b; 243 else if status_code ^= error_table_$no_info 244 then call com_err_ (MY_NAME,status_code," :unable to load system meter buffers. "); 245 246 end; 247 else /* status_code set in prev do group */ 248 call ERROR_RETURN (status_code, "^/Undefined metering regions."); 249 250 dm_journal_segp = new_ptr (1); 251 252 /* process each pathname obtained from the command line */ 253 254 area_ptr = get_system_free_area_ (); 255 256 if ^user_wants_meters_printed 257 then goto should_we_reset_meters; 258 259 if no_path_specified 260 then do; 261 262 call before_journal_manager_$get_journal_status ("", "system", area_ptr, bj_status_ptr, 263 bj_global_meters_ptr, status_code); 264 if status_code ^= 0 265 then call ERROR_RETURN (status_code, "^/Unable to get status of the default before journal."); 266 267 else do; 268 call PRINT_GLOBAL_METERS (); 269 270 do bj_index = 1 to bj_status.n_journals; 271 call PRINT_ONE_JOURNAL (bj_index); 272 end; 273 274 if bj_status.n_journals = 0 275 then call ioa_ ("^/There are no journals currently active.^/"); 276 free bj_status_ptr -> bj_status; 277 free bj_global_meters_ptr -> bj_global_meters; 278 end; 279 end; 280 else do arg_number = 1 to arg_count; 281 282 if ^is_pathname (arg_number) 283 then goto /* go WHAT?? */ done_with_pathname; 284 285 call cu_$arg_ptr (arg_number, arg_ptr, arg_length, status_code); 286 call expand_pathname_$add_suffix (arg, "bj", bj_dir, bj_entry, status_code); 287 if status_code ^= 0 288 then call ERROR_RETURN (status_code, "^/Supplied journal pathname is ""^a"".", arg); 289 290 else do; 291 call before_journal_manager_$get_journal_status (bj_dir, bj_entry, area_ptr, bj_status_ptr, 292 bj_global_meters_ptr, status_code); 293 if status_code ^= 0 294 then call ERROR_RETURN (status_code, "^/Supplied journal pathname is ""^a"".", arg); 295 296 else do; 297 call PRINT_ONE_JOURNAL (1); 298 free bj_status_ptr -> bj_status; 299 free bj_global_meters_ptr -> bj_global_meters; 300 end; 301 end; 302 303 done_with_pathname: 304 end; 305 306 /* fulfill any other committments to the user */ 307 308 should_we_reset_meters: 309 if user_wants_meters_reset 310 then do; 311 if Saved_bj_global_meters_ptr ^= null () 312 then free Saved_bj_global_meters_ptr -> bj_global_meters; 313 if Saved_bj_status_ptr ^= null () 314 then free Saved_bj_status_ptr -> bj_status; 315 call before_journal_manager_$get_journal_status ("", "system", area_ptr, Saved_bj_status_ptr, 316 Saved_bj_global_meters_ptr, status_code); 317 Saved_bj_global_meters_ptr -> bj_global_meters.time_of_bootload = clock(); 318 call metering_util_$reset (Region_id, status_code); 319 if status_code ^= 0 then call com_err_(status_code, " reported by metering_util_$reset while attempting to reset meters."); 320 321 end; 322 323 MAIN_RETURN: 324 return; 325 326 327 328 /* INTERNAL PROCEDURES */ 329 330 ERROR_RETURN: 331 proc options (variable); 332 333 dcl ( 334 er_arg_list_ptr ptr, 335 er_code fixed bin (35), 336 er_message char (1024), 337 er_message_length fixed bin (21) 338 ) automatic; 339 340 dcl ( 341 er_fixed_bin_35_value fixed bin (35), 342 er_message_overlay char (er_message_length) 343 ) based; 344 345 call cu_$arg_list_ptr (er_arg_list_ptr); 346 er_code = er_arg_list_ptr -> arg_list.arg_ptrs (1) -> er_fixed_bin_35_value; 347 348 call ioa_$general_rs (er_arg_list_ptr, 2, 3, er_message, er_message_length, IOA_GENERAL_RS_DONT_PAD, 349 IOA_GENERAL_RS_NO_NEW_LINE); 350 call com_err_ (er_code, MY_NAME, addr (er_message) -> er_message_overlay); 351 352 goto MAIN_RETURN; /* does not return */ 353 354 end ERROR_RETURN; 355 356 357 358 PRINT_GLOBAL_METERS: 359 procedure (); 360 361 dcl i fixed bin; 362 363 /* see if we have old copy of the meters for deltas */ 364 365 if Saved_bj_global_meters_ptr = null () 366 then do; 367 allocate bj_global_meters set (Saved_bj_global_meters_ptr); 368 unspec (Saved_bj_global_meters_ptr -> bj_global_meters) = ""b; 369 Saved_bj_global_meters_ptr -> bj_global_meters.time_of_bootload = 370 bj_global_meters_ptr -> bj_global_meters.time_of_bootload; 371 end; 372 373 /* calculate metering time */ 374 375 total_metering_time = 376 divide (clock () - Saved_bj_global_meters_ptr -> bj_global_meters.time_of_bootload, 1000000, 71, 0); 377 total_metering_seconds = mod (total_metering_time, 60); 378 total_metering_minutes = mod (divide (total_metering_time, 60, 71, 0), 60); 379 total_metering_hours = divide (total_metering_time, 3600, 71, 0); 380 381 call ioa_ ("^/Total metering time:^2x^i:^[0^]^i:^[0^]^i^/", total_metering_hours, (total_metering_minutes < 10), 382 total_metering_minutes, (total_metering_seconds < 10), total_metering_seconds); 383 384 /* begin the report */ 385 386 if metering_regions_filled 387 then do; 388 call ioa_ (""); 389 call ioa_ ("Journals in use^31t^d of ^d", dm_journal_segp -> dm_journal.n_journals_inuse, 390 dm_journal_segp -> dm_journal.n_journals); 391 call ioa_ ("Pages held^31t^d of ^d (^d per journal).", dm_journal_segp -> dm_journal.n_held_pages_mem, 392 dm_journal_segp -> dm_journal.max_held_pages_mem, dm_journal_segp -> max_held_per_journal); 393 394 call ioa_ ("Segments active in"); 395 do i = 0 to 3; 396 call ioa_ ("^5t^[4K^;16K^;64K^;256K^] pool^31t^d of ^d", i + 1, 397 dm_journal_segp -> dm_journal.n_active (i), dm_journal_segp -> dm_journal.threshold (i)); 398 end; 399 end; 400 401 if ^user_wants_long_report 402 then return; 403 404 call ioa_ ("^/Calls to"); 405 call ioa_ ("^5tbegin transaction^31t^i", 406 bj_global_meters_ptr -> bj_global_meters.n_calls_begin_txn 407 - Saved_bj_global_meters_ptr -> bj_global_meters.n_calls_begin_txn); 408 call ioa_ ("^5twrite before image^31t^i", 409 bj_global_meters_ptr -> bj_global_meters.n_calls_before_image 410 - Saved_bj_global_meters_ptr -> bj_global_meters.n_calls_before_image); 411 call ioa_ ("^5twrite abort mark^31t^i", 412 bj_global_meters_ptr -> bj_global_meters.n_calls_abort 413 - Saved_bj_global_meters_ptr -> bj_global_meters.n_calls_abort); 414 call ioa_ ("^5twrite commit mark^31t^i", 415 bj_global_meters_ptr -> bj_global_meters.n_calls_commit 416 - Saved_bj_global_meters_ptr -> bj_global_meters.n_calls_commit); 417 call ioa_ ("^5twrite fm post commit^31t^i", 418 bj_global_meters_ptr -> bj_global_meters.n_calls_fm_pc_mark 419 - Saved_bj_global_meters_ptr -> bj_global_meters.n_calls_fm_pc_mark); 420 call ioa_ ("^5twrite fm rollback handler^31t^i", 421 bj_global_meters_ptr -> bj_global_meters.n_calls_fm_rbh 422 - Saved_bj_global_meters_ptr -> bj_global_meters.n_calls_fm_rbh); 423 call ioa_ ("^5twrite rollback mark^31t^i", 424 bj_global_meters_ptr -> bj_global_meters.n_calls_rb_mark 425 - Saved_bj_global_meters_ptr -> bj_global_meters.n_calls_rb_mark); 426 call ioa_ ("^5trollback^31t^i", 427 bj_global_meters_ptr -> bj_global_meters.n_calls_rollback 428 - Saved_bj_global_meters_ptr -> bj_global_meters.n_calls_rollback); 429 430 if metering_regions_filled 431 then do; 432 call ioa_ ("^/Synch write"); 433 call ioa_ ("^5tattempts^31t^i", dm_journal_segp -> dm_journal.synch_write_calls); 434 call ioa_ ("^5tholds^31t^i", dm_journal_segp -> dm_journal.synch_write_holds); 435 call ioa_ ("^5tinvalid - null DM stamp^31t^i", dm_journal_segp -> dm_journal.synch_write_no_stamp); 436 call ioa_ ("^5tinvalid - bad DM stamp^31t^i", dm_journal_segp -> dm_journal.synch_write_inv_vers); 437 call ioa_ ("^5tinvalid - bad BJ index^31t^i", dm_journal_segp -> dm_journal.synch_write_inv_ix); 438 call ioa_ ("^5tinvalid - bad time stamp^31t^i", dm_journal_segp -> dm_journal.synch_write_inv_time); 439 call ioa_ ("^5ttosses^31t^i", dm_journal_segp -> dm_journal.synch_write_tosses); 440 call ioa_ ("^/Other ring zero calls"); 441 call ioa_ ("^5tunlink^31t^i", dm_journal_segp -> dm_journal.unlink_calls); 442 call ioa_ ("^5tactivate^31t^i (^i denied)", dm_journal_segp -> dm_journal.activate_calls, 443 dm_journal_segp -> dm_journal.activate_denied); 444 call ioa_ ("^5tdeactivate^31t^i", dm_journal_segp -> dm_journal.deactivate_calls); 445 call ioa_ ("^5tset stamp^31t^i", dm_journal_segp -> dm_journal.set_stamp_calls); 446 call ioa_ ("^5tallocate^31t^i", dm_journal_segp -> dm_journal.allocate_calls); 447 call ioa_ ("^5tfree^31t^i", dm_journal_segp -> dm_journal.free_calls); 448 end; 449 450 return; 451 452 end PRINT_GLOBAL_METERS; 453 454 455 456 PRINT_ONE_JOURNAL: 457 procedure (p_bj_status_index); 458 459 dcl p_bj_status_index fixed bin parameter; 460 dcl journal_index fixed bin; 461 dcl saved_journal_index fixed bin; 462 dcl time_stamp char (24); 463 dcl auth_string char (24); 464 dcl Temp_status_ptr ptr; 465 466 467 /* if the status is from an inactive journal, we don't print it */ 468 469 if ^bj_status_ptr -> bj_status.system_info (p_bj_status_index).active 470 then return; 471 472 /* get a pointer to the old status info */ 473 474 if Saved_bj_status_ptr = null () 475 then do; 476 bj_status_n_journals = bj_status_ptr -> bj_status.n_journals; 477 allocate bj_status set (Saved_bj_status_ptr); 478 do journal_index = 1 to bj_status_n_journals; 479 unspec (Saved_bj_status_ptr -> bj_status.journal (journal_index)) = ""b; 480 Saved_bj_status_ptr -> bj_status.journal (journal_index).dir = ""; 481 Saved_bj_status_ptr -> bj_status.journal (journal_index).entry = ""; 482 Saved_bj_status_ptr -> bj_status.journal (journal_index).bj_uid = 483 bj_status_ptr -> bj_status.journal (journal_index).bj_uid; 484 end; 485 end; 486 487 /* search for the given journal in the saved copy - openings may have changed */ 488 489 do saved_journal_index = 1 to Saved_bj_status_ptr -> bj_status.n_journals 490 while (Saved_bj_status_ptr -> bj_status.journal (saved_journal_index).bj_uid 491 ^= bj_status_ptr -> bj_status.journal (p_bj_status_index).bj_uid); 492 end; 493 494 if saved_journal_index = Saved_bj_status_ptr -> bj_status.n_journals + 1 495 then do saved_journal_index = 1 to Saved_bj_status_ptr -> bj_status.n_journals 496 while (Saved_bj_status_ptr -> bj_status.journal (saved_journal_index).bj_uid ^= ""b); 497 end; 498 499 500 501 /* Create a zero saved journal entry so that we can get some sort of stats out. */ 502 503 if saved_journal_index = Saved_bj_status_ptr -> bj_status.n_journals + 1 504 505 then do; 506 507 508 bj_status_n_journals = Saved_bj_status_ptr -> bj_status.n_journals +1; 509 allocate bj_status set (Temp_status_ptr); 510 do journal_index = 1 to bj_status_n_journals -1; 511 512 Temp_status_ptr -> bj_status.journal(journal_index) = Saved_bj_status_ptr -> bj_status.journal (journal_index); 513 Temp_status_ptr -> bj_status.journal(journal_index).dir = Saved_bj_status_ptr -> bj_status.journal (journal_index).dir; 514 Temp_status_ptr -> bj_status.journal(journal_index).entry = Saved_bj_status_ptr -> bj_status.journal (journal_index).entry; 515 Temp_status_ptr -> bj_status.journal(journal_index).bj_uid = Saved_bj_status_ptr -> bj_status.journal (journal_index).bj_uid; 516 517 end; 518 519 free Saved_bj_status_ptr -> bj_status; 520 Saved_bj_status_ptr = Temp_status_ptr; 521 522 unspec (Saved_bj_status_ptr -> bj_status.journal (bj_status_n_journals)) = ""b; 523 Saved_bj_status_ptr -> bj_status.journal (bj_status_n_journals).dir = ""; 524 Saved_bj_status_ptr -> bj_status.journal (bj_status_n_journals).entry = ""; 525 Saved_bj_status_ptr -> bj_status.journal (journal_index).bj_uid = 526 bj_status_ptr -> bj_status.journal (journal_index).bj_uid; 527 end; 528 529 530 /* at this point we have found the entry in the saved meters */ 531 532 total_bi_bytes = 533 bj_status_ptr -> bj_status.n_bi_bytes_written (p_bj_status_index) 534 - Saved_bj_status_ptr -> bj_status.n_bi_bytes_written (saved_journal_index); 535 536 total_bi_written = 537 bj_status_ptr -> bj_status.n_bi_written (p_bj_status_index) 538 - Saved_bj_status_ptr -> bj_status.n_bi_written (saved_journal_index); 539 540 total_non_null_txns = 541 bj_status_ptr -> bj_status.n_non_null_txn (p_bj_status_index) 542 - Saved_bj_status_ptr -> bj_status.n_non_null_txn (saved_journal_index); 543 544 total_recycles = 545 bj_status_ptr -> bj_status.n_successful_recycles (p_bj_status_index) 546 - Saved_bj_status_ptr -> bj_status.n_successful_recycles (saved_journal_index); 547 548 total_ci_recycled = 549 bj_status_ptr -> bj_status.n_ci_recycled (p_bj_status_index) 550 - Saved_bj_status_ptr -> bj_status.n_ci_recycled (saved_journal_index); 551 552 if total_non_null_txns = 0 553 then avg_n_bytes_per_txn = 0; 554 else avg_n_bytes_per_txn = total_bi_bytes / total_non_null_txns; 555 556 if total_bi_written = 0 557 then avg_n_bytes_per_bi = 0; 558 else avg_n_bytes_per_bi = total_bi_bytes / total_bi_written; 559 560 if total_non_null_txns = 0 561 then avg_n_bi_per_txn = 0; 562 else avg_n_bi_per_txn = total_bi_written / total_non_null_txns; 563 564 if total_recycles = 0 565 then avg_n_ci_per_recycle = 0; 566 else avg_n_ci_per_recycle = total_ci_recycled / total_recycles; 567 568 call ioa_ ("^2/^a^[>^]^a^/", bj_status_ptr -> bj_status.dir (p_bj_status_index), 569 (bj_status_ptr -> bj_status.dir (p_bj_status_index) ^= ">"), 570 bj_status_ptr -> bj_status.entry (p_bj_status_index)); 571 call ioa_ ("journal size^31t^i", bj_status_ptr -> bj_status.max_size (p_bj_status_index)); 572 call ioa_ ("before images written^31t^i", total_bi_written); 573 call ioa_ ("before image bytes written^31t^i", total_bi_bytes); 574 call ioa_ ("times journal filled^31t^i", 575 bj_status_ptr -> bj_status.n_journal_full (p_bj_status_index) 576 - Saved_bj_status_ptr -> bj_status.n_journal_full (saved_journal_index)); 577 call ioa_ ("times txn storage limit hit^31t^i", 578 bj_status_ptr -> bj_status.n_txn_storage_limit_hits (p_bj_status_index) 579 - Saved_bj_status_ptr -> bj_status.n_txn_storage_limit_hits (saved_journal_index)); 580 call ioa_ ("successful recycles^31t^i", total_recycles); 581 call ioa_ ("control intervals recycled^31t^i", total_ci_recycled); 582 call ioa_ ("transactions started^31t^i", 583 bj_status_ptr -> bj_status.n_txn_started (p_bj_status_index) 584 - Saved_bj_status_ptr -> bj_status.n_txn_started (saved_journal_index)); 585 call ioa_ ("non null transactions^31t^i", total_non_null_txns); 586 call ioa_ ("avg before image/transaction^31t^i", avg_n_bi_per_txn); 587 call ioa_ ("avg bytes/before image^31t^i", avg_n_bytes_per_bi); 588 call ioa_ ("avg bytes/transaction^31t^i", avg_n_bytes_per_txn); 589 call ioa_ ("avg control intervals/recycle^31t^i", avg_n_ci_per_recycle); 590 591 if metering_regions_filled 592 then do; 593 dm_per_journalp = addr (dm_journal.per_journal (bj_status_ptr -> bj_status.journal (p_bj_status_index).bj_ix)); 594 call date_time_ (dm_per_journal.time_stamp, time_stamp); 595 call convert_access_class_$to_string (dm_per_journal.access_class, auth_string, status_code); 596 597 call ioa_ ("time stamp^31t^a", time_stamp); 598 call ioa_ ("pages currently held^31t^i", dm_per_journal.n_held); 599 if (status_code = 0) & (auth_string ^= "") 600 then call ioa_ ("authorization^31t^a", auth_string); 601 end; 602 603 return; 604 605 end PRINT_ONE_JOURNAL; 606 607 608 /* Include Files */ 609 610 1 1 /* BEGIN INCLUDE FILE ... arg_list.incl.pl1 1 2* 1 3* James R. Davis 10 May 79 */ 1 4 1 5 1 6 1 7 /****^ HISTORY COMMENTS: 1 8* 1) change(86-05-15,DGHowe), approve(86-05-15,MCR7375), 1 9* audit(86-07-15,Schroth): 1 10* added command_name_arglist declaration to allow the storage of the 1 11* command name given to the command processor 1 12* END HISTORY COMMENTS */ 1 13 1 14 dcl 1 arg_list aligned based, 1 15 2 header, 1 16 3 arg_count fixed bin (17) unsigned unal, 1 17 3 pad1 bit (1) unal, 1 18 3 call_type fixed bin (18) unsigned unal, 1 19 3 desc_count fixed bin (17) unsigned unal, 1 20 3 pad2 bit (19) unal, 1 21 2 arg_ptrs (arg_list_arg_count refer (arg_list.arg_count)) ptr, 1 22 2 desc_ptrs (arg_list_arg_count refer (arg_list.arg_count)) ptr; 1 23 1 24 1 25 dcl 1 command_name_arglist aligned based, 1 26 2 header, 1 27 3 arg_count fixed bin (17) unsigned unal, 1 28 3 pad1 bit (1) unal, 1 29 3 call_type fixed bin (18) unsigned unal, 1 30 3 desc_count fixed bin (17) unsigned unal, 1 31 3 mbz bit(1) unal, 1 32 3 has_command_name bit(1) unal, 1 33 3 pad2 bit (17) unal, 1 34 2 arg_ptrs (arg_list_arg_count refer (command_name_arglist.arg_count)) ptr, 1 35 2 desc_ptrs (arg_list_arg_count refer (command_name_arglist.arg_count)) ptr, 1 36 2 name, 1 37 3 command_name_ptr pointer, 1 38 3 command_name_length fixed bin (21); 1 39 1 40 1 41 1 42 dcl 1 arg_list_with_envptr aligned based, /* used with non-quick int and entry-var calls */ 1 43 2 header, 1 44 3 arg_count fixed bin (17) unsigned unal, 1 45 3 pad1 bit (1) unal, 1 46 3 call_type fixed bin (18) unsigned unal, 1 47 3 desc_count fixed bin (17) unsigned unal, 1 48 3 pad2 bit (19) unal, 1 49 2 arg_ptrs (arg_list_arg_count refer (arg_list_with_envptr.arg_count)) ptr, 1 50 2 envptr ptr, 1 51 2 desc_ptrs (arg_list_arg_count refer (arg_list_with_envptr.arg_count)) ptr; 1 52 1 53 1 54 dcl ( 1 55 Quick_call_type init (0), 1 56 Interseg_call_type init (4), 1 57 Envptr_supplied_call_type 1 58 init (8) 1 59 ) fixed bin (18) unsigned unal int static options (constant); 1 60 1 61 /* The user must declare arg_list_arg_count - if an adjustable automatic structure 1 62* is being "liked" then arg_list_arg_count may be a parameter, in order to allocate 1 63* an argument list of the proper size in the user's stack 1 64* 1 65**/ 1 66 /* END INCLUDE FILE ... arg_list.incl.pl1 */ 611 612 2 1 /* BEGIN INCLUDE FILE dm_bj_status.incl.pl1 */ 2 2 2 3 /* DESCRIPTION: 2 4* 2 5* This include is used to pass the status of a before journal or the 2 6* BJ meters to users. Any program using this include file must also 2 7* include dm_bj_pst.incl.pl1 and dm_bj_pste.incl.pl1. 2 8**/ 2 9 2 10 /* HISTORY: 2 11*Written by Mike Pandolf, 04/12/83. 2 12*Modified: 2 13*02/22/85 by Lee A. Newcomb: Added a description section and fixed the hisotry 2 14* section's format. 2 15**/ 2 16 2 17 /* format: style2,ll79,ind3,^indprocbody,ifthendo,ifthen,^indnoniterdo,^inddcls,dclind5,idind35,linecom */ 2 18 2 19 dcl bj_status_n_journals fixed bin; 2 20 dcl bj_status_ptr pointer; 2 21 2 22 dcl 1 bj_status aligned based (bj_status_ptr), 2 23 2 n_journals fixed bin, 2 24 2 journal aligned 2 25 dim (bj_status_n_journals 2 26 refer (bj_status.n_journals)), 2 27 3 dir char (168), 2 28 3 entry char (32), 2 29 3 system_info aligned like bj_pste; 2 30 2 31 dcl bj_global_meters_ptr pointer; 2 32 2 33 dcl 1 bj_global_meters aligned based (bj_global_meters_ptr), 2 34 2 time_of_bootload fixed bin (71), 2 35 2 meters aligned like bj_pst.meters; 2 36 2 37 /* END INCLUDE FILE dm_bj_status.incl.pl1 */ 613 614 3 1 /* BEGIN INCLUDE FILE: dm_bj_pst.incl.pl1 */ 3 2 /* 3 3*Layout of the before journal per-system table header and BJ table entries. 3 4* 3 5*Written by Andre Bensoussan 06-15-1982 3 6*Modified: 3 7*09/29/82 by Lee A. Newcomb: To use dm_system_data_ for determining 3 8* dimension of bj_pst.e and force bj_pst.mod_list_area and 3 9* bj_pst.e to even word boundaries. 3 10*04/27/82 by M. Pandolf: To add meter space by cutting away from mod_list_area. 3 11**/ 3 12 /* format: style4,indattr,idind33,^indcomtxt */ 3 13 3 14 dcl BJ_PST_VERSION_1 fixed bin internal static options (constant) init (1); 3 15 3 16 dcl bj_pst_ptr ptr; 3 17 3 18 dcl 1 bj_pst based (bj_pst_ptr) aligned, 3 19 2 version fixed bin, 3 20 2 pad1 bit (36), 3 21 2 lock, 3 22 3 pid bit (36), /* process_id holding lock */ 3 23 3 event bit (36), 3 24 2 time_of_bootload fixed bin (71), /* for ease of access */ 3 25 2 max_n_entries fixed bin, /* as determined from dm_system_data_$bj_max_n_journals */ 3 26 2 n_entries_used fixed bin, /* current # of BJs open on the system */ 3 27 2 highest_ix_used fixed bin, /* max. # of BJs that has ever been open of the system */ 3 28 2 pn_table_offset fixed bin (18) uns, /* relative offset of bj_pn_table in bj_pst seg. */ 3 29 2 check_in_table_offset fixed bin (18) uns, /* ditto for bj_check_in_table */ 3 30 2 buffer_table_offset fixed bin (18) uns, /* ditto for where our BJ buffers are located */ 3 31 2 max_n_buffers fixed bin, /* must be <= to max_n_entries */ 3 32 2 pad2 bit (36), /* force next on even word boundary */ 3 33 2 meters, /* dim (50) fixed bin (71), */ 3 34 3 n_calls_begin_txn fixed bin (71), /* meter (1) */ 3 35 3 n_calls_before_image fixed bin (71), /* meter (2) */ 3 36 3 n_calls_abort fixed bin (71), /* meter (3) */ 3 37 3 n_calls_commit fixed bin (71), /* meter (4) */ 3 38 3 n_calls_rb_mark fixed bin (71), /* meter (5) */ 3 39 3 n_calls_fm_pc_mark fixed bin (71), /* meter (6) */ 3 40 3 n_calls_fm_rbh fixed bin (71), /* meter (7) */ 3 41 3 n_calls_rollback fixed bin (71), /* meter (8) */ 3 42 3 meter dim (9:50) fixed bin (71), /* meter (9) - meter (50) */ 3 43 2 mod_list_area (100) fixed bin (35), /* for keeping track of pst mods */ 3 44 3 45 2 e dim (dm_system_data_$bj_max_n_journals refer (bj_pst.max_n_entries)) 3 46 like bj_pste; /* per system BJ table entries */ 3 47 3 48 3 49 /* END INCLUDE FILE: dm_bj_pst.incl.pl1 */ 615 616 4 1 /* BEGIN INCLUDE FILE: dm_bj_pste.incl.pl1 */ 4 2 4 3 /* DESCRIPTION 4 4* 4 5* Layout of the per-system before journal table 4 6* entries. This structure is used to contain information 4 7* about a before journal active in a running DMS. It is 4 8* currently also used as the header of a before journal 4 9* (see dm_bj_header.incl.pl1). Version changes to this 4 10* structure require either automatic conversion to be set 4 11* up, or users to be told to re-create their journals. 4 12* 4 13* Currently, a bj_pste must be 64 words long; any 4 14* future changes must at least make sure a bj_pste is an 4 15* even # of words for the alignment of some of its 4 16* elements. 4 17**/ 4 18 4 19 /* HISTORY: 4 20* 4 21*Written by Andre Bensoussan, 06/15/82. 4 22*Modified: 4 23*08/16/82 by Andre Bensoussan: to add stamp_for_last_ci_put. 4 24*09/29/82 by Lee A. Newcomb: to fix BJ_PSTE_VERSION_1 and fix some 4 25* alignments. 4 26*11/01/82 by Andre Bensoussan: to add "stamp_for_last_ci_on_disk", 4 27* "n_bi_still_unsafe", and "n_bi_being_saved". 4 28*02/08/83 by M. Pandolf: to add append_state structure. 4 29*03/19/83 by L. A. Newcomb: to fix up some alignments and spelling problems. 4 30*04/27/83 by M. Pandolf: to add meter structure at end. 4 31*02/11/85 by Lee A. Newcomb: Fixed version constant name to agree with its 4 32* value of 2; fixed references to page files or PF's; fixed format 4 33* of description and history sections. 4 34*03/07/85 by Lee A. Newcomb: Changed a pad word to be txn_storage_limit and 4 35* expanded on the description for future generations (no 4 36* version was made). 4 37*03/27/85 by Lee A. Newcomb: Changed one of the unused meters to 4 38* n_txn_storage_limit_hits (again without a version change). 4 39**/ 4 40 /* format: style2,ll79,ind3,^indprocbody,ifthendo,ifthen,^indnoniterdo,^inddcls,dclind5,idind35,linecom */ 4 41 4 42 dcl BJ_PSTE_VERSION_2 fixed bin internal static 4 43 options (constant) init (2); 4 44 4 45 dcl bj_pste_ptr ptr; 4 46 4 47 /* MUST HAVE EVEN NUMBER OR WORDS */ 4 48 dcl 1 bj_pste based (bj_pste_ptr) aligned, 4 49 2 version fixed bin, 4 50 2 bj_ix fixed bin, /* Index of this entry in bj_pst table */ 4 51 2 lock aligned, 4 52 3 pid bit (36), /* process ID of lock owner */ 4 53 3 event bit (36), 4 54 2 bj_uid bit (36), /* UID of BJ file */ 4 55 2 ci_size fixed bin, /* In number of bytes */ 4 56 2 max_size fixed bin, /* In number of ci's */ 4 57 2 active bit (1) aligned, /* 0 means journal not being used */ 4 58 2 time_header_updated fixed bin (71), 4 59 2 earliest_meaningful_time fixed bin (71), /* time stamp on first valid control interval */ 4 60 2 update_frequency fixed bin, /* Not used yet, probably will be how many CIs */ 4 61 2 last_rec_id bit (36), /* rec id of the last logical record in journal */ 4 62 2 n_processes fixed bin, /* Number of processes using this BJ */ 4 63 2 n_txn fixed bin, /* Number of txn in progress using this BJ */ 4 64 2 last_ci_info aligned, 4 65 3 last_ci_buffered fixed bin (24) uns, /* Last ci encached in the buffer */ 4 66 3 last_ci_put fixed bin (24) uns, /* Last ci put in the BJ */ 4 67 3 last_ci_flushed fixed bin (24) uns, /* Last ci for which flush initiated */ 4 68 3 last_ci_on_disk fixed bin (24) uns, /* Last ci of that portion of the BJ known to be ... */ 4 69 /* .. completely on disk */ 4 70 3 stamp_for_last_ci_put fixed bin (71), /* Time stamp associated with the last ci put in the BJ */ 4 71 3 stamp_for_last_ci_on_disk fixed bin (71), /* Time stamp associated with the last ci on disk in the BJ */ 4 72 2 n_bi_still_unsafe fixed bin, /* number of bi's still not on disk */ 4 73 2 n_bi_being_saved fixed bin, /* number of bi's for which flush initiated */ 4 74 2 buffer_offset fixed bin (18) uns, /* Now allocated in the bj_pst segment */ 4 75 2 txn_storage_limit fixed bin (35), /* # of bytes a single txn may write */ 4 76 2 cl aligned, /* Circular List */ 4 77 3 origin_ci fixed bin (24) uns, 4 78 3 lowest_ci fixed bin (24) uns, 4 79 3 highest_ci fixed bin (24) uns, 4 80 3 number_ci fixed bin (24) uns, 4 81 2 append_state aligned, 4 82 3 current_operation char (4), /* equal to "appe" when append in progress */ 4 83 3 pending_n_txn fixed bin, /* n_txn value when append done */ 4 84 3 pending_last_rec_id bit (36), /* last_rec_id value after append done */ 4 85 3 pending_last_element_id bit (36), /* last element id after append done */ 4 86 3 txte_rec_id_relp bit (18), /* rel ptr into seg containing TXT for txte.pending_bj_rec_id */ 4 87 2 pad_to_even_word1 bit (36) aligned, 4 88 2 meters aligned, /* dim (10) fixed bin (71), */ 4 89 3 n_bi_written fixed bin (71), /* meter (1) */ 4 90 3 n_bi_bytes_written fixed bin (71), /* meter (2) */ 4 91 3 n_journal_full fixed bin (71), /* meter (3) */ 4 92 3 n_successful_recycles fixed bin (71), /* meter (4) */ 4 93 3 n_ci_recycled fixed bin (71), /* meter (5) */ 4 94 3 n_txn_started fixed bin (71), /* meter (6) */ 4 95 3 n_non_null_txn fixed bin (71), /* meter (7) */ 4 96 3 n_txn_storage_limit_hits fixed bin (71), /* meter (8) */ 4 97 3 meter (9:10) fixed bin (71), 4 98 /* meter (9) - meter (10) */ 4 99 2 pad_to_64_words (6) bit (36); /* 64 is even (see below) */ 4 100 4 101 4 102 /* END INCLUDE FILE: dm_bj_pste.incl.pl1 */ 617 618 5 1 /* START OF: dm_journal_seg_.incl.pl1 October 1982 * * * * * * * * * * * * * * * * */ 5 2 /* modified June 1982 by M. Pandolf for more meters * * * * * * * */ 5 3 5 4 dcl dm_journal_seg_$ external; 5 5 5 6 dcl dm_journal_segp ptr; 5 7 dcl dm_per_journalp ptr; 5 8 dcl dm_per_journal_arrayp ptr; 5 9 dcl dm_page_entryp ptr; 5 10 5 11 dcl n_dm_journals fixed bin; 5 12 dcl max_dm_pages fixed bin; 5 13 5 14 5 15 dcl 1 dm_journal aligned based (dm_journal_segp), 5 16 5 17 2 lock bit (36) aligned, /* Lock for manipulating journal entries */ 5 18 2 wait_event bit (36) aligned, /* Wait Event for lock */ 5 19 2 notify_sw bit (1) aligned, 5 20 5 21 2 n_journals fixed bin, /* Number of journals */ 5 22 2 n_journals_inuse fixed bin, /* Number of journals in use now */ 5 23 2 max_held_pages_mem fixed bin, /* Maximum number of pages held in memory */ 5 24 2 n_held_pages_mem fixed bin, /* Number of pages held in memory */ 5 25 2 max_held_per_journal fixed bin, /* max_held_pages_mem / n_journals_inuse */ 5 26 2 per_aste_pool (0:3) aligned, 5 27 3 threshold fixed bin, /* Maximum number of active segments */ 5 28 3 n_active fixed bin, /* Number currently active */ 5 29 2 free_list_relp bit (18) aligned, /* Free entry list first ptr */ 5 30 2 synch_write_calls fixed bin (35), /* Number of calls to check write */ 5 31 2 synch_write_holds fixed bin (35), /* Number of times page held for call */ 5 32 2 synch_write_no_stamp 5 33 fixed bin (35), /* Number of times page had null DM stamp */ 5 34 2 synch_write_inv_vers 5 35 fixed bin (35), /* Number of times page had invalid DM stamp */ 5 36 2 synch_write_inv_ix 5 37 fixed bin (35), /* Number of times page had invalid BJ index */ 5 38 2 synch_write_inv_time 5 39 fixed bin (35), /* Number of times page had future time stamp */ 5 40 2 synch_write_tosses fixed bin (35), /* Number of times page tossed because of threshold */ 5 41 2 unlink_calls fixed bin (35), /* Number of calls to unlink all entries to a journal */ 5 42 2 unlink_steps fixed bin (35), /* Number of CMEs unlinked */ 5 43 2 activate_calls fixed bin (35), /* Number of times synch segment activated */ 5 44 2 deactivate_calls fixed bin (35), /* Number of times synch segment deactivated */ 5 45 2 activate_denied fixed bin (35), /* Number of times activation threshold exceeded */ 5 46 2 set_stamp_calls fixed bin (35), /* Number of times called to set time stamp */ 5 47 2 allocate_calls fixed bin (35), /* Number of times called to allocate a journal */ 5 48 2 free_calls fixed bin (35), /* Number of times called to free a journal */ 5 49 5 50 2 per_journal (n_dm_journals refer (dm_journal.n_journals)) aligned like dm_per_journal, 5 51 2 page_entry (max_dm_pages refer (dm_journal.max_held_pages_mem)) aligned like dm_page_entry; 5 52 5 53 5 54 dcl 1 dm_per_journal_array (dm_journal.n_journals) aligned like dm_per_journal based (dm_per_journal_arrayp); 5 55 5 56 dcl 1 dm_per_journal aligned based (dm_per_journalp), /* One entry per DM journal */ 5 57 2 time_stamp fixed bin (71), /* Pages before this time can be written */ 5 58 2 n_held fixed bin, /* Number of pages held in memory */ 5 59 2 uid bit (36) aligned, /* Unique ID for owner - ""b => not used */ 5 60 2 access_class bit (72) aligned, /* Access Class of Owner */ 5 61 2 entry_relp bit (18) aligned, /* Pointer to list of pages held for this journal */ 5 62 2 pad bit (36) aligned; 5 63 5 64 5 65 dcl 1 dm_page_entry aligned based (dm_page_entryp), 5 66 2 fp bit (18) unal, /* Forward pointer */ 5 67 2 bp bit (18) unal, /* Backward pointer */ 5 68 2 cme_relp bit (18) unal, /* Rel ptr -> CME */ 5 69 2 journal_relp bit (18) unal; /* Rel ptr -> dm_per_journal */ 5 70 5 71 5 72 /* END OF: dm_journal_seg_.incl.pl1 * * * * * * * * * * * * * * * * */ 5 73 619 620 621 622 end before_journal_meters; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 10/16/90 1518.7 before_journal_meters.pl1 >spec>install>1043>before_journal_meters.pl1 611 1 08/05/86 0956.8 arg_list.incl.pl1 >ldd>include>arg_list.incl.pl1 613 2 04/05/85 1024.2 dm_bj_status.incl.pl1 >ldd>include>dm_bj_status.incl.pl1 615 3 01/07/85 0957.7 dm_bj_pst.incl.pl1 >ldd>include>dm_bj_pst.incl.pl1 617 4 04/05/85 1024.4 dm_bj_pste.incl.pl1 >ldd>include>dm_bj_pste.incl.pl1 619 5 09/07/83 1710.6 dm_journal_seg_.incl.pl1 >ldd>include>dm_journal_seg_.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. IOA_GENERAL_RS_DONT_PAD 000071 constant bit(1) initial dcl 116 set ref 348* IOA_GENERAL_RS_NO_NEW_LINE 000074 constant bit(1) initial dcl 116 set ref 348* MY_NAME 000000 constant char(32) initial packed unaligned dcl 116 set ref 178* 243* 350* Metering_regions_defined 000010 internal static bit(1) initial dcl 162 set ref 226 233* 238 Region_id 000011 internal static fixed bin(17,0) initial dcl 164 set ref 231* 240* 318* Saved_bj_global_meters_ptr 000012 internal static pointer initial dcl 165 set ref 311 311 315* 317 365 367* 368 369 375 405 408 411 414 417 420 423 426 Saved_bj_status_ptr 000014 internal static pointer initial dcl 167 set ref 313 313 315* 474 477* 479 480 481 482 489 489 494 494 494 503 508 512 513 514 515 519 520* 522 523 524 525 532 536 540 544 548 574 577 582 Temp_status_ptr 002332 automatic pointer dcl 464 set ref 509* 512 513 514 515 520 access_class 4 based bit(72) level 2 dcl 5-56 set ref 595* activate_calls 32 based fixed bin(35,0) level 2 dcl 5-15 set ref 442* activate_denied 34 based fixed bin(35,0) level 2 dcl 5-15 set ref 442* active 73 based bit(1) array level 4 dcl 2-22 set ref 469 addr builtin function dcl 111 ref 350 593 allocate_calls 36 based fixed bin(35,0) level 2 dcl 5-15 set ref 446* area_ptr 000124 automatic pointer dcl 80 set ref 254* 262* 291* 315* arg based char packed unaligned dcl 105 set ref 199 199 202 202 207 207 209 209 211* 286* 287* 293* arg_count 000100 automatic fixed bin(17,0) dcl 65 set ref 175* 189 190 196 280 arg_length 000110 automatic fixed bin(21,0) dcl 74 set ref 198* 199 199 199 202 202 207 207 209 209 211 211 285* 286 286 287 287 293 293 arg_list based structure level 1 dcl 1-14 arg_number 000105 automatic fixed bin(17,0) dcl 72 set ref 196* 198* 214* 280* 282 285* arg_ptr 000106 automatic pointer dcl 73 set ref 198* 199 199 202 202 207 207 209 209 211 211 285* 286 287 293 arg_ptrs 2 based pointer array level 2 dcl 1-14 ref 346 ascii_time 000116 automatic char(24) packed unaligned dcl 79 set ref 240* auth_string 002324 automatic char(24) packed unaligned dcl 463 set ref 595* 599 599* avg_n_bi_per_txn 000232 automatic fixed bin(71,0) dcl 93 set ref 560* 562* 586* avg_n_bytes_per_bi 000224 automatic fixed bin(71,0) dcl 90 set ref 556* 558* 587* avg_n_bytes_per_txn 000230 automatic fixed bin(71,0) dcl 92 set ref 552* 554* 588* avg_n_ci_per_recycle 000226 automatic fixed bin(71,0) dcl 91 set ref 564* 566* 589* before_journal_manager_$get_journal_status 000016 constant entry external dcl 126 ref 262 291 315 binary_time 000114 automatic fixed bin(71,0) dcl 78 set ref 240* bj_dir 000127 automatic char(168) packed unaligned dcl 82 set ref 286* 291* bj_entry 000201 automatic char(32) packed unaligned dcl 83 set ref 286* 291* bj_global_meters based structure level 1 dcl 2-33 set ref 277 299 311 367 368* bj_global_meters_ptr 002264 automatic pointer dcl 2-31 set ref 262* 277 291* 299 369 405 408 411 414 417 420 423 426 bj_index 000126 automatic fixed bin(17,0) dcl 81 set ref 270* 271* bj_ix 65 based fixed bin(17,0) array level 4 dcl 2-22 set ref 593 bj_pst based structure level 1 dcl 3-18 bj_pste based structure level 1 dcl 4-48 bj_status based structure level 1 dcl 2-22 set ref 276 298 313 477 509 519 bj_status_n_journals 002260 automatic fixed bin(17,0) dcl 2-19 set ref 476* 477 477 478 508* 509 509 510 522 523 524 bj_status_ptr 002262 automatic pointer dcl 2-20 set ref 262* 270 274 276 291* 298 469 476 482 489 525 532 536 540 544 548 568 568 568 571 574 577 582 593 bj_uid 70 based bit(36) array level 4 dcl 2-22 set ref 482* 482 489 489 494 515* 515 525* 525 clock builtin function dcl 111 ref 317 375 com_err_ 000020 constant entry external dcl 128 ref 178 243 319 350 convert_access_class_$to_string 000022 constant entry external dcl 129 ref 595 cu_$arg_count 000024 constant entry external dcl 131 ref 175 cu_$arg_list_ptr 000026 constant entry external dcl 132 ref 345 cu_$arg_ptr 000030 constant entry external dcl 133 ref 198 285 date_time_ 000032 constant entry external dcl 134 ref 594 deactivate_calls 33 based fixed bin(35,0) level 2 dcl 5-15 set ref 444* dir 2 based char(168) array level 3 dcl 2-22 set ref 480* 513* 513 523* 568* 568 divide builtin function dcl 111 ref 375 378 379 dm_error_$system_not_initialized 000054 external static fixed bin(35,0) dcl 155 set ref 171* dm_journal based structure level 1 dcl 5-15 dm_journal_segp 002266 automatic pointer dcl 5-6 set ref 250* 389 389 391 391 391 396 396 433 434 435 436 437 438 439 441 442 442 444 445 446 447 593 dm_not_available_ 002252 stack reference condition dcl 151 ref 171 dm_page_entry based structure level 1 dcl 5-65 dm_per_journal based structure level 1 dcl 5-56 dm_per_journalp 002270 automatic pointer dcl 5-7 set ref 593* 594 595 598 empty builtin function dcl 111 ref 99 entry 54 based char(32) array level 3 dcl 2-22 set ref 481* 514* 514 524* 568* er_arg_list_ptr 000100 automatic pointer dcl 333 set ref 345* 346 348* er_code 000102 automatic fixed bin(35,0) dcl 333 set ref 346* 350* er_fixed_bin_35_value based fixed bin(35,0) dcl 340 ref 346 er_message 000103 automatic char(1024) packed unaligned dcl 333 set ref 348* 350 er_message_length 000503 automatic fixed bin(21,0) dcl 333 set ref 348* 350 350 er_message_overlay based char packed unaligned dcl 340 set ref 350* error_table_$bad_arg 000056 external static fixed bin(35,0) dcl 157 set ref 211* 217* error_table_$no_info 000060 external static fixed bin(35,0) dcl 158 ref 243 expand_pathname_$add_suffix 000034 constant entry external dcl 135 ref 286 first_arg_char based char(1) packed unaligned dcl 106 ref 211 free_calls 37 based fixed bin(35,0) level 2 dcl 5-15 set ref 447* get_system_free_area_ 000036 constant entry external dcl 137 ref 254 i 002304 automatic fixed bin(17,0) dcl 361 set ref 395* 396 396 396* ioa_ 000040 constant entry external dcl 138 ref 274 381 388 389 391 394 396 404 405 408 411 414 417 420 423 426 432 433 434 435 436 437 438 439 440 441 442 444 445 446 447 568 571 572 573 574 577 580 581 582 585 586 587 588 589 597 598 599 ioa_$general_rs 000042 constant entry external dcl 139 ref 348 is_pathname based bit(1) array dcl 107 set ref 189 190* 214* 282 is_pathname_ptr 002246 automatic pointer dcl 100 set ref 189* 190 214 282 journal 2 based structure array level 2 dcl 2-22 set ref 479* 512* 512 522* journal_index 002314 automatic fixed bin(17,0) dcl 460 set ref 478* 479 480 481 482 482* 510* 512 512 513 513 514 514 515 515* 525 525 journal_seg_max_length 000112 automatic fixed bin(19,0) dcl 77 set ref 228* 231* local_area 000246 automatic area(1024) dcl 99 set ref 99* 189 max_held_pages_mem 5 based fixed bin(17,0) level 2 dcl 5-15 set ref 391* max_held_per_journal 7 based fixed bin(17,0) level 2 dcl 5-15 set ref 391* max_size 72 based fixed bin(17,0) array level 4 dcl 2-22 set ref 571* metering_regions_filled 000111 automatic bit(1) dcl 75 set ref 224* 241* 386 430 591 metering_util_$define_regions 000044 constant entry external dcl 141 ref 231 metering_util_$fill_buffers 000046 constant entry external dcl 143 ref 240 metering_util_$reset 000050 constant entry external dcl 145 ref 318 meters 132 based structure array level 4 in structure "bj_status" dcl 2-22 in procedure "bjmt" meters 16 based structure level 2 in structure "bj_pst" dcl 3-18 in procedure "bjmt" meters 2 based structure level 2 in structure "bj_global_meters" dcl 2-33 in procedure "bjmt" mod builtin function dcl 111 ref 377 378 n_active 11 based fixed bin(17,0) array level 3 dcl 5-15 set ref 396* n_bi_bytes_written 134 based fixed bin(71,0) array level 5 dcl 2-22 set ref 532 532 n_bi_written 132 based fixed bin(71,0) array level 5 dcl 2-22 set ref 536 536 n_calls_abort 6 based fixed bin(71,0) level 3 dcl 2-33 set ref 411 411 n_calls_before_image 4 based fixed bin(71,0) level 3 dcl 2-33 set ref 408 408 n_calls_begin_txn 2 based fixed bin(71,0) level 3 dcl 2-33 set ref 405 405 n_calls_commit 10 based fixed bin(71,0) level 3 dcl 2-33 set ref 414 414 n_calls_fm_pc_mark 14 based fixed bin(71,0) level 3 dcl 2-33 set ref 417 417 n_calls_fm_rbh 16 based fixed bin(71,0) level 3 dcl 2-33 set ref 420 420 n_calls_rb_mark 12 based fixed bin(71,0) level 3 dcl 2-33 set ref 423 423 n_calls_rollback 20 based fixed bin(71,0) level 3 dcl 2-33 set ref 426 426 n_ci_recycled 142 based fixed bin(71,0) array level 5 dcl 2-22 set ref 548 548 n_held 2 based fixed bin(17,0) level 2 dcl 5-56 set ref 598* n_held_pages_mem 6 based fixed bin(17,0) level 2 dcl 5-15 set ref 391* n_journal_full 136 based fixed bin(71,0) array level 5 dcl 2-22 set ref 574 574 n_journals based fixed bin(17,0) level 2 in structure "bj_status" dcl 2-22 in procedure "bjmt" set ref 270 274 276 298 313 476 477* 489 494 494 503 508 509* 519 n_journals 3 based fixed bin(17,0) level 2 in structure "dm_journal" dcl 5-15 in procedure "bjmt" set ref 389* n_journals_inuse 4 based fixed bin(17,0) level 2 dcl 5-15 set ref 389* n_non_null_txn 146 based fixed bin(71,0) array level 5 dcl 2-22 set ref 540 540 n_successful_recycles 140 based fixed bin(71,0) array level 5 dcl 2-22 set ref 544 544 n_txn_started 144 based fixed bin(71,0) array level 5 dcl 2-22 set ref 582 582 n_txn_storage_limit_hits 150 based fixed bin(71,0) array level 5 dcl 2-22 set ref 577 577 new_ptr 000212 automatic pointer array dcl 84 set ref 193* 240* 250 no_path_specified 002250 automatic bit(1) packed unaligned dcl 101 set ref 191* 215* 259 null builtin function dcl 111 ref 193 194 311 313 365 474 old_ptr 000214 automatic pointer array dcl 85 set ref 194* 240* p_bj_status_index parameter fixed bin(17,0) dcl 459 ref 456 469 489 532 536 540 544 548 568 568 568 571 574 577 582 593 per_aste_pool 10 based structure array level 2 dcl 5-15 per_journal 40 based structure array level 2 dcl 5-15 set ref 593 ring_zero_peek_$get_max_length 000052 constant entry external dcl 146 ref 228 saved_journal_index 002315 automatic fixed bin(17,0) dcl 461 set ref 489* 489* 494 494* 494* 503 532 536 540 544 548 574 577 582 set_stamp_calls 35 based fixed bin(35,0) level 2 dcl 5-15 set ref 445* status_code 000101 automatic fixed bin(35,0) dcl 66 set ref 175* 176 178* 198* 228* 229 231* 233 240* 241 243 243* 247* 262* 264 264* 285* 286* 287 287* 291* 293 293* 315* 318* 319 319* 595* 599 synch_write_calls 21 based fixed bin(35,0) level 2 dcl 5-15 set ref 433* synch_write_holds 22 based fixed bin(35,0) level 2 dcl 5-15 set ref 434* synch_write_inv_ix 25 based fixed bin(35,0) level 2 dcl 5-15 set ref 437* synch_write_inv_time 26 based fixed bin(35,0) level 2 dcl 5-15 set ref 438* synch_write_inv_vers 24 based fixed bin(35,0) level 2 dcl 5-15 set ref 436* synch_write_no_stamp 23 based fixed bin(35,0) level 2 dcl 5-15 set ref 435* synch_write_tosses 27 based fixed bin(35,0) level 2 dcl 5-15 set ref 439* system_info 64 based structure array level 3 dcl 2-22 threshold 10 based fixed bin(17,0) array level 3 dcl 5-15 set ref 396* time_of_bootload based fixed bin(71,0) level 2 dcl 2-33 set ref 317* 369* 369 375 time_stamp 002316 automatic char(24) packed unaligned dcl 462 in procedure "PRINT_ONE_JOURNAL" set ref 594* 597* time_stamp based fixed bin(71,0) level 2 in structure "dm_per_journal" dcl 5-56 in procedure "bjmt" set ref 594* total_bi_bytes 000234 automatic fixed bin(71,0) dcl 94 set ref 532* 554 558 573* total_bi_written 000236 automatic fixed bin(71,0) dcl 95 set ref 536* 556 558 562 572* total_ci_recycled 000244 automatic fixed bin(71,0) dcl 98 set ref 548* 566 581* total_metering_hours 000222 automatic fixed bin(17,0) dcl 89 set ref 379* 381* total_metering_minutes 000221 automatic fixed bin(17,0) dcl 88 set ref 378* 381 381* total_metering_seconds 000220 automatic fixed bin(17,0) dcl 87 set ref 377* 381 381* total_metering_time 000216 automatic fixed bin(71,0) dcl 86 set ref 375* 377 378 379 total_non_null_txns 000240 automatic fixed bin(71,0) dcl 96 set ref 540* 552 554 560 562 585* total_recycles 000242 automatic fixed bin(71,0) dcl 97 set ref 544* 564 566 580* unlink_calls 30 based fixed bin(35,0) level 2 dcl 5-15 set ref 441* unspec builtin function dcl 111 set ref 368* 479* 522* user_wants_long_report 000104 automatic bit(1) dcl 71 set ref 187* 207* 209* 401 user_wants_meters_printed 000103 automatic bit(1) dcl 69 set ref 186* 199* 205* 256 user_wants_meters_reset 000102 automatic bit(1) dcl 67 set ref 185* 199* 204* 308 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. BJ_PSTE_VERSION_2 internal static fixed bin(17,0) initial dcl 4-42 BJ_PST_VERSION_1 internal static fixed bin(17,0) initial dcl 3-14 Envptr_supplied_call_type internal static fixed bin(18,0) initial packed unsigned unaligned dcl 1-54 Interseg_call_type internal static fixed bin(18,0) initial packed unsigned unaligned dcl 1-54 Quick_call_type internal static fixed bin(18,0) initial packed unsigned unaligned dcl 1-54 arg_list_with_envptr based structure level 1 dcl 1-42 bj_pst_ptr automatic pointer dcl 3-16 bj_pste_ptr automatic pointer dcl 4-45 command_name_arglist based structure level 1 dcl 1-25 dm_journal_seg_$ external static fixed bin(17,0) dcl 5-4 dm_page_entryp automatic pointer dcl 5-9 dm_per_journal_array based structure array level 1 dcl 5-54 dm_per_journal_arrayp automatic pointer dcl 5-8 max_dm_pages automatic fixed bin(17,0) dcl 5-12 n_dm_journals automatic fixed bin(17,0) dcl 5-11 NAMES DECLARED BY EXPLICIT CONTEXT. ERROR_RETURN 002206 constant entry internal dcl 330 ref 171 211 217 247 264 287 293 MAIN_RETURN 002204 constant label dcl 323 ref 179 352 PRINT_GLOBAL_METERS 002316 constant entry internal dcl 358 ref 268 PRINT_ONE_JOURNAL 003510 constant entry internal dcl 456 ref 271 297 arg_processing_loop 001104 constant label dcl 196 before_journal_meters 000764 constant entry external dcl 56 bjmt 000754 constant entry external dcl 56 done_with_pathname 002065 constant label dcl 303 ref 282 should_we_reset_meters 002067 constant label dcl 308 ref 256 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5206 5270 4706 5216 Length 5660 4706 62 354 277 6 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME bjmt 1416 external procedure is an external procedure. on unit on line 171 78 on unit ERROR_RETURN 360 internal procedure is declared options(variable). PRINT_GLOBAL_METERS internal procedure shares stack frame of external procedure bjmt. PRINT_ONE_JOURNAL internal procedure shares stack frame of external procedure bjmt. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 Metering_regions_defined bjmt 000011 Region_id bjmt 000012 Saved_bj_global_meters_ptr bjmt 000014 Saved_bj_status_ptr bjmt STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME ERROR_RETURN 000100 er_arg_list_ptr ERROR_RETURN 000102 er_code ERROR_RETURN 000103 er_message ERROR_RETURN 000503 er_message_length ERROR_RETURN bjmt 000100 arg_count bjmt 000101 status_code bjmt 000102 user_wants_meters_reset bjmt 000103 user_wants_meters_printed bjmt 000104 user_wants_long_report bjmt 000105 arg_number bjmt 000106 arg_ptr bjmt 000110 arg_length bjmt 000111 metering_regions_filled bjmt 000112 journal_seg_max_length bjmt 000114 binary_time bjmt 000116 ascii_time bjmt 000124 area_ptr bjmt 000126 bj_index bjmt 000127 bj_dir bjmt 000201 bj_entry bjmt 000212 new_ptr bjmt 000214 old_ptr bjmt 000216 total_metering_time bjmt 000220 total_metering_seconds bjmt 000221 total_metering_minutes bjmt 000222 total_metering_hours bjmt 000224 avg_n_bytes_per_bi bjmt 000226 avg_n_ci_per_recycle bjmt 000230 avg_n_bytes_per_txn bjmt 000232 avg_n_bi_per_txn bjmt 000234 total_bi_bytes bjmt 000236 total_bi_written bjmt 000240 total_non_null_txns bjmt 000242 total_recycles bjmt 000244 total_ci_recycled bjmt 000246 local_area bjmt 002246 is_pathname_ptr bjmt 002250 no_path_specified bjmt 002260 bj_status_n_journals bjmt 002262 bj_status_ptr bjmt 002264 bj_global_meters_ptr bjmt 002266 dm_journal_segp bjmt 002270 dm_per_journalp bjmt 002304 i PRINT_GLOBAL_METERS 002314 journal_index PRINT_ONE_JOURNAL 002315 saved_journal_index PRINT_ONE_JOURNAL 002316 time_stamp PRINT_ONE_JOURNAL 002324 auth_string PRINT_ONE_JOURNAL 002332 Temp_status_ptr PRINT_ONE_JOURNAL THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_l_a r_ne_as call_ext_out_desc call_ext_out call_int_this_desc call_int_other_desc return_mac tra_ext_1 mdfx3 enable_op ext_entry int_entry divide_fx3 divide_fx4 op_alloc_ alloc_storage op_freen_ op_empty_ clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. before_journal_manager_$get_journal_status com_err_ convert_access_class_$to_string cu_$arg_count cu_$arg_list_ptr cu_$arg_ptr date_time_ expand_pathname_$add_suffix get_system_free_area_ ioa_ ioa_$general_rs metering_util_$define_regions metering_util_$fill_buffers metering_util_$reset ring_zero_peek_$get_max_length THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. dm_error_$system_not_initialized error_table_$bad_arg error_table_$no_info LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 99 000746 56 000753 171 000772 175 001024 176 001035 178 001037 179 001054 185 001055 186 001056 187 001060 189 001061 190 001066 191 001077 193 001101 194 001103 196 001104 198 001113 199 001130 202 001147 204 001157 205 001161 206 001162 207 001163 209 001176 211 001210 214 001246 215 001252 216 001253 217 001254 220 001274 224 001276 226 001277 228 001302 229 001330 231 001332 233 001372 238 001377 240 001402 241 001435 243 001442 246 001470 247 001471 250 001510 254 001512 256 001521 259 001523 262 001525 264 001562 268 001604 270 001605 271 001615 272 001617 274 001621 276 001637 277 001644 279 001646 280 001647 282 001657 285 001662 286 001677 287 001735 291 001766 293 002021 297 002052 298 002056 299 002063 303 002065 308 002067 311 002071 313 002100 315 002112 317 002147 318 002152 319 002162 323 002204 330 002205 345 002213 346 002221 348 002224 350 002267 352 002313 358 002316 365 002317 367 002324 368 002331 369 002334 375 002336 377 002345 378 002350 379 002355 381 002362 386 002426 388 002430 389 002441 391 002465 394 002514 395 002533 396 002537 398 002573 401 002575 404 002600 405 002615 408 002642 411 002667 414 002714 417 002741 420 002766 423 003013 426 003040 430 003065 432 003067 433 003106 434 003132 435 003156 436 003177 437 003220 438 003241 439 003262 440 003306 441 003325 442 003351 444 003375 445 003416 446 003442 447 003463 450 003507 456 003510 469 003512 474 003521 476 003526 477 003530 478 003541 479 003547 480 003556 481 003563 482 003570 484 003574 489 003576 492 003622 494 003624 497 003646 503 003650 508 003655 509 003660 510 003670 512 003677 513 003710 514 003717 515 003726 517 003730 519 003732 520 003740 522 003743 523 003752 524 003757 525 003764 532 003772 536 004006 540 004011 544 004014 548 004017 552 004022 554 004031 556 004036 558 004043 560 004050 562 004055 564 004062 566 004067 568 004074 571 004140 572 004171 573 004211 574 004231 577 004262 580 004313 581 004333 582 004353 585 004404 586 004424 587 004444 588 004464 589 004504 591 004524 593 004526 594 004537 595 004554 597 004576 598 004621 599 004642 603 004670 ----------------------------------------------------------- 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