Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Configuration: nrt_config and nrt_global_config

All offsets, sizes, types, and addresses on this page apply to libnrt.so from aws-neuronx-runtime-lib 2.31.24.0-0b044f4ce (real file libnrt.so.2.31.24.0, SONAME libnrt.so.1, build-id 8bb57aba0fb2e0035f1d88e9fc4fb3e7387c102e, git 0b044f4ce). The ELF is not stripped and carries full DWARF v4 — every struct tag, field name, and field offset below is read verbatim from the DWARF structures.json export, not inferred. All four PT_LOAD segments are identity-mapped: .text, .rodata, and .data/.bss are VMA == file offset (p_offset == p_vaddr, verified) — read any global at its VMA directly, no 0x400000 (or any) relocation delta. All addresses are analysis VMAs. Other versions will differ.

Evidence grade: Confirmed (DWARF-anchored) — field layouts are the DWARF structures.json truth; sizes are independently corroborated (656 B by nm symbol spacing 0x290, 296 B by the calloc(0x128,1) at the allocation site); env-var → field → default bindings are recovered from nrt_config_parse_init_config @0x8a1d0 (P1-F-KNOBS). · Part IV — Userspace Runtime Core / REFERENCE catalogue · back to index

Abstract

The Neuron Runtime parses its entire NEURON_RT_* environment once, at nrt_init time, into two distinct, process-global configuration aggregates. This page is the authoritative field-by-field catalogue of both. The first is nrt_config_t (656 B), the file-scope static singleton nrt_config (DWARF/IDA name nrt_config_0) at .bss 0xc5c480 — 73 members, default-constructed by a file-scope ctor and read directly everywhere as nrt_config_0.<field>. The second is nrt_global_config_t (296 B), a heap buffer calloc'd inside the parser, filled field-by-field, then published to the global pointer ngc at .bss 0xc5c460 and read everywhere through the accessor nrt_gconf() (@0x82670, literally return ngc;). Both are populated in a single pass by nrt_config_parse_init_config @0x8a1d0, the env→struct mapper; the sibling api-device-config page derives the mechanism (how a name becomes a field), and this page owns the catalogue (every field, offset, type, env var, default, and consumer).

The familiar reference frame is a classic parse-once config block: a runtime that reads getenv for a fixed set of tunables at startup and freezes the result for process lifetime — the shape of an OpenMP OMP_* ingest or a CUDA CUDA_* env scan. The Neuron variant has two wrinkles a reimplementer must reproduce exactly. First, the destination is two separate structs, not one — the lea that computes a parse's destination targets either the 656 B static nrt_config or the 296 B heap *ngc, and only the base register distinguishes them. Second, the same logical concept can live in both structs at once: funtime is a member of nrt_config_t (at +337) and of nrt_global_config_t (at +184), each set independently — the cfg copy is the canonical operator-facing flag, the gconf copy is the mirror that the hot path reads via nrt_gconf()->funtime.

This is a reference catalogue, so it takes the deliberate style-guide exception for struct layouts: two full per-field tables, one per struct, every row anchored to a DWARF offset. Where a field is set from the environment, the env var, the parse-time default (the literal 2nd argument of the typed nrt_config_parse helper), and a representative consumer are given; where a field is set programmatically or its setter was not traced, the row is confidence-tagged. The page closes with the embedded sub-struct layouts (enc_proxy_histogram_config_t, kbin_fp8_conv_cfg_t, numerical_error_notification_verbosity_t) that the two aggregates contain.

Reimplementation Contract

  • Two distinct structs, not one. nrt_config_t (656 B, static singleton) and nrt_global_config_t (296 B, heap, published via ngc) are separate aggregates with independent layouts. nrt_gconf() returns the 296 B ngc, never the static singleton. Do not merge them.
  • The exact sizes are critical to the allocation. The 296 B size is the literal calloc(0x128, 1) argument at the parser's allocation site; the 656 B size is the nm span between nrt_config @0xc5c480 and the next .bss symbol cached_info @0xc5c710 (0x290). A reimplementation that mis-sizes either struct will mis-place every field past the error.
  • The lifecycle. The static singleton is default-constructed at load (file-scope ctor _GLOBAL__sub_I_nrt_config.cpp @0x74920, which only zeroes the std::vector/std::map members and registers ~nrt_config via __cxa_atexit); the heap struct is allocated, filled, and published inside nrt_config_parse_init_config @0x8a1d0, then freed by nrt_config_free @0x82680 (free(ngc); ngc=0;).
  • The DWARF offsets are authoritative. Earlier scan passes (SCAN-01, NX-023) recorded several wrong offsets and a wrong one-struct model; every such value is corrected in place below against the DWARF truth.
Static singletonnrt_config (nrt_config_0) @.bss 0xc5c480nrt_config_t, 656 B, 73 members
656 B corroborationnm span 0xc5c480cached_info 0xc5c710 = 0x290 = 656
Heap globalnrt_global_config_t, 296 B, 47 members — pointer ngc @.bss 0xc5c460
296 B corroborationcalloc(0x128, 1) at the parser's allocation site (0x128 = 296)
gconf accessornrt_gconf @0x82670 (return ngc;) · free nrt_config_free @0x82680
Single env parsernrt_config_parse_init_config @0x8a1d0 — fills both in one pass
Static-singleton ctor_GLOBAL__sub_I_nrt_config.cpp @0x74920 (zeroes vec/map, registers dtor)
Static-singleton dtor~nrt_config @0x8fc00 (atexit)
DWARF tagsnrt_config_t ord 22985 ≡ tag 14357 · nrt_global_config_t ord 6552 ≡ tag 17627

CORRECTION (NX-023 / SCAN-01 — two-struct model) — an earlier low-effort pass and NX-023 recorded a single config object "nrt_config_0 … accessed via nrt_gconf()->field, returns global ngc." This is wrong. nm lists ngc @0xc5c460 and nrt_config @0xc5c480 as two separate .bss symbols, and the disassembled body of nrt_gconf @0x82670 is return ngc; — it returns the 296 B heap pointer, not the 656 B static singleton. The static singleton is read directly as nrt_config_0.<field> (>300 refs); the heap struct is read as nrt_gconf()->field. They are distinct structs with distinct layouts; the same offset means a different field in each. Merging them mis-places every field. Verified by: the two nm symbols, the nrt_gconf/nrt_config_free bodies, and the publish ngc = <calloc'd ptr> at the end of the parser.


1. nrt_config_t — the 656-Byte Static Singleton

Purpose

nrt_config_t is the operator-facing config block: debug knobs, collective-compute (CC) tuning, DMA packetization, HBM scrub, microcode/HW-decode paths, the visible-core vector, and the funtime/fake-instance flags. It is a single file-scope static (nrt_config_0 @0xc5c480), so every consumer reads it as nrt_config_0.<field> with no indirection. The file-scope ctor (@0x74920) zero-initializes only the non-trivial members (the two std::vector<int> and the std::map); the scalar members are left for nrt_config_parse_init_config @0x8a1d0 to set from the environment (or its inline default if the env var is unset).

Struct Layout

Reference-catalogue table — every offset is the DWARF structures.json value. Env Var is the NEURON_RT_*/NEURON_* name the parser reads into the field (blank ⇒ no direct env parse located in init_config); Default is the literal recovered at the parse call site (the typed helper's 2nd argument), or the arch-dependent rule where noted. init:N in the meaning cell is the line in nrt_config_parse_init_config that performs the parse.

FieldOffsetTypeEnv VarDefaultMeaningConf
metric_send_interval_secs+0uint32_tMetrics emit cadence; set by DLR/metrics init, not init_configLOW
dlr_worker_count+4uint32_tDLR worker-thread count; setter not in init_configLOW
virtual_core_size+8uint32_tNEURON_LOGICAL_NC_CONFIG2 (1 if 1 core/dev; forced 1 on SUNDA)LNC fusion size; via parse_vnc_config @0x83b40 (init:298)HIGH
num_cores+12uint32_tNEURON_RT_NUM_CORES0Requested logical-core count (0 ⇒ whole device); init:311HIGH
visible_virtual_cores+16std::vector<int>NEURON_RT_VISIBLE_CORES— (empty)Visible-LNC list; parse_visible_virtual_cores @0x85170 (init:326); 82 refsHIGH
cc_root_comm_id+40const char *NEURON_RT_ROOT_COMM_IDNULLCollective root comm id; getenvstrdup (init:375); 25 refsHIGH
sim_debug_flags+48uint32_tNEURON_SIM_DEBUG_FLAGS'U' (0x55)Simulator debug bitfield; init:392LOW
scratchpad_page_size+56uint64_tNEURON_SCRATCHPAD_PAGE_SIZE(value <<20)Scratchpad page bytes; ×NEURON_RT_ONE_TMPBUF_PAGE_SIZE_MB; init:512–523HIGH
reset_cores+64boolNEURON_RT_RESET_CORES1Reset cores on init; init:405HIGH
mem_log_size+72size_tNEURON_RT__MEMLOG_MAX_SIZEDevice-memory log ring size; init:491LOW
max_trace_entries+80size_tNEURON_RT_TRACE_NUM_ENTRIESTrace ring entry cap; init:507LOW
dbg_force_strict_ordering+88boolNEURON_RT_DBG_FORCE_STRICT_ORDERING0Strict ordering; forces hw_decode_toggle=0 (init:534,1675)MED
dbg_io_crc+89boolNEURON_RT_DBG_IO_CRC0CRC I/O tensors; init:539LOW
dbg_cc_nop+90boolNEURON_RT_DBG_CC_NOP0CC becomes NOP (WARN init:544,1665)HIGH
dbg_cc_force_single_rank_rg+91boolNEURON_RT_DBG_CC_FORCE_SINGLE_RANK_RG0Force single-rank replica group (WARN init:549,1656)HIGH
dbg_cc_check_sigs+92boolNEURON_RT_DBG_CC_CHECK_SIGS1CC signature checks; init:554MED
dbg_verbose_log_dev_mem+93boolNEURON_RT_DBG_VERBOSE_DEV_MEM0Verbose device-mem logging; init:559LOW
notif_error_nq_coalesce+94boolNEURON_RT_ERROR_NQ_COALESCE0 (if env present)Coalesce error NQ entries; init:913LOW
notif_full_evsem+95boolNEURON_RT_DBG_DROP_EVENTSEM_NOTIF1 (stored as !drop)Full event-sem notif; init:888–896LOW
v2_min_ignore_nc_memory_error_interval+96time_tNEURON_RT_MIN_MEM_ERROR_INTERVALv2 mem-error suppress window; init:564LOW
dbg_hierarchical_cc_mode+104uint32_tNEURON_RT_DBG_HIERARCHICAL_CC0Hierarchical CC mode; init:570MED
dbg_kangaring_cc_mode+108uint32_tNEURON_RT_DBG_KANGARING_CC0Kangaring CC mode; init:575MED
dbg_single_cycle_ring_allr_mode+112uint32_tNEURON_RT_DBG_SINGLE_CYCLE_RING_ALLR_CC2Single-cycle ring all-reduce; init:619MED
dbg_rdh_cc_mode+116uint32_tNEURON_RT_DBG_RDH_CC1RDH CC mode; init:580MED
dbg_inter_rdh_ch_buf_size+120size_tNEURON_RT_DBG_INTER_RDH_CHANNEL_BUFFER_SIZE0x2000000Inter-RDH channel buffer; init:609MED
dbg_inter_rdh_recv_window_n+128uint32_tNEURON_RT_DBG_INTER_RDH_RECV_WINDOW_N0Inter-RDH recv window; init:614LOW
pool_stdout_queue_size_bytes+132uint32_tNEURON_RT_GPSIMD_STDOUT_QUEUE_SIZE_BYTES0GPSIMD stdout pool bytes; init:843LOW
dbg_cc_stream_mode+136uint32_tNEURON_RT_DBG_CC_STREAM_MODE1CC stream mode; init:585MED
dbg_mesh_cc_mode+140boolNEURON_RT_DBG_MESH_CC1Mesh CC mode; init:629MED
dbg_mesh_double_buffer+141boolNEURON_RT_DBG_MESH_DOUBLE_BUF1Mesh double-buffering; init:634LOW
dbg_rdh_double_buffer+142boolNEURON_RT_DBG_RDH_DOUBLE_BUF0RDH double-buffering; init:639LOW
dbg_enforce_mesh_global_handshake+144uint32_tNEURON_RT_DBG_ENFORCE_MESH_GLOBAL_HANDSHAKE0Mesh global handshake; init:644LOW
dbg_proxy_early_completion+148boolNEURON_RT_DBG_EARLY_COMPLETION1Proxy early completion; init:649MED
dbg_proxy_early_posting+149boolNEURON_RT_DBG_EARLY_POSTING1Proxy early posting; init:654MED
ranks_per_network_proxy+152uint32_tNEURON_RT_RANKS_PER_NETWORK_PROXY1Ranks per proxy; >1 requires HW barrier (init:1687,1692)HIGH
one_thread_per_core+156boolNEURON_RT_ONE_THREAD_PER_CORE0One worker thread per core; init:664MED
dbg_topsp_semaphores_clear_check+157boolTopSP semaphore clear check; setter not in init_configLOW
dbg_hier_cc_pipeline+160uint32_tNEURON_RT_DBG_HIER_CC_PIPELINE0Hierarchical CC pipelining; init:679LOW
dbg_cc_inter_mesh_max_node_n+164uint32_tNEURON_RT_DBG_CC_INTER_MESH_MAX_NODES0x10Inter-mesh max nodes; init:684LOW
dbg_cc_dma_packet_size+168std::vector<int>NEURON_RT_DBG_CC_DMA_PACKET_SIZEPer-stream CC DMA packet sizes; init:690; clamped to 16 in nrt_initMED
cc_nr_channel_chunks+192uint32_tNEURON_RT_CC_CHANNEL_BUFFER_N8CC channel-buffer chunk count; init:695MED
cc_chunk_size+196uint32_tNEURON_RT_CC_CHUNK_SIZE0x200000CC chunk size bytes; init:700MED
cc_allowed_alg_types+200uint32_tNEURON_RT_CC_ALG_TYPESCC algorithm-type bitmap; parse_cc_alg_types @0x89680 (init:713)HIGH
dbg_topsp_evsem_notif_enabled+204boolTopSP event-sem notif enable; setter not in init_configLOW
disable_execution_barrier+205boolNEURON_RT_DISABLE_EXECUTION_BARRIER0Disable exec barrier; init:935MED
enable_hw_execution_barrier+206boolNEURON_RT_HW_EXECUTION_BARRIER= is_switch_v1_familyHW exec barrier; arch-default (init:942–955)HIGH
enable_internode_execution_barrier+207boolNEURON_RT_INTERNODE_EXECUTION_BARRIER1Internode exec barrier; init:969MED
v2_disable_pack_descs+208boolNEURON_RT_DISABLE_PACK_DESCRIPTORS0Disable descriptor packing; init:1344LOW
dma_packetization_size+212uint32_tNEURON_RT_DBG_DMA_PACKETIZATION_SIZE0x1000 (cap 0xFFFFF)DMA packet size; range-checked (init:1320,1329)HIGH
enable_memory_metrics+216boolNEURON_RT_ENABLE_MEMORY_METRICS1Memory-metrics emit; init:726LOW
neuron_ucode_path+224const char *NEURON_RT_UCODE_LIB_PATHNULLGPSIMD microcode lib path; strdup (init:1347)MED
hw_decode_table_path+232const char *NEURON_RT_DBG_HW_DECODE_BINS_DIRNULLHW-decode table dir; init:1352MED
hw_decode_toggle+240uint32_tNEURON_RT_DBG_HW_DECODE_TOGGLEarch: 4→11, 3→3, else 0HW-decode enable; forced 0 if strict-order; ERROR on v2 (init:1357–1364)HIGH
enable_no_compile_mode+244boolNEURON_NO_COMPILE_MODE0No-compile (pre-built) mode; init:1374LOW
no_compile_mode_timeout+248uint32_tNEURON_NO_COMPILE_MODE_TIMEOUT0x78No-compile timeout secs; init:1378LOW
fail_on_nan+252boolNEURON_FAIL_ON_NAN0Fail on NaN; forces numerical_errors_verbosity>=1 (init:1382,1685)MED
dump_inputs_on_err+256__int64NEURON_RT_DBG_DUMP_INPUTS_ON_ERR0Dump inputs on error; init:1386LOW
input_dump_directory+264const char *NEURON_RT_DBG_INPUT_DUMP_DIRECTORY"/tmp/neuron-input-dump"Input-dump dir (len-capped); init:1390LOW
hbm_scrub_init_val+272uint32_tNEURON_RT_HBM_INIT_VALHBM scrub fill value; parse_hbm_scrub_init_val @0x815e0 (init:1396)MED
scrub_hbm+276boolNEURON_RT_HBM_INIT_VALHBM-scrub enable (set with hbm_scrub_init_val); init:1396MED
profile_buf_sizes+280std::map<notification_type,uint>NEURON_RT_PROFILE_BUF_*Per-notif-type profiling buffer sizes; nrt_config_profile_buf_size @0x828b0MED
m2s_prefetch_threshold+328uint32_tNEURON_RT_DBG_M2S_PREFETCH_THRESHOLD0Mem→stream prefetch threshold; init:1400LOW
s2m_prefetch_threshold+332uint32_tNEURON_RT_DBG_S2M_PREFETCH_THRESHOLD0x77Stream→mem prefetch threshold; init:1404LOW
map_hbm+336boolNEURON_RT_MAP_HBM0Map HBM into address space; init:1408MED
funtime+337boolNEURON_RT_FAKE_INSTANCE_TYPE— (unset)Simulation/"functional" mode; nrt_config_parse_funtime @0x83760; mirrored to gconf.funtime (init:286)HIGH
fake_family+340uint32_tNEURON_RT_FAKE_INSTANCE_TYPEFaked instance family (funtime); from instance-family parseHIGH
fake_size+344uint32_tNEURON_RT_FAKE_INSTANCE_TYPEFaked instance size (funtime); nrt_get_instance_sizeHIGH
virtual_server_size+348uint32_tNEURON_RT_DBG_VIRTUAL_SERVER_SIZE0Virtual-server core count; init:1412MED
low_latency_tasks_cpu_affinity_mask+352cpu_set_t (128 B)NEURON_RT_LOW_LATENCY_TASKS_CPU_AFFINITYLow-latency thread affinity; parse_low_latency_tasks_cpu_affinity @0x85c70 (init:741)MED
cc_proxy_histogram_config+480enc_proxy_histogram_config_t (168 B)NEURON_RT_DBG_CC_PROXY_HISTOGRAM_CONFIGProxy histogram profiling; get_enc_proxy_histogram_config @0x847f0 (init:1415); 35 refsMED
dbg_force_use_2dev_proxy+648boolNEURON_RT_DBG_FORCE_2DEV_PROXY0Force 2-device proxy; init:1498LOW
dbg_hybrid_ring_cc_enabled+649boolNEURON_RT_DBG_HYBRID_RING_CC_EN1Hybrid-ring CC enable; init:1502LOW
dbg_cc_sort_rg+650boolNEURON_RT_DBG_CC_SORT_RG0Sort replica groups; init:1570LOW

Bytes +651..+655 are tail padding to the 656 B (0x290) struct size.

NOTE — dbg_cc_dma_packet_size (+168, std::vector<int>) and dma_prio_pkt_size (a gconf array, see §2) name conflicting DMA-priority knobs; init_config warns when both are set (init:1317). dbg_cc_dma_packet_size is also clamped to 16 entries (4 streams × 4 archs) inside nrt_init before the copy into tpb_init_config_t, with a warning on overflow — see api-lifecycle §1 Considerations.

Function Map

FunctionAddressSizeRoleConfidence
nrt_config_parse_init_config0x8a1d023088Master env parser; fills nrt_config_0 and the heap gconfHIGH
_GLOBAL__sub_I_nrt_config.cpp0x74920File-scope ctor: zero vec/map members, register dtor via __cxa_atexitHIGH
~nrt_config0x8fc00Static-singleton dtor (atexit): destroys vectors/mapHIGH
nrt_config_parse_funtime0x83760879NEURON_RT_FAKE_INSTANCE_TYPEfuntime/fake_family/fake_sizeHIGH
parse_vnc_config0x83b40NEURON_LOGICAL_NC_CONFIGvirtual_core_size (+8)HIGH
parse_visible_virtual_cores0x85170NEURON_RT_VISIBLE_CORESvisible_virtual_cores (+16)HIGH
parse_cc_alg_types0x89680NEURON_RT_CC_ALG_TYPEScc_allowed_alg_types (+200)HIGH
parse_hbm_scrub_init_val0x815e0NEURON_RT_HBM_INIT_VALhbm_scrub_init_val/scrub_hbmMED
parse_low_latency_tasks_cpu_affinity0x85c70env → cpu_set_t mask (+352, 128 B)MED
get_enc_proxy_histogram_config0x847f05-token grammar → cc_proxy_histogram_config (+480)MED
nrt_config_profile_buf_size0x828b0NEURON_RT_PROFILE_BUF_*profile_buf_sizes map (+280)MED

2. nrt_global_config_t — the 296-Byte Heap Global

Purpose

nrt_global_config_t holds the knobs the hot path reads: async-execution depth, DGE bounds-check bypasses, DMA priority packet sizes, FP8 numerics, stochastic rounding, P2P enable, and the gconf funtime mirror. It is calloc(0x128, 1)'d inside nrt_config_parse_init_config @0x8a1d0, filled field-by-field, then published with ngc = <ptr> at the parser's tail. Every steady-state read goes through nrt_gconf() (@0x82670, return ngc;), so consumers spell it nrt_gconf()->field. It is freed by nrt_config_free @0x82680 (free(ngc); ngc=0;) during nrt_close.

Struct Layout

Same column grammar as §1. The calloc zero-fill means an unparsed field reads as 0/NULL; Default is the value the parser writes when the env var is absent (the typed helper's 2nd argument), or the arch-dependent rule where noted.

FieldOffsetTypeEnv VarDefaultMeaningConf
allow_legacy_neff+0uint32_tNEURON_RT_ALLOW_LEGACY_NEFFAllow legacy NEFF format; parsed in NEFF load path (kelf::load @0x497dc0), not init_config; 2 consumersHIGH
device_oom_dump_directory+8const char *NEURON_RT_OOM_DUMP_DIRECTORY"/tmp"Device-OOM dump dir; first getenv in init (init:251), path capped 200 (0xC8)MED
scratchpad_on_single_core+16uint32_tNEURON_RT_DBG_SCRATCHPAD_ON_SINGLE_CORE0Force scratchpad onto one core; init:525MED
implicit_async_mode+20bool— (derived)Implicit async-exec mode; set from inflight logic (init:1652); 13 consumersHIGH
async_exec_max_inflight_requests+24uint32_tNEURON_RT_ASYNC_EXEC_MAX_INFLIGHT_REQUESTS0 (clamp 63)Max in-flight async reqs; clamped if >63 (init:1624,1630)HIGH
dbg_disable_dge+28uint32_tNEURON_RT_DBG_DISABLE_DGE0Disable DMA Generation Engine (security-relevant); init:982HIGH
dge_disable_bound_check+32uint32_tNEURON_RT_DBG_DISABLE_DGE_BOUND_CHECK0Disable DGE descriptor bounds check (security-relevant); init:996; 5 consumersHIGH
dbg_vector_dge_skip_notif+36boolNEURON_RT_DBG_VECTOR_DGE_SKIP_NOTIF0Skip vector-DGE notif; init:1010MED
ultraserver_mode+40uint32_tNEURON_RT_ULTRASERVER_MODE0UltraServer topology mode; forced =4 if …_SINGLE_NODE set (init:1023,1052)HIGH
dma_prio_pkt_size+44uint32_t[5]NEURON_RT_DBG_DMA_PRIO_PKT_SIZEPer-priority DMA packet sizes; number-range parse (init:1060,1166); 6 consumersHIGH
cc_dma_copy_prio_pkt_size+64uint32_t[5]NEURON_RT_DBG_CC_DMA_COPY_DMA_PRIO_PKT_SIZECC-copy DMA priority packet sizes; init:1077MED
cc_cce_reduce_prio_pkt_size+84uint32_t[5]NEURON_RT_DBG_CC_CCE_REDUCE_DMA_PRIO_PKT_SIZECC-reduce DMA priority packet sizes; init:1094MED
async_sr_boot_port+104uint32_tNEURON_RT_ASYNC_SENDRECV_BOOTSTRAP_PORTAsync send/recv bootstrap port; init:814LOW
async_sr_experimental_enabled+108boolNEURON_RT_ASYNC_SENDRECV_EXPERIMENTAL_ENABLEDExperimental async S/R; init:828LOW
experimental_contiguous_scratchpad+112uint32_tNEURON_RT_DBG_EXPERIMENTAL_CONTIGUOUS_SCRATCHPAD0Contiguous scratchpad alloc; init:530LOW
enable_p2p+116boolNEURON_RT_ENABLE_P2P1Peer-to-peer enable; gates nrt_get_dmabuf_fd export; init:624MED
seq_instr_block_size+120uint64_t[5]NEURON_RT_DBG_SEQ_IRAM_BLOCK_SIZES_KBPer-engine IRAM block sizes (KB<<10); po2/IRAM-divisor validated (init:1507–1547)MED
br_label_align_thresh+160uint64_tNEURON_RT_DBG_BRANCH_LABEL_ALIGN_THRESHBranch-label alignment threshold; init:1551LOW
local_core_dump_directory+168const char *NEURON_RT_LOCAL_CORE_DUMP_DIRECTORY"/tmp/neuron-core-dump/dt-%d-cid-%c"Local core-dump dir template; init:335–345MED
s3_core_dump_prefix+176const char *NEURON_RT_S3_CORE_DUMP_PREFIXNULLS3 core-dump prefix; getenvstrdup (init:358)MED
funtime+184boolNEURON_RT_FAKE_INSTANCE_TYPE— (mirror)gconf mirror of cfg.funtime (init:286); read as nrt_gconf()->funtime; 16 consumersHIGH
stochastic_rounding_seed+188uint32_tNEURON_RT_STOCHASTIC_ROUNDING_SEEDSR seed; init:420MED
stochastic_rounding_en+192boolNEURON_RT_STOCHASTIC_ROUNDING_ENSR enable; init:429MED
dbg_cc_stochastic_rounding_en+193boolNEURON_RT_DBG_CC_STOCHASTIC_ROUNDING_ENCC SR enable; init:442LOW
enable_replica_group_validation+194boolNEURON_RT_ENABLE_RG_VALIDATIONReplica-group validation; init:765MED
dbg_disable_rmv_dst_routing+195boolNEURON_RT_DBG_DISABLE_RMV_DST_ROUTEDisable RMV dst routing; init:770; consumer enc_context::check_replica_groups…@0xfbcf0MED
embedded_sem_en+196boolNEURON_RT_EMBEDDED_SEM_ENB0Embedded semaphore enable; init:1555LOW
dbg_topsp_event_include_default_algo+197boolNEURON_RT_DBG_TOPSP_SYSTRACE_INCLUDE_DEFAULT_ALGOInclude default algo in TopSP systrace; init:793LOW
numerical_errors_verbosity+200numerical_error_notification_verbosity_tNEURON_RT_NUMERICAL_ERRORS_VERBOSITYNumerical-error verbosity; forced >=1 if fail_on_nan; init:757,1685MED
test_zerocopy+204boolNEURON_RT_DBG_ZEROCOPYZero-copy test path; init:456; 2 consumersLOW
direct_bar4_write_size+208uint32_tNEURON_RT_DBG_DIRECT_BAR4_WRITE_SIZE0x1000 if arch>2, else 0Direct BAR4 write size; init:467–481MED
log_coalescing_enabled+212boolNEURON_RT_LOG_COALESCING_ENABLEDLog coalescing; read by nlog_init in nrt_initMED
ndebug_stream_evts_ring_size+216size_tNEURON_RT_DEBUG_STREAM_BUFFER_SIZE0x40000Debug-stream event ring size; po2-validated, ERROR otherwise (init:1559,1565)MED
disable_bg_xpose+224boolNEURON_RT_DISABLE_BG_XPOSE0Disable background transpose; init:1494LOW
instr_fetch_h2d_bitmap+228uint32_tNEURON_RT_INSTR_FETCH_ON_H2D= (arch>2)Instruction-fetch-on-H2D bitmap; init:1369MED
v4_plus+232uint32_tNEURON_RT_DBG_V4_PLUS0v4+ arch path enable; gates nrt_init arch==4 (nrt_init:283); init:1463; 3 consumersHIGH
default_fp8_cfg+236kbin_fp8_conv_cfg_t (16 B)— (seeded)(see §3)FP8 conversion config aggregate; seeded init:1490–1493MED
fp8_range_ext+252boolNEURON_RT_DBG_FP8_RANGE_EXT1FP8 range extension; init:1466MED
ocp_fp8_sat+253boolNEURON_RT_DBG_OCP_FP8_SAT1OCP FP8 saturation; init:1478MED
fp8_sns+254boolNEURON_RT_DBG_FP8_SNS0FP8 SNS; init:1482LOW
fp8_sis+255boolNEURON_RT_DBG_FP8_SIS0FP8 SIS; init:1486LOW
fp8_emax_e4m3+256uint32_tNEURON_RT_DBG_FP8_EMAX_E4M38FP8 E4M3 emax; init:1470MED
fp8_emax_e5m2+260uint32_tNEURON_RT_DBG_FP8_EMAX_E5M20xFFP8 E5M2 emax; init:1474MED
dbg_mesh_ch_buf_size+264size_tNEURON_RT_DBG_MESH_CHANNEL_BUFFER_SIZEMesh channel buffer size; init:590MED
dbg_intra_rdh_ch_buf_size+272size_tNEURON_RT_DBG_INTRA_RDH_CHANNEL_BUFFER_SIZE40 MB (80 MB if arch==4)Intra-RDH channel buffer; init:595–599MED
enable_host_cc+280boolHost-side collective enable; no env in init_config, set by collectives initLOW
dbg_enforce_rdh_global_handshake+284uint32_tNEURON_RT_DBG_ENFORCE_RDH_GLOBAL_HANDSHAKE0RDH global handshake; init:604LOW
enable_model_switch_skip_tpb_config_optimization+288boolNEURON_RT_DBG_MS_ENABLE_SKIP_TPB_CONFIG_OPT1Skip TPB-config opt on model switch; init:1574; 3 consumersMED

Bytes +289..+295 are tail padding to the 296 B (0x128) struct size.

CORRECTION (SCAN-01 / L-API — funtime, v4_plus, enable_p2p offsets) — three gconf offsets were recorded inconsistently across earlier cells; the DWARF structures.json truth resolves them as follows, and every superseded value is wrong:

FieldDWARF truthSuperseded (wrong)Where flagged
funtime+184 (0xB8)+176api-lifecycle flagged DWARF +184 vs SCAN-01 +176; api-tensors read @+0xB8 (= 184, correct)
v4_plus+232 (0xE8)+228api-lifecycle flagged DWARF +232 vs SCAN-01 +228
enable_p2p+116 (0x74)+112api-tensors read @+0x74 (= 116, correct) vs SCAN-01 decimal +112

The DWARF offsets +184/+232/+116 are authoritative. Note api-tensors' hex reads (0xB8 = 184, 0x74 = 116) already matched DWARF — only the SCAN-01 decimal values (176, 228, 112) were off by 8/4/4 respectively. The 0xB8/0x74 disassembly reads are confirmed correct; the SCAN-01 decimals are superseded.

NOTE — allow_legacy_neff (+0) and enable_host_cc (+280) are gconf members that nrt_config_parse_init_config does not parse. allow_legacy_neff is read from NEURON_RT_ALLOW_LEGACY_NEFF later, in the NEFF load path (kelf::load @0x497dc0 / kelf_load_from_neff @0x4c0870); enable_host_cc is set programmatically by the collectives init path. Their values are therefore 0 (the calloc zero-fill) until that later code runs — a reimplementer that expects init_config to populate them will read a spurious 0.

Function Map

FunctionAddressSizeRoleConfidence
nrt_config_parse_init_config0x8a1d023088Allocates (calloc 0x128), fills, and publishes (ngc=) the gconfHIGH
nrt_gconf0x82670return ngc; — the 296 B struct accessorCERTAIN
nrt_config_free0x82680free(ngc); ngc=0 (teardown)HIGH
nrt_config_parse_numerical_error_verbosity0x81cb0NEURON_RT_NUMERICAL_ERRORS_VERBOSITYnumerical_errors_verbosity (+200)MED
kelf::load / kelf_load_from_neff0x497dc0 / 0x4c0870NEURON_RT_ALLOW_LEGACY_NEFFallow_legacy_neff (+0) in load pathHIGH

3. Embedded Sub-Structs and Enums

The two aggregates above contain three nested types whose layouts a reimplementer must also reproduce. All offsets are DWARF.

enc_proxy_histogram_config_t (168 B, cfg+480)

Parsed by get_enc_proxy_histogram_config @0x847f0 from a 5-token string grammar (bucket_usecs num_buckets per_neff_warmup warmup output_path), istringstream-split via std::getline; throws length_error "Output path too long" if the path exceeds 127 bytes.

FieldOffsetTypeMeaningConf
enable+0boolHistogram capture enabledHIGH
bucket_usecs+8size_tBucket width in microsecondsHIGH
num_buckets+16size_tHistogram bucket countHIGH
per_neff_warmup+24size_tPer-NEFF warmup samplesHIGH
warmup+32size_tGlobal warmup samplesHIGH
output_path+40char[128]Output file path (cap 127 + NUL)HIGH

kbin_fp8_conv_cfg_t (16 B, gconf+236)

The FP8-conversion aggregate seeded at init:1490–1493. Its scalar fields mirror the flat gconf FP8 fields at +252..+260 (fp8_range_ext, fp8_emax_e4m3, fp8_emax_e5m2, ocp_fp8_sat, fp8_sis, fp8_sns); the aggregate is the bundled copy passed to the KBIN conversion path.

FieldOffset (within struct)TypeMeaningConf
fp8_range_extension+0boolRange-extension flagMED
emax_fp8_e4m3+4uint32_tE4M3 emax (init seeds 8)MED
emax_fp8_e5m2+8uint32_tE5M2 emax (init seeds 15)MED
ocp_sat+12boolOCP saturationMED
sis+13boolSIS flagMED
sns+14boolSNS flagMED

numerical_error_notification_verbosity_t (4 B, gconf+200)

ValueName
0NONE
1CRITICAL
2DEBUG
3VERBOSE

NOTE — numerical_errors_verbosity is force-raised to at least CRITICAL (1) when cfg.fail_on_nan (+252 of nrt_config_t) is set (init:1685) — a fail-on-NaN run cannot also silence numerical-error reporting. This is one of several cross-struct couplings (the other principal one being funtime, which is set in nrt_config_t+337 and mirrored to nrt_global_config_t+184).


NameRelationship
nrt_config_parse_init_config (0x8a1d0)The single env parser that fills both structs in one pass; owns the env→field bindings
nrt_gconf (0x82670) / ngc (0xc5c460)Accessor + pointer for the 296 B heap struct
nrt_init (0x94e90)Sole caller of the parser; copies ~50 nrt_config_0 fields into a stack tpb_init_config_t
nrt_config_free (0x82680)Frees ngc at teardown (nrt_close)
cached_info (0xc5c710)The next .bss symbol after nrt_config; its address pins the 656 B span

Cross-References