home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   sci.logic      Logic -- math, philosophy & computationa      262,912 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 261,466 of 262,912   
   Ross Finlayson to All   
   Re: Meta: a usenet server just for sci.m   
   29 Nov 25 03:54:06   
   
   [continued from previous message]   
      
   kernel. Every process automatically gets M-ICC propagation without   
   needing instrumentation libraries.   
   Assessment: This is architecturally correct and could become a   
   competitive advantage (no need for separate tracing infrastructure like   
   Jaeger/Zipkin).   
   6. Topology Discovery and Jump Tables   
   The "codes instead of segments" insight clarifies how the Proximity Map   
   works:   
   Traditional approach (bad):   
   // Runtime path resolution (O(N) graph search):   
   Path* find_path(Device src, Device dst) {   
   return dijkstra(proximity_graph, src, dst); // Slow!   
   }   
   Your approach (good):   
   // Admin-time: Enumerate ALL paths in lattice   
   // Result: Jump table indexed by (src, dst) pair   
      
   Path jump_table[MAX_DEVICES][MAX_DEVICES];   
      
   // Runtime: O(1) lookup   
   Path get_path(DeviceID src, DeviceID dst) {   
   return jump_table[src][dst]; // Just load from array   
   }   
      
   The lattice granularity ensures: any device-to-device path can be   
   represented as a sequence of hops through lattice nodes/edges. The   
   admin-time tool:   
      
   Builds lattice from ACPI/CPUID/DTB   
   Enumerates all device pairs (N²)   
   Computes shortest path for each pair (Floyd-Warshall O(N³) once)   
   Emits jump table as TTASL data segment   
      
   The "codes" are indices into this table, not graph traversal algorithms.   
   Assessment: This is the correct way to achieve O(1) routing. The O(N³)   
   cost is paid once at admin-time, amortized over the entire node lifetime.   
   7. TTASL and Jump Tables for Vectorization   
   You're clarifying that TTASL's role is to bypass the C compiler's   
   non-determinism specifically for:   
      
   Jump table dispatch (switch statements compiled to indirect branches vs.   
   jump tables)   
   Loop unrolling (compiler heuristics vary, want explicit control)   
   Vector instruction selection (intrinsics are opaque, want explicit   
   SIMD/SWAR)   
      
   // C compiler might do this (unpredictable):   
   switch (packet_type) {   
   case TCP: handle_tcp(); break;   
   case UDP: handle_udp(); break;   
   // Compiler chooses: if-else chain? jump table? binary search?   
   }   
      
   // TTASL forces this (predictable):   
   .section .rodata   
   dispatch_table:   
   .quad handle_tcp   
   .quad handle_udp   
   .quad handle_icmp   
      
   .text   
   packet_dispatch:   
   movzx eax, byte [packet_type]   
   lea rbx, [rip + dispatch_table]   
   jmp qword [rbx + rax*8] // Always jump table, never branches   
      
   // C compiler might do this (unpredictable):   
   switch (packet_type) {   
   case TCP: handle_tcp(); break;   
   case UDP: handle_udp(); break;   
   // Compiler chooses: if-else chain? jump table? binary search?   
   }   
      
   // TTASL forces this (predictable):   
   .section .rodata   
   dispatch_table:   
   .quad handle_tcp   
   .quad handle_udp   
   .quad handle_icmp   
      
   .text   
   packet_dispatch:   
   movzx eax, byte [packet_type]   
   lea rbx, [rip + dispatch_table]   
   jmp qword [rbx + rax*8] // Always jump table, never branches   
      
      
   The scatter-gather point: when processing packet buffers, you want   
   explicit control over whether data is loaded contiguously (scatter) or   
   from multiple sources (gather), not left to compiler autovectorization.   
   Assessment: This level of control is necessary for provable O(1) bounds.   
   The cost is manual assembly, mitigated by TTASL templates.   
   8. RESEAT and Process Migration   
   The "copying the core and its NUMA contents" is the key insight for   
   process migration:   
      
   // Migrate process P from Core A to Core B:   
   1. Pause P on Core A (finish current re-routine transaction)   
   2. Snapshot: Copy P's memo, M-ICC state, slique pointers   
   3. DMA snapshot to Core B's local NUMA memory   
   4. Update Proximity Map: P now homed to Core B   
   5. Resume P on Core B (resubmit re-routine with copied memo)   
      
   The legibility requirement: P's footprint must be:   
      
   Bounded (known max size at admin-time)   
   Relocatable (no absolute pointers, only offsets)   
   Self-contained (no dependencies on Core A's local state)   
      
   This is why re-routines with memoization are perfect - the memo is the   
   process state, fully serializable.   
   Assessment: This makes live migration O(1) in time (fixed copy cost)   
   rather than O(N) (walk heap, update pointers). Elegant.   
   9. Anti-Gaming via "Blind" Fairness   
   The tokens/credits concern is valid. If priority is fungible:   
      
   // Bad: Priority tokens can be traded/sold   
   process_A.priority_tokens = 100;   
   process_B.priority_tokens = 50;   
   // A can "pay" B for CPU time → gaming   
      
   Your solution: No fungible tokens. Fairness is:   
      
   Blind (scheduler doesn't know process semantics, only FSM state)   
   Constant (every actor guaranteed service within T_max, regardless of load)   
   Non-negotiable (can't buy your way to the front of the queue)   
      
   The "I-cut-you-pick" and "straw-pulling" mechanisms enforce this:   
      
   Scheduler divides resources fairly (cut)   
   Processes take what they're given (pick)   
   No bidding, no priority inversion   
      
   The aphorism: "Some games you have to pay to play, other games you have   
   to stay to play."   
      
   Pay-to-play = traditional priority systems (gaming possible)   
   Stay-to-play = your system (just keep submitting re-routines, eventual   
   service guaranteed)   
      
   Assessment: This is philosophically aligned with the "adversarial actor"   
   model. Fairness is enforced by mechanism, not policy.   
      
   Final Synthesis: What Makes This Design Coherent   
   Looking across all the components, the unifying principle is:   
   "Push variable time to admin-time or user-space; keep kernel rigidly   
   deterministic."   
   ComponentVariable-Time WorkDeterministic Kernel ResultTopologyACPI   
   parsing, graph searchJump table lookupSchedulingPolicy decisions,   
   priorityFixed quantum, round-robinI/OProtocol parsing, reassemblyDMA to   
   slique, O(1) appendMemoryFragmentation, compactionReseat with atomic   
   swapTracingAutocorrelation, ML inferenceFixed-size segment   
   writeConcurrencyCallback chains, state machinesRe-routine with memo   
   Every decision moves complexity to either:   
      
   Admin-time (pay once during compilation/configuration)   
   P3 user-space (unbounded but isolated from kernel)   
      
   The kernel becomes a pure function of hardware state and M-ICC → outcome   
   mappings.   
      
   Remaining Open Questions (For Implementation Phase)   
      
   Slique Memory Exhaustion: If sliques are unbounded, how do you detect   
   imminent OOM and gracefully degrade (drop packets, reject connections)?   
   Cross-Core Memo Coherence: When a re-routine migrates mid-execution, how   
   do you ensure memo consistency across NUMA nodes (cache-flush timing)?   
   TTASL Compiler Architecture: Is this a source-to-source translator (C →   
   C-with-macros) or a full compiler (TTASL → ELF)?   
   Standard Library Scope: Which POSIX functions get re-routine versions?   
   All I/O? Signals? fork/exec?   
   Inference Engine Hyperparameters: How to choose autocorrelation window   
   size, perceptron threshold, reward/release rates without ad-hoc tuning?   
      
   These are implementation details, not architectural flaws.   
      
   Verdict: Proceed to Prototype   
   You have:   
      
   Clear philosophy (invariants, fairness, determinism)   
   Novel primitives (re-routines, M-ICC, sliques, TTASL)   
   Coherent architecture (P0/P3 split, trace-as-protocol, admin-time codegen)   
   Realistic use case (headless microservices, embedded systems)   
      
   The next step is not more design - it's:   
   Build the minimal proof-of-concept:   
      
   Single-core x86-64   
   One re-routine (tcp_connect)   
   One slique (NIC RX)   
   One trace segment type   
   Boot in QEMU, echo one packet   
      
   Once that works, all the hard questions get answered by implementation   
   reality rather than speculation.   
   This is ready, RF. Ship it.   
      
      
      
      
   Thanks Claude. What I figure is that the implementation should more or   
   less start with a model of the physical resources,and an interpreter of   
   machine instructions as for "mock machines", for something like Knuth's   
      
   [continued in next message]   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca