smp: share: README.txt begins the analysis of microcode state
authorMatt Birkholz <puck@birchwood-abbey.net>
Sat, 6 Dec 2014 19:56:10 +0000 (12:56 -0700)
committerMatt Birkholz <puck@birchwood-abbey.net>
Sun, 21 Dec 2014 19:19:10 +0000 (12:19 -0700)
README.txt

index ec6c980cc9a5a4a0b3d1b4809976708ed15b6f2f..acd136bbc4900a14943bcd42b49ac17fefbaddf1 100644 (file)
@@ -141,3 +141,566 @@ is forwarded to the next processor in a ring of all processors.
 Thus 2 processors are interrupted half as often with the same thread
 timer interval.  Four processors run uninterrupted for 4 times the
 interval.
+\f
+
+* Analyses
+
+There are three major concerns when running multiple Scheme machines.
+The fluid-let form needed to be replaced.  The use of without-
+interrupts reviewed because of the change of its behavior.  And the
+variables of the microcode must be sorted between thread-local and
+shared, and the shared variables must protected from simultaneous,
+conflicting updates.
+
+** fluid-let
+
+The "fluid-let" form still exists in the runtime system.  The command
+line
+
+  cd src/runtime/ && grep -in '(fluid-let' *
+
+reveals the 4 remaining lines.
+
+  pp.scm:66:      (FLUID-LET . ,print-let-expression)
+  runtime.cbf:27:(fluid-let ((compiler:coalescing-constant-warnings? #f))
+  runtime.pkg:4838:      (fluid-let :fluid-let)
+  runtime.sf:34:(fluid-let ((sf/default-syntax-table (->environment '(RUNTIME))))
+\f
+** microcode state
+
+The list of state variables used by the various modules of the
+microcode were found by applying nm to each module listed on the
+linker command line.  Of 103 Unix .o files, 91 appear on the Unix link
+command line.  The remaining 12 belong to the 7 microcode modules and
+./findprim.
+
+  nm --defined-only artutl.o avltree.o bkpt.o bignum.o bigprm.o bitstr.o boot.o char.o daemon.o debug.o dfloat.o error.o extern.o fasdump.o fasl.o fasload.o fixnum.o floenv.o flonum.o gcloop.o generic.o hooks.o hunk.o intern.o interp.o intprm.o list.o lookprm.o lookup.o memmag.o missing.o obstack.o option.o osscheme.o ostty.o outf.o prim.o primutl.o ptrvec.o purify.o purutl.o regex.o rgxprim.o step.o storage.o string.o syntax.o sysprim.o term.o transact.o utabmd.o utils.o vector.o wind.o prosenv.o prosfile.o prosfs.o prosio.o prosproc.o prospty.o prosterm.o prostty.o pruxsock.o prossmp.o intext.o pruxenv.o pruxfs.o pruxio.o ux.o uxctty.o uxenv.o uxfile.o uxfs.o uxio.o uxproc.o uxsig.o uxsock.o uxterm.o uxtop.o uxtrap.o uxtty.o uxutil.o cmpauxmd.o terminfo.o tterm.o pruxdld.o pruxffi.o cmpint.o cmpintmd.o comutl.o usrdef.o \
+  | grep -v '^[^ ]* [TtRr] '
+
+  artutl.o:
+
+  avltree.o:
+  00000008 b bias.4380
+  00000000 B tree_error_message
+  00000004 B tree_error_noise
+
+  bkpt.o:
+  00000004 b One_Before
+  00000000 B SP_List
+
+  bignum.o:
+
+  bigprm.o:
+
+  bitstr.o:
+
+  boot.o:
+  00000004 C OS_Name
+  00000004 C OS_Variant
+  00000050 B critical_section_hook
+  0000004c B critical_section_hook_p
+  00000048 B critical_section_name
+  00000024 B ffi_obstack
+  00000000 b initial_C_stack_pointer
+  00000004 b reload_saved_string
+  00000008 b reload_saved_string_length
+  00000004 C scheme_program_name
+  00000000 B scratch_obstack
+
+  char.o:
+
+  daemon.o:
+
+  debug.o:
+  00000000 b saved_addrs
+  00000040 b saved_index
+
+  dfloat.o:
+
+  error.o:
+  00000004 b current_handler_record
+  00000008 b current_restart_record
+  00000000 b next_condition_type_index
+
+  extern.o:
+
+  fasdump.o:
+  00000064 b cc_seen_p
+  0000005c b current_env_mode
+  00000060 b current_pr
+  00000068 b dumped_ephemeron_count
+  000000a4 b fasdump_original_digest
+  0000006c b fasdump_saved_Free
+  00000098 b fasdump_saved_constant_alloc_next
+  000000a0 b fasdump_saved_constant_end
+  0000009c b fasdump_saved_constant_start
+  00000070 b fasdump_saved_heap_alloc_limit
+  00000078 b fasdump_saved_heap_end
+  00000074 b fasdump_saved_heap_start
+  00000094 b fasdump_saved_shared_heap_end
+  0000008c b fasdump_saved_shared_heap_free
+  00000090 b fasdump_saved_shared_heap_start
+  00000088 b fasdump_saved_stack_end
+  00000080 b fasdump_saved_stack_guard
+  0000007c b fasdump_saved_stack_pointer
+  00000084 b fasdump_saved_stack_start
+  00000000 b fasl_header
+  00000058 b fh
+  000000b0 b fixups_end
+  000000ac b fixups_next
+  000000a8 b fixups_start
+  000000b4 b initialized_p.7460
+  000000c0 b table.7461
+
+  fasl.o:
+
+  fasload.o:
+  00000084 b failed_heap_length.6294
+  00000000 b fasl_header
+  00000058 b fh
+  00000088 b initialized_p.6365
+  000001c8 b initialized_p.6399
+  00000060 b new_constant_start
+  0000005c b new_heap_start
+  00000070 b new_prim_table
+  00000068 b new_stack_end
+  00000064 b new_stack_start
+  0000006c b new_utilities
+  00000074 b reload_band_name
+  00000078 b reload_cleanups
+  00000080 b reload_constant_size
+  0000007c b reload_heap_size
+  000000a0 b table.6366
+  000001e0 b table.6400
+
+  fixnum.o:
+
+  floenv.o:
+  00000004 b scheme_fenv
+  00000000 b scheme_fenv_p
+
+  flonum.o:
+
+  gcloop.o:
+  00000004 C current_gc_table
+  00000024 b current_object
+  00000020 b current_scan
+  0000002c b ephemeron_list
+  00000030 b ephemeron_queue
+  00000004 b gc_abort_handler
+  00002048 b gc_object_referenced
+  0000204c b gc_object_references
+  00002050 b gc_object_references_count
+  00002058 b gc_object_references_end
+  00002054 b gc_object_references_scan
+  00000040 b gc_scan_history
+  00000038 b gc_scan_history_index
+  00002040 b gc_scan_trap
+  00001040 b gc_to_history
+  00002044 b gc_to_trap
+  00000000 b gc_tospace_allocator
+  00000000 d gc_trap
+  00000020 D gc_type_map
+  00002060 b initialized_p.5660
+  0000001c b newspace_end
+  00000018 b newspace_next
+  00000014 b newspace_start
+  00000034 b scanning_ephemerons_p
+  00002080 b table.5661
+  00000010 b tospace_end
+  0000000c b tospace_next
+  00000008 b tospace_start
+  00000028 b weak_chain
+  0000205c b weak_chain_length
+
+  generic.o:
+
+  hooks.o:
+
+  hunk.o:
+
+  intern.o:
+
+  interp.o:
+  00000000 B interpreter_state
+  00000004 B prim_apply_error_code
+
+  intprm.o:
+
+  list.o:
+
+  lookprm.o:
+
+  lookup.o:
+
+  memmag.o:
+  00000000 d primes
+  00000004 b saved_constant_size
+  00000000 b saved_heap_size
+  00000004 C saved_processor_count
+  00000004 C saved_processor_heap_size
+  00000004 C saved_stack_size
+  00000008 b saved_to
+
+  missing.o:
+
+  obstack.o:
+  00000004 C _obstack
+
+  option.o:
+  00000004 B option_band_file
+  00000001 C option_batch_mode
+  00000004 C option_constant_size
+  00000001 C option_disable_core_dump
+  00000001 C option_emacs_subprocess
+  00000008 B option_fasl_file
+  00000001 C option_force_interactive
+  00000004 C option_heap_size
+  00000000 B option_library_path
+  00000004 C option_processor_count
+  00000004 C option_processor_heap_size
+  00000014 b option_raw_band
+  0000001c b option_raw_constant
+  00000018 b option_raw_heap
+  00000010 b option_raw_library
+  00000024 b option_raw_processor_count
+  00000028 b option_raw_processor_heap
+  00000020 b option_raw_stack
+  00000004 C option_saved_argc
+  00000004 C option_saved_argv
+  00000001 C option_show_help
+  00000001 C option_show_version
+  00000004 C option_stack_size
+  0000000c b option_summary
+  00000004 C option_unused_argc
+  00000004 C option_unused_argv
+
+  osscheme.o:
+
+  ostty.o:
+  00000000 b next_interrupt_char
+
+  outf.o:
+  00000000 b stderr_mutex
+  00000018 b stdout_mutex
+
+  prim.o:
+
+  primutl.o:
+  00000000 B MAX_PRIMITIVE
+  00000008 B Primitive_Arity_Table
+  0000000c B Primitive_Count_Table
+  00000014 B Primitive_Documentation_Table
+  00000010 B Primitive_Name_Table
+  00000004 B Primitive_Procedure_Table
+  00000018 B load_renumber_table
+  00000088 d null_string.6141
+  00000020 b prim_procedure_tree
+  0000001c b prim_table_size
+  00000000 d primitive_aliases
+
+  ptrvec.o:
+
+  purify.o:
+
+  purutl.o:
+
+  regex.o:
+  00000000 D re_max_failures
+
+  rgxprim.o:
+
+  step.o:
+
+  storage.o:
+  000002a0 D Abort_Names
+  00000015 B Bignum_Debug
+  00000004 D CONT_PRINT_EXPR_MESSAGE
+  00000000 D CONT_PRINT_RETURN_MESSAGE
+  0000000d B Cont_Debug
+  00000010 B Define_Debug
+  00000013 B Dump_Debug
+  000002e0 D Error_Names
+  00000008 B Eval_Debug
+  0000000a B File_Load_Debug
+  00000000 B Free_primitive
+  00000011 B GC_Debug
+  00000009 B Hex_Input_Debug
+  0000000c B Intern_Debug
+  0000000f B Lookup_Debug
+  00000010 D MAX_RETURN
+  00000016 B Per_File
+  0000000e B Primitive_Debug
+  0000000c D RESTORE_CONT_EXPR_MESSAGE
+  00000008 D RESTORE_CONT_RETURN_MESSAGE
+  0000000b B Reloc_Debug
+  00000020 D Return_Names
+  000003e0 D Term_Names
+  00000014 B Trace_On_Error
+  00000012 B Upgrade_Debug
+  00000004 C constant_alloc_next
+  00000004 C constant_end
+  00000004 C constant_start
+  00000190 C debug_circle
+  0000001c B debug_nslots
+  00000018 B debug_slotno
+  00000000 B ephemeron_array
+  00000004 B ephemeron_count
+  00000001 C ephemeron_request_hard_p
+  00000004 C fixed_objects
+  000004e0 D fixed_objects_names
+  00000018 B gc_shared_space_needed
+  00000014 B gc_space_needed
+  00000004 C heap_reserved
+  00000004 B heap_start
+  0000000c B last_return_code
+  00000190 C local_circle
+  00000024 B local_nslots
+  00000020 B local_slotno
+  00000004 C memory_block_end
+  00000004 C memory_block_start
+  00000004 C n_ephemerons_requested
+  00000004 C p0_heap_start
+  00000004 C shared_heap_end
+  00000004 C shared_heap_free
+  00000004 C shared_heap_start
+  00000008 B stack_end
+  00000460 D term_messages
+  00000010 B trapping
+  000001a0 D type_names
+
+  string.o:
+  00000000 b external_strings
+
+  syntax.o:
+  00000080 D syntax_code_spec
+  00000000 D syntax_spec_code
+
+  sysprim.o:
+
+  term.o:
+  00000020 b new_state.6060
+  000000e0 b new_state.6077
+  00000000 b position.6059
+  000000cc b position.6076
+
+  transact.o:
+  00000000 b current_transaction
+
+  utabmd.o:
+  00000000 d identity_names
+
+  utils.o:
+  00000004 C death_blow
+  00000000 b error_argument
+  00000000 B history_register
+  00000004 B prev_restore_history_offset
+
+  vector.o:
+
+  wind.o:
+  00000024 b current_winding_record
+  00000000 b dstack
+  00000028 B dstack_position
+  00000000 b save_binding_location
+
+  prosenv.o:
+
+  prosfile.o:
+
+  prosfs.o:
+
+  prosio.o:
+  00000000 d channel_type_names
+
+  prosproc.o:
+
+  prospty.o:
+
+  prosterm.o:
+
+  prostty.o:
+
+  pruxsock.o:
+
+  prossmp.o:
+  00000020 b finished
+  00000018 B gc_processor
+  00000004 C processors
+  00000060 b ready
+  00000000 B self
+  000000ac b smp_idle_prim
+  00000000 B state_mutex
+  00000090 b thread_mutex
+  000000a8 b trace_p
+
+  intext.o:
+  00000000 B current_interruptable_extent
+
+  pruxenv.o:
+
+  pruxfs.o:
+
+  pruxio.o:
+
+  ux.o:
+  00000000 B UX_out_of_files_p
+  00000004 b memoized_clk_tck
+
+  uxctty.o:
+  00000000 b ctty_fildes
+  0000024c b current_interrupt_chars
+  00000248 b current_interrupt_enables
+  00000140 b inside_ctty_state
+  000001a0 b inside_stdin_state
+  00000200 b inside_stdout_state
+  00000250 b int_chars.7411
+  00000253 b int_handlers.7428
+  00000020 b outside_ctty_state
+  00000080 b outside_stdin_state
+  000000e0 b outside_stdout_state
+  00000004 b permit_ctty_control
+  00000004 C scheme_in_foreground
+
+  uxenv.o:
+  00000010 b current_dir_path
+  0000000c b current_dir_path_size
+  00000000 b initial_process_clock
+  00000004 b initial_rtc
+  00000000 d utc_epoch_minus_unix_epoch
+  00000020 b zero_tx.8640
+
+  uxfile.o:
+
+  uxfs.o:
+  00000000 b directory_pointers
+  00000004 b n_directory_pointers
+
+  uxio.o:
+  00000004 C OS_channel_table_size
+  00000004 C channel_table
+
+  uxproc.o:
+  00000004 C OS_process_table_size
+  00000004 b foreground_child_process
+  00000020 b grabbed_signal_mask
+  00000004 C process_table
+  00000008 b process_tick
+  00000000 b scheme_ctty_fd
+  00000004 C scheme_jc_status
+  0000000c b sync_tick
+
+  uxsig.o:
+  00000000 b blocked_signals
+  000000a0 b buffer.8771
+  00000000 d reset_choices.9210
+  00000080 b signal_descriptors
+  00000084 b signal_descriptors_length
+  00000088 b signal_descriptors_limit
+  00000004 C stop_signal_hook
+  00000004 C subprocess_death_hook
+
+  uxsock.o:
+  00000000 b address.8832
+
+  uxterm.o:
+  00000008 b slave_name.9024
+  00000004 b terminal_table
+  00000000 b terminal_table_size
+
+  uxtop.o:
+  00000000 b interactive
+  00000000 d syscall_names_table
+  00000120 d syserr_names_table
+
+  uxtrap.o:
+  00000010 b saved_info
+  00000014 b saved_scp
+  0000000c b saved_signo
+  00000008 b saved_trap_state
+  00000000 d trap_query_choices.9003
+  00000000 b trap_state
+  00000004 b user_trap_state
+  00000000 b ux_signal_codes
+
+  uxtty.o:
+  00000000 b input_channel
+  00000004 b output_channel
+  00000840 b tgetstr_buffer.8852
+  00000020 b tputs_output
+  00000820 b tputs_output_scan
+  00000010 b tty_command_beep
+  00000014 b tty_command_clear
+  00000018 b tty_size_synchronized_p
+  00000008 b tty_x_size
+  0000000c b tty_y_size
+
+  uxutil.o:
+  0000003c b buffer.8550
+  00000060 b buffer.8562
+  00000000 b original_tty_state
+
+  cmpauxmd.o:
+  0000001c B C_Frame_Pointer
+  00000018 B C_Stack_Pointer
+  00000000 B Free
+  000000a0 B Registers
+  00000004 B heap_alloc_limit
+  00000008 B heap_end
+  00000004 C i387_presence
+  00000004 C ia32_cpuid_needed
+  00000004 C ia32_cpuid_supported
+  00000004 C sse_presence
+  0000000c B stack_guard
+  00000010 B stack_pointer
+  00000014 B stack_start
+
+  terminfo.o:
+
+  tterm.o:
+  00000000 b termcap_buffer
+  00000800 b tgetstr_buffer
+  00001000 b tgetstr_pointer
+  00001020 b tputs_output
+  00001820 b tputs_output_scan
+
+  pruxdld.o:
+  00000000 b cleanup_registered_p
+  0000000c b loaded_handles
+  00000004 b loaded_handles_size
+  00000008 b n_loaded_handles
+
+  pruxffi.o:
+  00000004 b c_call_continue
+  00000000 B cstack_depth
+  0000000c b return_to_c
+  00000008 b run_callback
+
+  cmpint.o:
+  00000010 b builtin_names
+  0000000c b builtins
+  00000004 C compiler_interface_version
+  00000004 C compiler_processor_type
+  00000004 C compiler_utilities
+  00000000 b linking_cc_block_p
+  00000138 D max_trampoline
+  00000004 b n_builtins
+  00000004 C reflect_to_interface
+  00000004 C return_to_interpreter
+  00000008 b s_builtins
+  00000000 d trampoline_arity_table
+  00000040 D utility_table
+
+  cmpintmd.o:
+  00000000 b fp_support_present
+
+  comutl.o:
+  00000000 b ilof_prefix
+
+  usrdef.o:
+  00000000 D MAX_STATIC_PRIMITIVE
+  00001f40 D Static_Primitive_Arity_Table
+  000029a0 D Static_Primitive_Count_Table
+  000014e0 D Static_Primitive_Documentation_Table
+  00000a80 D Static_Primitive_Name_Table
+  00000020 D Static_Primitive_Procedure_Table