<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet href="/feed_style.xsl" type="text/xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="https://www.rssboard.org/media-rss">
  <channel>
    <title>Engineering on Eva Winterschon</title>
    <link>https://winterschon.gitlab.io/tags/engineering/</link>
    <description>Recent content in Engineering on Eva Winterschon</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>Some copyright notice - [my license](https://example.com/license)</copyright>
    <lastBuildDate>Thu, 18 Jun 2026 23:39:50 +0000</lastBuildDate><atom:link href="https://winterschon.gitlab.io/tags/engineering/index.xml" rel="self" type="application/rss+xml" /><icon>https://winterschon.gitlab.io/logo.svg</icon>
    
    
    <item>
      <title>Inference Sector KPI SLO</title>
      <link>https://winterschon.gitlab.io/en/posts/inference-sector-kpi-slo/</link>
      <pubDate>Thu, 18 Jun 2026 23:39:50 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/inference-sector-kpi-slo/</guid>
      <description><![CDATA[<h2 id="why-should-anyone-care-about-kpis-and-slos">Why should anyone care about KPIs and SLOs?</h2>
<p>Generally, unless one gets paid to deal with OBS/Tel and SLA conformance.. ehh. Except that the modern world operates within the bounds of a diverse and often not-fascinating array of performance indicators and services&rsquo; operating metrics.</p>
<h4 id="so-here-are-two-for-today">So.. Here are two for today.</h4>
<ul>
<li><strong>KPI</strong> == Key Performance Indicator</li>
<li><strong>SLO</strong> == Service Level Objective</li>
</ul>
<h3 id="minor-backstory---today">Minor Backstory - Today</h3>
<p>While aggregating directory content from several workstations into a unified NFS remote mount,<em>(can&rsquo;t simply have one workstation, right? right)</em>, another encounter with SLO defs appears upon the terminal.</p>
<p>This time it&rsquo;s for LLM Inference customers and their typical requirements. Perhaps our standards repository would be helpful as an adjunct resource:</p>
<ul>
<li><a href="https://github.com/yukon-systems/YukonSYS-Standard-Definitions">https://github.com/yukon-systems/YukonSYS-Standard-Definitions</a></li>
</ul>
<h2 id="inference-service-kpis-by-sector">Inference Service KPIs by Sector</h2>
<p>An extension of distributed cloud services architecture with heavy focus on baremetal with VMs and Containers throughout. Many ways to solve the problems, scale the infra, etc.</p>
<h4 id="slo-additions-to-the-classifier-repo">SLO Additions to the Classifier Repo</h4>
<ul>
<li>This file is a compact companion to the observability + telemetry glossary.</li>
<li>Each threshold is a starting point and should be tightened to real-world workload SLOs after baselining standard operations.</li>
</ul>
<table>
  <thead>
      <tr>
          <th>Sector</th>
          <th>High-signal KPIs</th>
          <th>Default alert style</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>LLM Inference (GP-GPU Service Infra)</td>
          <td>TTFT, ITL/TPOT, E2E, QTS</td>
          <td>SLO-derived or baseline-relative; baseline-relative</td>
      </tr>
      <tr>
          <td>LLM Inference (API Service Infra)</td>
          <td>P95 LAT, ERR, 429R, UST</td>
          <td>SLO-derived</td>
      </tr>
      <tr>
          <td>LLM Inference (Network Hardware + Protocol Infra)</td>
          <td>OWD, PDV, LOSS, ECN</td>
          <td>baseline-relative; budget-relative</td>
      </tr>
      <tr>
          <td>LLM Inference (Prompt Caching, Compute + Re-Compute)</td>
          <td>PCHR, CTR, TTFTR, RCR</td>
          <td>absolute for cache-eligible traffic</td>
      </tr>
      <tr>
          <td>LLM Inference (Prompt Caching, Storage Infra)</td>
          <td>CHR, CLAT, COCC, EVR</td>
          <td>absolute; absolute for cache-eligible traffic</td>
      </tr>
      <tr>
          <td>LLM Inference (Prompt Caching API + Load-Balancers)</td>
          <td>RCHR, LQ, URT, RTR</td>
          <td>absolute</td>
      </tr>
      <tr>
          <td>LLM Training (bulk initial datasets)</td>
          <td>ITPS, DHR, UDR, CONT</td>
          <td>absolute; capacity-envelope</td>
      </tr>
      <tr>
          <td>LLM Training (pre-training MoE)</td>
          <td>MFU, STEP, A2AS, EIR</td>
          <td>absolute starting point; baseline-relative</td>
      </tr>
      <tr>
          <td>LLM Training (post-training MoE)</td>
          <td>TPS, MFU, RACC, RMAR</td>
          <td>absolute starting point; baseline-relative</td>
      </tr>
      <tr>
          <td>HPC - High Frequency Trading - VM Clusters</td>
          <td>RDY, CSTP, NUMA MISS, T2D</td>
          <td>absolute starting point</td>
      </tr>
      <tr>
          <td>HPC - High Frequency Trading - Baremetal</td>
          <td>W2W, JITR, CPM, MPKI</td>
          <td>baseline-relative; budget-relative</td>
      </tr>
      <tr>
          <td>HPC - High Frequency Trading - CDN</td>
          <td>CHR, OOR, TTFB, OTTFB</td>
          <td>absolute</td>
      </tr>
      <tr>
          <td>HPC - High Frequency Trading - Low-Latency Exec</td>
          <td>OWD, JIT, FLAT, OLAT</td>
          <td>baseline-relative; budget-relative</td>
      </tr>
      <tr>
          <td>HPC - Dark Fiber Regional Network + Infra</td>
          <td>AVAIL, OWD, Pre-FEC BER, OSNRM</td>
          <td>SLO-derived; budget-relative</td>
      </tr>
      <tr>
          <td>HPC - Quantitative Research + Machine Learning</td>
          <td>BTT, FLAT, TSS, FFL</td>
          <td>absolute starting point; baseline-relative</td>
      </tr>
      <tr>
          <td>HPC - Big-Data &amp; Multivariate Pattern Analysis</td>
          <td>JDUR, SKR, SPILL, CLAG</td>
          <td>SLA-derived; absolute</td>
      </tr>
      <tr>
          <td>SLA + SLO Monitoring, Telemetry, Alerting Infra</td>
          <td>SLI-AV, SLI-LAT, EBR, UP</td>
          <td>SLO-derived</td>
      </tr>
  </tbody>
</table>
<hr>
<h3 id="global-policy-adjustments">Global Policy Adjustments</h3>
<ul>
<li><strong>baseline_window</strong>:
<ul>
<li><code>7d median or p50/p95 baseline unless otherwise stated</code></li>
</ul>
</li>
<li><strong>slo_policy</strong>:
<ul>
<li><code>page: error budget burn rate &gt; 14.4 over 1h and 5m, or &gt; 6 over 6h and 30m</code></li>
<li><code>ticket: error budget burn rate &gt; 1 over 3d and 6h</code></li>
</ul>
</li>
<li><strong>capacity_policy</strong>:
<ul>
<li><code>warn: sustained &gt; 80% of validated steady-state capacity</code></li>
<li><code>critical: sustained &gt; 90% of validated steady-state capacity or latency inflects above SLO</code></li>
</ul>
</li>
<li><strong>regression_policy</strong>:
<ul>
<li><code>warn: &gt; 1.10x to 1.25x baseline depending on sector sensitivity</code></li>
<li><code>critical: &gt; 1.20x to 1.50x baseline depending on sector sensitivity</code></li>
</ul>
</li>
</ul>
<hr>
<h3 id="reference-considerations">Reference Considerations</h3>
<ul>
<li>Thresholds are starting operational thresholds, not universal laws.</li>
<li>Where a standards or vendor reference provides an acceptable range, that range is used.</li>
<li>Where no universal value exists, thresholds are either SLO-derived or baseline-relative (typically against a 7d median or a validated capacity envelope).</li>
<li>For latency-sensitive sectors, alert on percentile regressions and budget exhaustion, not averages.</li>
</ul>
<hr>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>Summer 💌 for Workstations?</title>
      <link>https://winterschon.gitlab.io/en/posts/summer-love-for-workstations/</link>
      <pubDate>Thu, 18 Jun 2026 03:17:51 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/summer-love-for-workstations/</guid>
      <description><![CDATA[<ol>
<li>I don&rsquo;t like Linux. There, I&rsquo;ve said it. I say it every day. I use Gentoo when I must.</li>
<li>I have to use Linux for work. I&rsquo;d rather use FreeBSD or Solaris.</li>
<li>I prefer Solaris for my workstations, and a Model M keyboard, or Sun-Type5c</li>
<li>I don&rsquo;t like dealing with UEFI loaders, <code>efibootmgr</code>, stub EFI-loaders, dracut, initramfs. I don&rsquo;t use <code>grub</code> or <code>grubby</code> unless I am forced to, though I know the low-level nerdery of every single layer of modern boot sequences, often due to obligation more than curiosity these days - it used to be extremely fun, but now too many corps ship trash code (Ai code from IBM&rsquo;s Granite and 5.5-Pro is pretty fuckin&rsquo; good though, and better documentation than most people I&rsquo;ve ever worked with).</li>
<li>I&rsquo;m tired of debugging unnecessary breakage due to engineers not following standards. We have entire bodies of communities of engineers making standards specifically to avoid regular engineers from having to waste their time dealing with non-standard garbage. Fuckall it&rsquo;s tiring and it&rsquo;s been getting worse every year since 2020. Wake up people!</li>
<li>SystemD can go back to Guatemala City and stay in the ditch where it belongs.</li>
</ol>
<h2 id="92d-uptime-on-custom-gentoo-stage4-liveiso">92d+ Uptime on Custom Gentoo Stage4 LiveISO</h2>
<p>And that was a decent go on this build; one simply avoids ever using GCC and SystemD – use LLVM/Clang + OpenRC, and.. wow.. it&rsquo;s like 2006 when things worked, Cobalt RaQ was still in the colo by the grids, an E10K or a few hundreds were still in service and would continue to stay online for years to come.</p>
<p>Oh, and admins and engineers didn&rsquo;t avoid UNIX tools or determine <code>ifconfig</code> or <code>netstat</code> had to be <em>&quot;<strong>deprecated</strong>&quot;</em> <em>(please, fuck off)</em>. So, get rid of the trash and then the systems become substantially more stable on the daily. Personally I trust my own ability to run and automate fleets of systems, not a tangled mess of low-hanging-fruit nod-to-redmond that most linux distros are suffered to use <em>(CVE town is so rad, ja?)</em></p>
<p>92 days of uptime is generally close to mean value, and unfortunately it was ruined by having to upgrade the BMC and BIOS firmware versions due to <em>&ldquo;reasons&rdquo;.</em> Everything is being upgraded <em>just in case</em> because of the Github CVE in May. It&rsquo;s wrecked so many upstream tools and sites and services and so many people are scrambling as if <code>Log4J</code> had just shit the bed and fell back asleep. But don&rsquo;t worry.. <em>&ldquo;no customers were impacted&rdquo;</em> 😂</p>
<hr>
<h2 id="anyway-resuming-to-workstations-and-stage4">Anyway, Resuming to Workstations and Stage4</h2>
<p>While there have been improvement on recompiles when optimizing test nodes&rsquo; kernels and enabling accelerators, the CI system for the building stages was upgraded to enable portage to use cross-datacenter <code>distcc</code> <em>(distributed compiling)</em> over a decent 5GbE symmetric fiber from a lab-rack to the colo cross-connect. Then the jobs are spooled off to SLURM nodes, rebuilding thin-LTO, PaX, PAE, ASLR. Very similar to a distributed Poudtierer, but without the memories of Poutine <em>(and I love a good Poutine, especially in a light snowstorm in Banff, at least as much as the Chinese restaurant on the first left into town)</em>.</p>
<p>How many times do I need to follow this type of flowchart (made it, wow, so amazing) every time Supermicro releases a new BMC or BIOS upgrade? Dell, you&rsquo;re not much better but at least the release notes are decent and there&rsquo;s the Yum/Deb repo (one of these days I&rsquo;ll put my Gentoo + Dell Driver overlay into a public git repo <em>(not on git/msft-hub.com)</em> for other Gentoo PowerEdge users to more easily remain up-to-date on firmware packages (<code>fwupdmguur</code> does&rsquo;t cover everything, and the last time I trust it not to shit the bed it bricked my Thinkpad X1 Nano - thanks brosefs (am I saying that right? ehh).</p>
<p><img src="/content/images/2026/06/Screenshot_20260617_194112.png" alt=""></p>
<hr>
<p><code>fuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu</code></p>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>Performance Engineering - Evaluative Metrics</title>
      <link>https://winterschon.gitlab.io/en/posts/performance-engineering-evaluative-metrics/</link>
      <pubDate>Sat, 13 Jun 2026 15:43:01 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/performance-engineering-evaluative-metrics/</guid>
      <description><![CDATA[<h2 id="llm-inference">LLM Inference</h2>
<table>
  <thead>
      <tr>
          <th>Sector</th>
          <th>Common metrics</th>
          <th>Less-known / specialist metrics</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GP-GPU Service Infrastructure</td>
          <td>TTFT, ITL/TPOT, E2E request latency, TPS, RPS/QPS, Queue-Fill, KV/C metrics</td>
          <td>request_queue_time, request_prefill_time, request_decode_time, inflight time, SM occupancy, HBM/DRAM memory throughput</td>
      </tr>
      <tr>
          <td>API Service Infrastructure</td>
          <td>p50/p95/p99 latency, streaming TTFB/TTFT, RPS/QPS, error rate, 429 rate, active downstream connections, backend latency</td>
          <td>x-envoy-upstream-service-time, upstream_rq_time, TR/Tw/Tc/Tr/TA timer split in HAProxy, retry rate, queue-slot saturation, circuit-breaker usage</td>
      </tr>
      <tr>
          <td>Network Hardware + Protocol Infra</td>
          <td>RTT (round-trip time), one-way latency, jitter/PDV (packet delay variation), PPS/BPS, packet loss, retransmits</td>
          <td>ECN mark rate, PFC (priority flow control) pause events, microburst depth, CQE (completion queue entry) compression state, SymbolErrors, LinkRecoveries, PTP offset/path delay</td>
      </tr>
      <tr>
          <td>Prompt Caching, Compute + Re-Compute</td>
          <td>cache hit rate, cached_tokens, prompt_tokens, generation_tokens, TTFT reduction, cache read/write counts</td>
          <td>partial-hit ratio, cache-miss ratio, prefix-cache block hit rate, predicted KV hit rate, per-request routing overhead</td>
      </tr>
      <tr>
          <td>Prompt Caching, Storage Infra</td>
          <td>cache hit ratio, eviction rate, cache latency, TTL, GPU/CPU cache usage</td>
          <td>CPU-vs-GPU cache-hit split, priority-based eviction effect, TTL refresh behavior, KV-block fragmentation / block reuse</td>
      </tr>
      <tr>
          <td>Prompt Caching, API + Load-Balancers</td>
          <td>per-route/model hit rate, active and pending requests, backend latency, request rate, retries, error rate</td>
          <td>cache-aware routing predicted KV hit rate, routing overhead, queue time before backend selection, circuit-breaker saturation, connection-slot pressure</td>
      </tr>
  </tbody>
</table>
<h3 id="acronyms">Acronyms</h3>
<ul>
<li>TTFT == Time to First Token</li>
<li>ITL == Inter-Token Latency</li>
<li>TPOT == Time per Output Token</li>
<li>E2E == end-to-end</li>
<li>TKS == tokens/sec</li>
<li>RPS == requests/sec</li>
<li>QPS == queries/sec</li>
<li>KV/C == Key-Value Cache</li>
</ul>
<h2 id="llm-dataset-training">LLM Dataset Training</h2>
<table>
  <thead>
      <tr>
          <th>Operations</th>
          <th>Common metrics</th>
          <th>Less-known / specialist metrics</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Pre-loading datasets</td>
          <td>ingest throughput (docs/s, rows/s, bytes/s, tokens/s), tokenization throughput, DataLoader throughput, dedup ratio</td>
          <td>fuzzy-duplicate rate, semantic-duplicate rate, contamination rate/AUC, consumer lag, shuffle spill bytes</td>
      </tr>
      <tr>
          <td>Pre-training + MoE</td>
          <td>tokens/s, step time, MFU (model FLOPs utilization), training loss/perplexity, all-to-all/dispatch time, GPU memory</td>
          <td>auxiliary load-balancing loss, router z-loss, expert capacity factor, token-drop rate, per-layer expert imbalance</td>
      </tr>
      <tr>
          <td>Post-training + MoE</td>
          <td>step time, samples/s or tokens/s, train/val loss, reward/preference accuracy, KL divergence, MFU</td>
          <td>chosen vs rejected reward margin, chosen/rejected rewards, router aux/z loss during alignment, expert saturation under small-batch tuning</td>
      </tr>
  </tbody>
</table>
<h2 id="hpc--hft-analytics-infrastructure">HPC + HFT Analytics Infrastructure</h2>
<table>
  <thead>
      <tr>
          <th>Sector</th>
          <th>Common metrics</th>
          <th>Less-known / specialist metrics</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Virtual Machine Clusters</td>
          <td>p50/p99 service latency, jitter, CPU ready time, throughput, packet loss</td>
          <td>CPU co-stop, NUMA locality (numa_hit/numa_miss/local_node/other_node), vCPU scheduling contention, latency-sensitivity effectiveness</td>
      </tr>
      <tr>
          <td>Baremetal Systems</td>
          <td>wire-to-wire latency, p99/p999 jitter, PPS/Mpps, cycles, instructions, LLC-load-misses, branch-misses, RX/TX drops</td>
          <td>NUMA locality, interrupt coalescence, CQE compression state, packet pacing, driver extended stats / ring stress</td>
      </tr>
      <tr>
          <td>Content Delivery Networking</td>
          <td>cache hit ratio, TTFB, origin offload, request rate, error rate, egress bandwidth</td>
          <td>shield-layer hit ratio, origin_ttfb, child/parent cache status, regional cache-performance variance</td>
      </tr>
      <tr>
          <td>Low-Latency Trade-Execution Networks</td>
          <td>one-way latency, RTT, jitter, packet loss, order latency, feed latency</td>
          <td>microburst depth, queue/buffer pressure, ECN mark rate, PFC pause events, path asymmetry, PTP offset</td>
      </tr>
      <tr>
          <td>Dark Fiber Regional Network Infra</td>
          <td>one-way latency, RTT, availability, BER, pre-FEC BER, post-FEC BER</td>
          <td>OSNR/ESNR, Q-factor, CD (chromatic dispersion), PMD (polarization mode dispersion), FEC degrade indicators</td>
      </tr>
      <tr>
          <td>Quantitative Research + Machine Learning</td>
          <td>backtest wall-clock runtime, feed latency, order latency, feature-serving latency, feature-ingestion throughput</td>
          <td>training-serving skew, feature inflight vs write-to-store success metrics, feature health/correctness monitoring</td>
      </tr>
      <tr>
          <td>Data Analytics + Multivariate Analysis</td>
          <td>job duration, stage/task duration, throughput, end-to-end delay, records-consumed-rate, consumer lag, shuffle read/write</td>
          <td>spill bytes, skew via task-duration discrepancy or shuffle-read imbalance, straggler share, input-pipeline prefetch effectiveness</td>
      </tr>
  </tbody>
</table>
<h2 id="sla--slo-reliability-telemetry-alerting">SLA + SLO Reliability, Telemetry, Alerting</h2>
<ul>
<li>Pre-Defined latency/error/throughput SLIs and error budgets require burn-rate alerting</li>
<li>Prometheus and Alertmanager define scrape and notification timing controls</li>
<li>OpenTelemetry defines histograms and exemplars</li>
<li>Apdex is a standard user-satisfaction score</li>
<li>Elastic APM measures application performance traces</li>
</ul>
<table>
  <thead>
      <tr>
          <th>Sector</th>
          <th>Common metrics</th>
          <th>Less-known / specialist metrics</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>SLA + SLO Monitoring, Telemetry, Alerting Infra</td>
          <td>availability SLI, latency SLI, error rate, throughput, Apdex, error-budget burn rate</td>
          <td>multi-window multi-burn-rate alerts, scrape_duration / scrape_timeout ratio, group_wait / group_interval / repeat_interval, histogram bucket design, exemplars</td>
      </tr>
  </tbody>
</table>
<h2 id="shared-analytics-of-interest">Shared Analytics of Interest</h2>
<table>
  <thead>
      <tr>
          <th>Metric</th>
          <th>Signal</th>
          <th>Typical domains</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Queue time</td>
          <td>Separates saturation from raw compute/network slowness</td>
          <td>LLM serving, API gateways, load balancers, HFT</td>
      </tr>
      <tr>
          <td>Prefill vs decode split</td>
          <td>Distinguishes prompt-processing bottlenecks from token-generation bottlenecks</td>
          <td>LLM GPU serving</td>
      </tr>
      <tr>
          <td>Prefix/KV cache hit rate</td>
          <td>Direct proxy for avoidable recompute and TTFT improvement</td>
          <td>LLM serving, agentic systems</td>
      </tr>
      <tr>
          <td>Auxiliary MoE loss and router z-loss</td>
          <td>Early warning for expert imbalance and routing instability</td>
          <td>MoE training</td>
      </tr>
      <tr>
          <td>CPU ready / co-stop / NUMA miss</td>
          <td>Often the real cause of inconsistent latency in virtualized clusters</td>
          <td>VM-based HFT / HPC</td>
      </tr>
      <tr>
          <td>Microburst depth and ECN/PFC behavior</td>
          <td>Reveals congestion that average bandwidth hides</td>
          <td>Low-latency Ethernet / RoCE fabrics</td>
      </tr>
      <tr>
          <td>OSNR / CD / PMD / pre-FEC BER</td>
          <td>Core optical-health indicators long before full link failure</td>
          <td>Dark fiber / coherent optics</td>
      </tr>
      <tr>
          <td>Spill bytes and consumer lag</td>
          <td>Early warning for data-path backpressure and skew</td>
          <td>Big-data pipelines</td>
      </tr>
      <tr>
          <td>Burn rate and exemplars</td>
          <td>Better operational signal than raw alert count or average latency</td>
          <td>SLO / observability stacks</td>
      </tr>
  </tbody>
</table>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>Let&#39;s Build a Lab - Part 2</title>
      <link>https://winterschon.gitlab.io/en/posts/lets-build-a-lab-part-2/</link>
      <pubDate>Thu, 11 Jun 2026 03:26:36 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/lets-build-a-lab-part-2/</guid>
      <description><![CDATA[<p>So many words. Even today with my own writing I want a TL;DR, so fuck it here&rsquo;s a not-boilerplate version of one standardized <em><strong>&ldquo;Statement of Work&rdquo;</strong></em> contracts that is oriented on building labs. Timeline are negotiable, scope is negotiable, hourly rate is not often negotiable - I learned that lesson a long time ago.</p>
<p>For those not familiar, the <strong>SoW</strong> is a consulting agreement between contractor and employer, which defines the scope and timeline and requirements etc to <em>&ldquo;do the needful&rdquo;</em> in a broader sense of everyone&rsquo;s favorite phrase from the &lsquo;ol &ldquo;<a href="https://en.wikipedia.org/wiki/Follow-the-sun#History">Follow the Sun</a>&rdquo; SLA support model from the early pre-Cloud era <em>(sorry cloudbabies it&rsquo;s from when you were single digits old or not yet born)</em>.</p>
<p>This specific SoW has been used in prior endeavors which eventually follow the typical enterprise hardware lifecycle in no specific order [1]: forklifts, retros, rebuilds, expansion, and&hellip; words.. so many words.</p>
<p>Labs last a long time, so it&rsquo;s important to build things correctly the first time - not waste time hacking together whatever compromised decision trees were necessary due to last-minute planning (or no planning at all) and little to no experience with building labs. Remember, if you are a specialized engineer who excels in one or two areas, that does not imply domain specific knowledge from adjacent or entirely different sides of engineering worlds. I&rsquo;m a systems architect .. I don&rsquo;t build jet engines (though it&rsquo;s probably fun), so I do what I&rsquo;m good at. Otherwise to say, &ldquo;stay in your lane or learn to love losing - but protect that ego at all costs and never admit fault ever!&rdquo; <em>(yes, I&rsquo;m bitter and for exceptionally valid reasons).</em></p>
<p>So, until the pre-IPO runway runs out, or the post-IPO environment bores people to tears and they jump ship with their ISOs and RSUs and START ALL OVER AGAIN! <em>(I have definitely never not done this exact thing several times never for sure for sure? sure.)</em></p>
<hr>
<h2 id="successful-labs-require-people-and-hardware">Successful Labs Require People and Hardware</h2>
<p>Vaporware labs don&rsquo;t have hardware. Real labs do not revolve around PPTX slide decks, or Slack Canvas, or Sharepoint whatever, or ephemeral Confluence pages that change ownership by a click of a button. Real labs have real hardware and real engineers and architects involved at every critical stage to ensure that <a href="https://www.dcs.warwick.ac.uk/~sdh/pmbs10/pmbs10/Workshop_Programme_files/sst.pdf">standards are being used, implemented, tested, and validated</a>.</p>
<p>If you think I&rsquo;m wrong, go ahead, do it all by slide deck, by half-baked simulators that don&rsquo;t even <a href="https://www.osti.gov/servlets/purl/1170619.pdf">use SST and parallelization correctly</a>, with lots of Big Discussions for the Big People you want to impress to get ahead instead of making quality hardware.</p>
<p>See how far the Peter Principle gets you - chances are, if you&rsquo;re surrounded by &ldquo;Yes Men&rdquo; and &ldquo;C-Suite but never Technical&rdquo; boardrooms, you will get far enough to be proven the fraud that you are.</p>
<blockquote>
<p>The <a href="https://en.wikipedia.org/wiki/Peter_principle"><strong>Peter principle</strong></a> is a concept in management .. which observes that people in a hierarchy tend to rise to &ldquo;a level of respective incompetence&rdquo;: employees are promoted based on their success in previous jobs until they reach a level at which they are no longer competent, as skills in one job do not necessarily translate to another.</p>
</blockquote>
<p>Having risen rapidly, since you&rsquo;re up high now - you can destroy entire companies by making extremely stupid choices <em>&ldquo;to save money&rdquo;</em> by not spec&rsquo;ing hot-swap trays for NVMe drives on 1U systems which were never designed for the wattage you&rsquo;re running - and were not spec&rsquo;d for the BTU and LFM required to keep the systems from burning out 100G optics..</p>
<p>Just when you think it&rsquo;s all good, um why are there only seven drives in this chassis that can run with eight?</p>
<ul>
<li>Oh it&rsquo;s because the 8th drive would draw too much power and overload the non-redundant PSUs. What happens when a system which should have N+1 has only N?</li>
<li>The PSUs could be in redundant mode but Billy didn&rsquo;t want to authorize the enablement of active/active mode, and instead has demanded that his lacky make the systems run the PSUs in <em>&ldquo;combined mode&rdquo;</em> to try to get more power to that 8th drive&hellip; but no&hellip; not possible.</li>
<li>So all of the fancy new systems can&rsquo;t have eight drives like the original spec REQUIRED in order to fulfill global fleet machine generation scaling models. As in, you lose 1/8th of your drives on every new system for so many thousands of systems. 1/8th, for those not inclined to fractional conversions, is</li>
<li>So now all of those systems will be missing ~2-16-64TB of NVMe drives (multiply by number of nodes per rack, per pod, per cage, per site, per region, per global fleet). That&rsquo;s a lot of expected high-speed storage that is now not being deployed.</li>
<li>Hopefully no contracts were made to customers based on <em>&ldquo;Total NVMe Raw Storage per &lt;unit/region/etc&gt;&rdquo;</em> variables, which now renders the deliverable impossible.</li>
<li>What can be done? Those contracts have to either be revised and compensated <em>(yeah good f&rsquo;in luck),</em> or a massive workaround must be implemented to compensate - at additional cost to the company.</li>
</ul>
<h3 id="why-does-that-matter-to-building-labs">Why does that matter to building labs?</h3>
<p>Because any lab worth their salt would have raised immediate red flags and halted the entire ill-devised scope. Then they would use standardized and periodically revised for betterment:</p>
<ul>
<li>provide technical backing evidence</li>
<li>scaling costs, IOP/s cost, power assessments, baseline to STDDEV ratio, then appropriation wear-cycle equations</li>
<li>All that industry jargon that managerializes into the ether for all to repeat.</li>
<li><em>&ldquo;keep me honest&rdquo;</em> you may say, so then.. are you often lying? Ill-informed, unprepared, completely clueless?</li>
<li>Maybe not, hopefully not, but analytical people will see you that way and eventually the Peter Principle catches up and BAM! You&rsquo;re hit by a <!-- raw HTML omitted --> and your entire team is fired, and so you move on with your RSUs, talk yourself up, and try to ruin those who smote you from afar.</li>
</ul>
<p>Congrats, Billy, you&rsquo;ll never change - <strong>and that is why we test in labs</strong> - <strong>because things change</strong>.</p>
<hr>
<h2 id="the-contract-statement-of-work">The Contract Statement of Work</h2>
<p>Always get the scope in writing with sign-off. Scope changes mid-stream, not awesome.</p>
<pre tabindex="0"><code>﻿Statement of Work

Consultant Services Engagement

This Statement of Work (&#34;SOW&#34;) is entered into between [Client Legal
Name] (&#34;Client&#34;) and [Consultant Legal Name] (&#34;Consultant&#34;), effective
as of [Effective Date], and is governed by the [Master Consulting
Agreement / Professional Services Agreement] dated [Agreement Date] (the
&#34;Agreement&#34;). In the event of any conflict between this SOW and the
Agreement, the Agreement will control.

  -----------------------------------------------------------------------
  Client                              [Client Legal Name]
  ----------------------------------- -----------------------------------
  Consultant                          [Consultant Legal Name]

  SOW Effective Date                  [Effective Date]

  Initial Term                        Six (6) months from the SOW
                                      Effective Date

  Target Level of Effort              Forty (40) hours per week,
                                      approximately 1,040 hours over the
                                      initial term

  Primary Stakeholders                VP, OCTO, Eng-Org, App-Team, and
                                      Sales-Org

  Commercial Terms                    Billing rate, invoicing, payment
                                      terms, and approved expenses as set
                                      forth in the Agreement and/or
                                      applicable order form
  -----------------------------------------------------------------------

1. Purpose and Objectives

The Consultant will provide technical leadership, architecture,
implementation, documentation, mentoring, and subject matter expertise
to establish standardized HPC benchmarking, workload automation, and
telemetry/analytics capabilities, while also improving cross-functional
execution and the overall developer experience for CORP products and
associated collateral.

- Define, document, and deploy a modular &#34;Industry Expectations
  Benchmark Suite&#34; leveraging HPC, SPEC, Top500, AI/ML GPU leaderboards,
  and SNIA methodologies to support rigorous adherence and consistent
  results using standard performance testing tools.

- Define and deploy a standardized HPC &#34;Workload Automation Pipeline&#34;
  utilizing SLURM, Jenkins, Celery, RabbitMQ (&#34;RMQ&#34;), ClickHouse,
  Ansible, and related tooling.

- Define and deploy a standardized HPC &#34;Telemetry + Analytics
  Aggregation + Data Visualization Processing Pipeline&#34; utilizing
  Check_MK, SNMP, Elasticsearch + Kibana, Prometheus, InfluxDB, Grafana,
  and related tooling.

- Assess current organizational working patterns across Eng-Org,
  App-Team, and Sales-Org and provide a quarterly review to the VP and
  OCTO.

- Assess the current CORP collateral surface area, including SDKs,
  documentation, libraries, proofs of concept, and reference designs, as
  an ongoing initiative to improve the developer experience.

- Author white papers, research documents, and related technical
  materials, with a feedback loop to validate and improve internal and
  external documentation.

- Provide mentoring for junior through senior application and systems
  engineers, plus reasonable availability as an SME across storage,
  systems, database, and AI/ML domains.

- Provide ad hoc consultation to support Sales-Org customer scoping,
  implementation, and integration needs.

2. Term and Working Model

The engagement will begin on the SOW Effective Date and continue for an
initial six (6) month term. The Consultant will generally allocate forty
(40) hours per week to the engagement, subject to mutually agreed
priorities, holiday schedules, and reasonable scheduling adjustments.

The parties acknowledge that some workstreams in this SOW are ongoing or
iterative in nature. Accordingly, the Client and Consultant will jointly
prioritize and sequence the work so that the highest-value deliverables
are completed within the available time and level of effort.

Services may be provided remotely or through other mutually agreed
working arrangements. Any onsite work, travel, or work materially
outside the target level of effort will require prior written approval.

3. Scope of Services

3.1 Modular &#34;Industry Expectations Benchmark Suite&#34;

The Consultant will define, document, and deploy a modular benchmark
suite intended to measure representative performance, reproducibility,
and adherence to industry-standard methodologies across compute,
storage, and AI/ML use cases.

Illustrative deliverables:

- Benchmark taxonomy and workload catalog covering applicable HPC, SPEC,
  Top500-style, AI/ML GPU leaderboard-relevant, and SNIA-aligned
  methodologies.

- Benchmark execution standards, parameterization guidance, and runbooks
  designed to improve repeatability and result consistency.

- Result templates and reporting conventions for capturing baseline
  measurements and comparative findings.

- Initial implementation and/or deployment in designated Client
  environment(s), subject to infrastructure readiness and access.

- Validation summary describing observed results, known limitations, and
  next-step recommendations.

3.2 Standardized HPC &#34;Workload Automation Pipeline&#34;

The Consultant will define and deploy a standardized HPC workload
automation architecture using SLURM, Jenkins, Celery, RMQ/RabbitMQ,
ClickHouse, Ansible, and related tools as appropriate to the Client
environment.

Illustrative deliverables:

- Reference architecture and component interaction design for job
  submission, orchestration, execution, retry handling, and result
  capture.

- Deployment-ready configurations, automation artifacts, or initial
  implementation in designated environment(s).

- Operational workflows for benchmark or workload scheduling, execution,
  data collection, and reporting.

- Runbooks and handoff documentation sufficient to support repeatable
  operation and internal adoption.

3.3 Standardized HPC &#34;Telemetry + Analytics Aggregation + Data
Visualization Processing Pipeline&#34;

The Consultant will define and deploy a standardized observability and
analytics processing pipeline spanning infrastructure telemetry,
log/event aggregation, time-series monitoring, analytics storage, and
visualization.

Illustrative deliverables:

- Reference architecture covering Check_MK, SNMP, Elasticsearch +
  Kibana, Prometheus, InfluxDB, Grafana, and related integrations as
  applicable.

- Recommended data model, retention approach, dashboard structure, and
  operating practices for standardized reporting and analysis.

- Initial dashboards, visualizations, and/or deployment artifacts for
  designated environment(s).

- Documentation for data sources, ingestion paths, dashboards, and
  operational ownership considerations.

3.4 Cross-Functional Collaboration Assessment

The Consultant will assess current organizational working patterns
across Eng-Org, App-Team, and Sales-Org in order to identify friction
points, handoff gaps, role ambiguity, communication issues, and
opportunities to improve execution.

Illustrative deliverables:

- Current-state assessment and concise findings memo.

- Recommendations for cadence, decision ownership, communication flow,
  and escalation patterns.

- Quarterly review readout(s) presented to the VP and OCTO during the
  engagement term.

3.5 CORP Collateral Surface Area and Developer Experience

The Consultant will assess the current ‘surface area’ of CORP collateral,
including SDKs, documentation, libraries, proofs of concept, and
reference designs, as an iterative stretch initiative with the overall
goal of improving the developer experience.

Illustrative deliverables:

- Inventory and gap analysis of current CORP technical collateral.

- Prioritized recommendations and/or backlog themes to improve
  consistency, usability, completeness, and customer/integrator
  experience.

- Feedback loop for validating and improving internal and external
  documentation and supporting artifacts.

- Periodic progress updates and next-step roadmap recommendations within
  the engagement window.

3.6 White Papers, Research Documents, and Documentation Improvement

The Consultant will author white papers, research documents, technical
notes, and similar written materials as prioritized by the Client, and
will help create a feedback loop to validate and improve internal and
external documentation quality.

Illustrative deliverables:

- White papers, technical briefs, research documents, architecture
  notes, or similar written outputs as mutually prioritized.

- Document review comments, revision recommendations, and technical
  fact-checking input.

- Structured feedback loop to capture lessons learned and improve future
  documentation quality.

3.7 Mentoring and Knowledge Transfer

The Consultant will provide mentoring support for junior through senior
application and systems engineers, with an emphasis on practical
technical development and hands-on knowledge transfer.

Illustrative deliverables:

- Office hours, design reviews, pair-working sessions, workshops, or
  other mentoring interactions as appropriate.

- Guidance on benchmarking, automation, observability, storage, systems,
  database, and AI/ML topics relevant to the engagement.

- Knowledge transfer materials or summary notes where appropriate to
  support broader team adoption.

3.8 SME Availability and Sales-Org Consultation

The Consultant will maintain reasonable availability to organizational
staff in applicable subject-matter areas of focus and will provide ad
hoc consultation for Sales-Org customer scoping, implementation, and
integration needs, as capacity permits within the contracted level of
effort.

Illustrative deliverables:

- Advisory support for storage, systems, database, and AI/ML questions
  arising during the engagement.

- Participation in internal and customer-facing scoping discussions,
  solution reviews, or implementation planning sessions, when requested
  by the Client.

- Technical input intended to improve solution fit, implementation
  readiness, and integration clarity; provided as advisory support
  rather than as a standalone managed service or customer support
  commitment.

4. Indicative Delivery Plan

The following plan is illustrative and may be reprioritized by mutual
agreement based on Client needs, environment readiness, and emerging
business priorities.

  -----------------------------------------------------------------------
          Period          Primary Focus           Illustrative Outputs
  ----------------------- ----------------------- -----------------------
          Month 1         Discovery and Baseline  Stakeholder alignment,
                                                  current-state review,
                                                  environment access,
                                                  priority mapping,
                                                  benchmark/workload
                                                  definition, and
                                                  architecture framing.

        Months 2-3        Design and Initial      Benchmark suite v1,
                          Deployment              automation pipeline
                                                  design and initial
                                                  deployment artifacts,
                                                  telemetry pipeline
                                                  design, and initial
                                                  dashboards or data
                                                  paths.

        Months 4-5        Validation and          Validation runs,
                          Expansion               documentation
                                                  expansion,
                                                  collaboration
                                                  assessment findings,
                                                  collateral review,
                                                  white papers/research
                                                  outputs, and mentoring
                                                  support.

          Month 6         Handoff and Executive   Runbooks,
                          Review                  recommendations,
                                                  backlog or roadmap
                                                  items, knowledge
                                                  transfer, and
                                                  quarterly/executive
                                                  review presentation(s)
                                                  to the VP and OCTO.
  -----------------------------------------------------------------------

5. Governance and Reporting

- The Client will designate a primary engagement owner or point of
  contact responsible for prioritization, coordination, and consolidated
  feedback.

- The parties will maintain a regular working cadence, which may include
  weekly or biweekly syncs, technical reviews, design reviews, and
  status reporting as appropriate.

- The Consultant will provide concise updates on progress, risks,
  blockers, and recommended next actions.

- A quarterly review readout will be provided to the VP and OCTO during
  the engagement term.

6. Assumptions, Dependencies, and Constraints

- The Client will provide timely access to relevant systems,
  environments, credentials, documentation, repositories, data, and
  subject-matter stakeholders reasonably required for the services.

- The Client is responsible for providing or approving the hardware,
  software, licenses, network access, security approvals, and
  change-management windows required to implement or deploy
  deliverables.

- Any production deployment, change control, or release activity remains
  subject to Client approval processes and operational safeguards.

- Where this SOW references industry-standard benchmarks or
  leaderboard-adjacent methodologies, any formal external publication or
  third-party submission will remain subject to separate Client approval
  and third-party rules.

- The Consultant’s work product may include recommendations, reference
  architectures, configurations, code or scripts, runbooks, dashboards,
  presentations, reports, and live working sessions; not every
  workstream will result in a standalone written deliverable.

- Because certain activities are advisory and ongoing in nature, the
  parties will periodically rebalance priorities to remain within the
  contracted time and level of effort.

- Travel, onsite presence, after-hours support, and work materially
  beyond the initial term or weekly level of effort are excluded unless
  separately approved in writing.

7. Out of Scope

- Managed services, long-term production operations ownership, or 24x7
  operational support.

- Hardware procurement, datacenter installation, or unrelated
  infrastructure build-out not directly tied to the services described
  in this SOW.

- Binding commitments to end customers, contractual promises to third
  parties, or customer project delivery obligations not expressly
  authorized by the Client.

- Ongoing maintenance, enhancement, or support of deliverables after the
  end of the engagement term, except as separately agreed in writing.

8. Acceptance and Change Control

Commercial terms, invoicing, payment terms, intellectual property,
confidentiality, warranties, limitation of liability, and any formal
acceptance procedures will be governed by the Agreement.

Where the Agreement does not specify a separate acceptance procedure,
the Client will review deliverables promptly and provide consolidated
feedback within five (5) business days after delivery. Deliverables will
be deemed accepted when they materially conform to the scope described
in this SOW, subject to any documented punch-list items or agreed
revisions.

Any material change to scope, deliverables, timeline, or level of effort
will require written approval by both parties.

9. Signatures

The parties acknowledge and agree to this SOW as of the dates written
below.

By: ________________________________ 
Name: ______________________________ 


[Consultant Legal Name]
Title: _______________________________
Date: _______________________________
By: ________________________________ 

[Client Legal Name]
Name: ______________________________
Title: _______________________________
Date: _______________________________
</code></pre>]]></description>
      
    </item>
    
    
    
    <item>
      <title>Infra Monorepo Migration</title>
      <link>https://winterschon.gitlab.io/en/posts/infra-monorepo-migration/</link>
      <pubDate>Sun, 31 May 2026 04:22:04 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/infra-monorepo-migration/</guid>
      <description><![CDATA[<p>One weekend of fun follows many former, and also weekdays, and other weekends. It&rsquo;s nice to have a small team manage a lot of resources using a single pane of glass via tmux, rs232, ipmi, Ansible and BigNetwork.</p>
<blockquote>
<p>More details later&hellip; sleepy.</p>
</blockquote>
<hr>
<pre tabindex="0"><code> # NeoCortex Standards, Repo Storage, ZFS Dataset, M70 QAT Fast-Track Plan

  ## Summary

  Implement a non-destructive NeoCortex follow-up that locks
  these policies into code, tests, and docs:

  - Repos live under /opt/repos/&lt;repo&gt;; worktrees live under
    /opt/repos/worktrees/&lt;repo&gt;/&lt;branch&gt;.
  - /root is not a repo/worktree destination; /root/OMGFUCKED is
    temporary quarantine only.
  - New repos must be created from
    yukon-systems/YukonSYS-Standard-Definitions.
  - Every repo must use Git LFS and the standards repo
    .gitattributes byte-for-byte.
  - ZFS dataset creation for /opt/repos becomes reusable
    Ansible/policy logic, based on
    /root/bin/ZFS-M70-Forge_zroot-dataset_opt-repos.sh.
  - M70 QAT rollout uses canary first: build OpenSSL+QAT and
    OpenZFS/QAT binpkgs, validate on M70 canary, then promote.

  ## Key Changes

  - Standards and repo-placement policy
      - Update NeoCortex root policy docs and tests to forbid
        new repo/worktree paths under /root, except documented
        temporary quarantine paths under /root/OMGFUCKED.
      - Update tools/import-source-repos.py defaults from
        /root/&lt;repo&gt; to /opt/repos/&lt;repo&gt;, with
        /root/OMGFUCKED/&lt;repo&gt; accepted only as an explicit
        transitional override.
      - Add a repo-location audit script/test that fails active
        operational docs/scripts using /root/&lt;repo&gt; or
        /root/.config/superpowers/worktrees as live paths.
  - Git LFS and .gitattributes
      - Replace NeoCortex root .gitattributes with the standards
        repo version byte-for-byte.
      - Add a validation script that checks:
          - git lfs version works,
          - filter.lfs.required=true,
          - origin LFS locksverify=true,
          - root .gitattributes hash equals standards source,
          - LFS pre-push hook exists.
      - Document that non-compliant repos must be retrofitted
        before migration/import.
  - ZFS dataset automation
      - Convert
        /root/bin/ZFS-M70-Forge_zroot-dataset_opt-repos.sh into
        reusable NeoCortex Ansible/defaults for managed
        datasets.
      - First managed dataset profile: zroot/opt/repos mounted
        at /opt/repos with the script’s options, including
        compression=zstd-fast-1, dedup=sha256,verify,
        recordsize=256K, xattr=sa, POSIX ACLs, atime=off, and
        reservation=32M.
      - Add a second reusable pattern for per-user home
        datasets, but do not block on the NAS/NFS 777
        investigation; include a permission preflight that
        creates a test directory with umask 0027 and fails if
        mode becomes 0777.
  - M70 QAT binpkg fast-track
      - Extend the existing M70 canary stage4/binpkg lane to
        build a QAT package set:
          - QAT firmware/kernel module readiness package policy,
          - OpenSSL QAT engine/provider package path,
          - OpenZFS package built with QAT support,
          - rollback stock OpenSSL/OpenZFS binpkgs.
      - Add package/use/profile fragments under the existing
        Gentoo stage4 profile area instead of ad hoc host edits.
      - Add canary validation:
          - lspci -nnk sees QAT device,
          - qat_c3xxx and intel_qat load,
          - OpenZFS module parameters expose QAT controls,
          - openssl speed before/after artifacts are captured,
          - root pool imports and mounts after reboot,
          - rollback binpkg path is tested before wider
            promotion.
      - Do not promote to all M70 nodes until canary evidence is
        committed.

  ## Test Plan

  - Local static checks:
      - tests/shell/run-tests.sh
      - new repo-location standards test
      - new Git LFS standards test
      - new ZFS dataset defaults test
      - new M70 QAT package-policy test
      - YAML parse for all workflows/playbooks
      - git diff --check
  - Runtime/dry-run checks:
      - Ansible syntax-check for dataset roles/playbooks.
      - Dry-run dataset plan for /opt/repos confirms current
        zroot/opt/repos matches expected options.
      - M70 canary dry-run emits QAT binpkg build plan without
        mutating packages.
  - Canary acceptance:
      - QAT binpkgs build successfully.
      - M70 canary reboots with root pool intact.
      - QAT modules and OpenZFS QAT controls are present.
      - Benchmark and rollback evidence are recorded under
        NeoCortex audit docs.


  ## Assumptions

  - Canonical repo clone layout is /opt/repos/&lt;repo&gt;.
  - Worktree layout is /opt/repos/worktrees/&lt;repo&gt;/&lt;branch&gt;.
  - /root/OMGFUCKED remains temporary quarantine, not an
    approved steady-state repo location.
  - QAT rollout gate is canary first, not all-M70 immediate.
  - OpenZFS QAT implementation details must be verified against
    current OpenZFS/Gentoo package behavior during
    implementation; source basis includes OpenZFS QAT docs and
    module-parameter docs:
      - https://openzfs.org/wiki/ZFS_Hardware_Acceleration_with_QAT
      - https://openzfs.github.io/openzfs-docs/Performance%20and%20Tuning/Module%20Parameters.html

─ Worked for 22m 41s
───────────────────────────────────────────────────────────
  Implement this plan?
  1. Yes, implement this plan          Switch to Default and
  start coding.
  2. Yes, clear context and implement  Fresh thread. Context:
  53% used.
› 3. No, stay in Plan mode             Continue planning with
the model.



-----------------------
  ## Assumptions

  - Canonical repo clone layout is /opt/repos/&lt;repo&gt;.
  - Worktree layout is /opt/repos/worktrees/&lt;repo&gt;/&lt;branch&gt;.
  - /root/OMGFUCKED remains temporary quarantine, not an
    approved steady-state repo location.
  - QAT rollout gate is canary first, not all-M70 immediate.
  - OpenZFS QAT implementation details must be verified against
    current OpenZFS/Gentoo package behavior during
    implementation; source basis includes OpenZFS
    QAT docs and module-parameter docs:
      - https://openzfs.org/wiki/ZFS_Hardware_Acceleration_with_QAT
      - https://openzfs.github.io/openzfs-docs/Performance%20and%20Tuning/Module%20Parameters.html

─ Worked for 22m 41s
───────────────────────────────────────────────────────────

› 1) We also need to include the control plane fixes and
validations so that mutli-workers comms are fixed. 2) We need to
leverage the SLURM cluster nodes and
  additional distcc build hosts, 3) X12again &amp; FMT2 are
  effectively idle and can be blasted into submission to fast
  track all of these changes. 4) Once the
  M70-canary passes, we need to roll it out to K10 (tear-it-down
  AAA) and validate that type of OS netbooting. 5) Add those
  aspects to the Plans and we&#39;re
  looking better. 6) Finally, wrap up ALL changes necessary to
  complete the NeoCortex monorepo migration.

───────────────────────────────────────────────────────────

• I’ll revise the plan around the expanded end-state, but first
I’m doing a read-only pass over NeoCortex’s control-plane,
SLURM/distcc, X12/FMT2/K10, and
  migration-status artifacts so the replacement plan is grounded
  instead of generic.

───────────────────────────────────────────────────────────

• Proposed Plan

  # NeoCortex Standards-Complete Monorepo Migration Plan

  ## Summary

  - Make /opt/repos/&lt;repo&gt; the only canonical repo location; no 
  new checkouts or random repo files under any home directory, 
  including /root.
  - Finish standards adoption: all new repos must originate from 
  YukonSYS-Standard-Definitions; NeoCortex gets retrofitted 
  instead of restarted unless
    retrofit verification fails.
  - Complete NeoCortex monorepo migration with standards baseline, 
  Git LFS policy, control-plane comms fixes, ZFS dataset policy, 
  SLURM/distcc acceleration, M70 QAT canary, FMT2/X12again build 
  capacity, and K10 netboot AAA rollout validation.

  ## Key Changes

  - Repository standards
      - Merge standards policy PR work, then make NeoCortex 
      root .gitattributes byte-for-byte identical to the standards 
      repo version.
      - Update active NeoCortex import/migration tooling to default 
      source paths to /opt/repos/&lt;repo&gt;.
      - Preserve historical /root/... references only in immutable 
      audit/provenance docs; active scripts, runbooks, tests, and 
      templates must not depend on
        home-directory repos.
      - Use worktrees under /opt/repos/worktrees/&lt;repo&gt;/&lt;branch&gt;.
  - NeoCortex monorepo completion
      - Finish all migration blockers already tracked in 
      NeoCortex: M70 stage4/QCOW validation, Kata/container 
      runtime, FMT2 ephemeral VM lane, Gentoo/OpenRC
        replacement for temporary Rocky bootstrap, Thor replacement 
        path, and optional history graft/freeze decision.
      - Treat NeoCortex as authoritative after completion: source 
      repos become frozen compatibility references or are 
      history-grafted into NeoCortex with
        documented provenance.
      - Add/repair migration validation so PR completion proves 
      standards baseline, Git LFS, repo location policy, shell 
      tests, YAML parsing, and migration
        manifests.
  - Control-plane and multi-worker comms
      - Bring all control-plane fixes into NeoCortex and validate 
      Forge/FCP worker communication end to end.
      - Add tests for FCP envelope validation, replay/nonce handling, 
      approval ceilings, routing scope, transport policy, ntfy bridge 
      behavior, and multi-worker request/response flows.
      - Replace temporary Rocky bootstrap control-plane host with the 
      compliant Gentoo/OpenRC image once that image passes validation.
  - ZFS, NFS, and storage policy
      - Use the provided /opt/repos ZFS dataset options as the canonical 
      dataset profile for repo storage.
      - Add reusable dataset/playbook logic for repo datasets and 
      per-user home datasets.
      - Add NFS/floating-home validation that detects the NAS NFSv4.2 
      0777 directory-mode bug under expected 0027 umask and blocks 
      insecure rollout.
  - Build acceleration and hardware rollout
      - Use SLURM plus distcc for M70 stage4/QAT/OpenZFS builds.
      - Treat X12again and FMT2 as available fast-track build/validation 
      capacity.
      - Build binpkg path for OpenSSL + QAT + OpenZFS on M70 canary first; 
      non-QAT nodes may consume the same binpkgs with QAT unused.
      - After M70 canary passes, roll the validated path to K10 and 
      run destructive AAA/netboot validation with rollback evidence 
      captured.

  ## Test Plan

  - Run NeoCortex shell/YAML validation, including migration, 
  standards-baseline, Git LFS, .gitattributes, and no-active-home-repo-path 
  checks.
  - Run control-plane/FCP tests for envelope schema, replay rejection, 
  worker routing, ntfy bridge, and multi-worker comms.
  - Run Ansible/playbook syntax checks for ZFS datasets, NFS home policy, 
  SLURM/distcc build orchestration, M70 canary, FMT2/X12again lanes, and 
  K10 netboot
    AAA.
  - Execute staged hardware validation:
      1. SLURM/distcc dry-run.
      2. M70 canary build and QCOW/stage validation.
      3. FMT2/X12again accelerated build/ephemeral VM smoke.
      4. K10 netboot/AAA destructive validation after M70 success.

  ## Assumptions

  - Retrofit NeoCortex rather than restart the repo unless standards 
  validation exposes unrecoverable divergence.
  - Historical audit files may retain old /root/... paths as provenance; 
  active operational content may not.
  - M70 canary is the release gate for QAT/OpenZFS/binpkg rollout.
  - K10 destructive AAA/netboot validation is in scope only after M70 
  canary passes and rollback evidence is captured.

─ Worked for 2m 18s ───────────────────────────────────────────────────────────
</code></pre>]]></description>
      
    </item>
    
    
    
    <item>
      <title>Validating E2ET via LTR</title>
      <link>https://winterschon.gitlab.io/en/posts/validating-e2et-flows/</link>
      <pubDate>Thu, 28 May 2026 20:14:00 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/validating-e2et-flows/</guid>
      <description><![CDATA[<p>Lot of chatter on the interwebs lately about <em>&ldquo;state surveillance&rdquo;</em>, where <em>&ldquo;both sides&rdquo;</em> are relentlessly attempting to remove all <strong>E</strong>nd-to-<strong>E</strong>nd-<strong>E</strong>ncyption <em>(aka <strong>E2EE</strong>)</em>, but that is not what this post is about, and this post is not about politics.</p>
<p>Also a lot of talk about Github being compromised and having 3,000+ internal repos exfiltrated. Surely GitHub has 100% Code Coverage Testing and End-to-End Test (Work)Flows, right? No, they do not.</p>
<p>This post is focused on <strong>E2ET</strong> <em>(<strong>E</strong>nd-to-<strong>E</strong>nd-<strong>T</strong>esting)</em> of application service roles and machine provisioning automation. So, let&rsquo;s start by seeing just exactly WTF I&rsquo;m referring to with this type of testing in the first place.</p>
<hr>
<h2 id="ci-systems-as-a-failure-mode-example">CI Systems as a &ldquo;Failure Mode&rdquo; Example</h2>
<p>In the reporting system here we use a host type definition of <code>K10</code> which is mostly arbitrary, but the root story is an irrelevant tangent, used in this infrastructure as an example of a standdalone system which requires specific attention to failure state definitions, stateful analysis of gated operations, and is used for iterative looped-based resolution testing.</p>
<p>The <strong>K10</strong> host is assigned to a role which features CPU-native <code>cpuid2cpuflags</code> <a href="https://github.com/gentoo/cpuid2cpuflags/">architecture optimized compiler flags</a>. We never use generic kernels, or generic machines, because <a href="https://www.forbes.com/councils/forbestechcouncil/2023/03/27/cloud-versus-on-premises-advantages-and-disadvantages-of-both-models/">efficiency and optimization in the industry is basically a broken afterthought</a> and it gets old after a while - dealing with non-optimized non-attentitive systems engineering approaches featuring inefficient broken theories based the shrug-method, <em>&ldquo;just make it auto-scaling and put more kubes or something?&rdquo;</em></p>
<hr>
<h3 id="network-booting-the-baseline-os">Network Booting the Baseline OS</h3>
<p>The <strong>K10</strong> baseline system boots over the network using <code>iPXE/HTTPv4,</code> while other devices require <code>chainload PXE/TFTP -&gt; iPXE/HTTPv4</code> boot images. This facilitate a system of host-based discovery and domain authentication via <code>initrd</code> embedded kernel modules + connection parameters for <code>FreeIPA/SSSD for RBAC + AAA</code> using MAC and PKE enrollment. We also do this for FreeBSD hosts, with some minor differences.</p>
<p>The <strong>K10</strong> is also connected to local-rack PDUs with remote power cycling via either <code>ACPI signal</code> for <em>&ldquo;soft shutdown&rdquo;</em> or via its switched-outlet port. The PDUs are controlled by the Command-&amp;-Control Server using <code>SNMPv3 user + group authentication</code> via its infrastrcture management LAN connection with an auth-hook to <a href="https://freeipa.readthedocs.io/en/latest/api/radiusproxy_show.html">FreeIPA via RADIUS</a>.</p>
<h3 id="lets-see-some-reports">Let&rsquo;s See Some Reports!</h3>
<p>Having covered some blathering about provisioning systems, we can move on to agent-based querying for <code>SITREP</code> , which is executed on our in-house LLM structured query execution tooling. That whole chain of events required writing a new <em>&ldquo;Agentic Forge Control Plane&rdquo;</em>, which was enjoyable most of the time&hellip; and it has become a baseline distributed comms system for &ldquo;<a href="https://github.com/yukon-systems/StorOps__Project_Coherent_Storage">Project Coherent Storage</a>&rdquo; which is currently managing a bit over 1PB of data on OpenZFS.</p>
<p>Earlier this year I paused for some PTO and rewrote all of my formerly Ansible driven and automated <code>Infrastructure as Code</code> workflows to support an upcoming revision to our dual-continent presence at six datacenter locations. It&rsquo;s occasionally and very tentatively being referred to as <code>&quot;minimalist-maxxing&quot;</code> which is mostly pure nonsense where grammatical excellence is concerned, but ultimately accomplishes the following:</p>
<ul>
<li>Gentoo w/ Optimized Stage4, LLVM/Clang, OpenRC</li>
<li>Minimalist service containers using our Stage4 baseline, with service roles layered on top. Try it out:</li>
</ul>
<p>No, these were not Kubernetes, not Helm, not Cloudslop. Sometimes translates into <code>Infrastructure as a Service</code>, for enablement of <code>event-driven architecture</code> with a hybrid-local service enablement for LLM predictive action controls.</p>
<p>That&rsquo;s a lot of words to say, <em>&ldquo;I make the code do the things with the signals processing and patterns and stuff.&rdquo;</em> Wait wait.. no, this is not going to cover anything about <em>&ldquo;N~less Computing&rdquo;.</em></p>
<h2 id="stop-blathering-about-serverless-computing">Stop Blathering About <em>&ldquo;Serverless Computing&rdquo;</em></h2>
<p>This term&hellip; it is bull-sheet top to bottom front to back.</p>
<ul>
<li><strong>Serverless does not mean &ldquo;no servers.&rdquo;</strong> Cloud providers rely on physical infrastructure to run your code and your applications.</li>
<li><strong>The term is marketing shorthand, not architectural reality.</strong> Serverless means server management is abstracted away from developers, not eliminated, nor emancipated.</li>
<li><strong>It does not mean &ldquo;no infrastructure.&rdquo;</strong> Provisioning, patching, security, scaling, and runtime management are simply shifted to the provider, just like the &lsquo;ol days where users had websites on shared hosting systems (and they still do) without having to handle, manage, or maintain the infrastructure.</li>
<li><strong>It is not always cheaper.</strong> Serverless can be cost-effective for sporadic or bursty workloads, but long-running or compute-heavy jobs may cost more than VMs or dedicated servers.</li>
<li><strong>It is not a universal replacement.</strong> Serverless differs from IaaS and PaaS by emphasizing event-driven execution, automatic scaling, and scale-to-zero behavior when idle; lies, all marketing lies. Follow the money.</li>
</ul>
<p><img src="/content/images/2026/05/princess-bride-serverless-meme.960px-1.webp" alt=""></p>
<blockquote>
<p>[host K<strong>10</strong>]: currently has transient AAA validation, not E2ET PASS</p>
<ul>
<li>APC PDU AP7901 initiated hard-reboot proved the current netboot rootfs does not persist SSSD/IPA state.</li>
</ul>
<p>Under this definition, <strong>K10</strong> must rebuild rootfs or disk-install with aaa-domain-client, reboot, then pass the full post-boot E2ET suite before it can unblock <code>xen-sun99-x12spl-099108.rfc1918.host</code> reimage confidence.</p>
</blockquote>
<h3 id="standard-example-k10-automation-report">Standard Example &lsquo;K10 Automation Report&rsquo;</h3>
<pre tabindex="0"><code># E2ET Definition
End to End Testing / E2ET should mean: a reproducible host acceptance pipeline that proves a machine can move from inventory intent to installed, rebooted, validated, scored, documented, and release-eligible state.

For RFC99, a host is not E2ET-passed just because we fixed it live. It passes only after the fix is represented in source-of-truth and survives the full lifecycle.

## Policy Definition
For validation hosts like `K10`:

1. Fix live only to recover evidence or confirm root cause.
2. Backport the fix into repo-owned profile, role, manifest, package list, NetBox/DNS/IPAM metadata, and docs.
3. Reinstall or rebuild/reboot through the intended provisioning path.
4. Run post-boot validation.
5. Generate a conformance report.
6. Only then mark the host RC/GA-capable.

&gt; A one-off live fix can be marked transient validated, but never E2ET passed.

## E2ET Stages

### Host Pipeline

1. **Inventory Gate**: NetBox/IPAM/DNS/Ansible host metadata matches expected MACs, interfaces, service IPs, PDU mapping, console path, boot protocol.
2.** Provisioning Gate**: iPXE or PXE-chainload path works, installer runs, ZFSBootMenu/bootfs/rootfs pools validate, OS install completes.
3. **First Boot Gate**: kernel cmdline, serial console, hostname/FQDN, SSH, time sync, logging, package profile, OpenRC services.
4. **Platform Gate**: CPU model, RAM, disks, NVDIMM/Optane if present, sysfs, kernel modules, firmware, CVE mitigation status.
5. **Network Gate**: management interface, service interfaces, VLANs, routes, DNS forward/reverse, NetBox consistency, nmap readiness.
6. **Storage Gate**: ZFS pools, NFSv3/v4, NFS-RDMA, Ceph, iSER, iSCSI, sshfs as applicable.
7. **Identity Gate**: FreeIPA/SSSD/PAM/SSH keys, UID/GID consistency, sudo policy, offline cache, break-glass account.
8. **Service Gate**: required services running, no unexpected failed services, role-specific smoke/functional checks.
9. **Performance Gate**: CPU, memory, disk, network, build/distributed compile benchmarks against baseline.
10. **Conformance Report**: JSON + Markdown + optional JUnit output with hard-gate pass/fail and weighted score.

### Scoring Model
Use hard gates plus weighted scoring.

### Hard Fails
  - Cannot boot.
  - Cannot SSH via management path.
  - IPAM/DNS mismatch for primary identity.
  - Root pool invalid.
  - SSSD missing on an AAA-required profile.
  - Required service failed.

### Score Zones
  - p60: minimally usable, not release candidate.
  - p80: acceptable lab host.
  - p90: RC candidate.
  - p95: GA for normal infra.
  - p99: production-critical or rebuild-template quality.

## Policyinctions
While there is overlap with &#34;conformance tiers&#34;, this functionally is separate from &#34;statistical confidence&#34; until we have sufficient historical run-data to compute &#34;Real-Number Percentiles&#34; and data-driven pattern-based repeatably-provable &#34;Statistically Significant&#34; probability assessments.

### K10 Applied Meaning
The host definition for `K10` currently has transient AAA (not AAA DNS: `&#34;ACK &amp; AGREE &amp; APPROVE&#34;`) validation, not E2ET pass.

#### **Actioned Event**
Its connected PDU port *(SKU: APC AP7901)* reboot proved the current `netboot rootfs` does not persist `SSSD/IPA` state. 

#### **Action Rephase**
Host definition `K10` requires a rebuild of rootfs or disk-install with `aaa-domain-client`, another reboot, then pass the full `Post-Boot E2ET` test suite before it can unblock dependency-trees. 

Otherwise K10 risks being labeled a permanent `reimage-processing confidence blocker`, which leads to hardware decomission.

## K10 Dead-Reckoning
Previously we defined the `RFC99` &amp; `SUN99` workflow as `K10 Host E2ET Acceptance Pipeline v0.1`, for this we&#39;ll re-implement the process using block-notation in Ansible + Python with the new report tooling, and enable `cicd-rfc99-jenkins-099199` for orchestrating it once the checks are stable.
</code></pre>]]></description>
      
    </item>
    
    
    
    <item>
      <title>Why Do We Need Her Anyway?</title>
      <link>https://winterschon.gitlab.io/en/posts/why-do-we-need-her-anyway/</link>
      <pubDate>Sat, 16 May 2026 23:41:50 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/why-do-we-need-her-anyway/</guid>
      <description><![CDATA[<p>Indeed. <strong>Do it yourself and ignore all knowledge, all advice.</strong> Build every wheel as new. Design everything from ground zero, always. Exist only in <em>The Now.</em> Push everyone away who advises otherwise - at your own peril. <strong>You are</strong> <strong>The Only Expert</strong>.</p>
<blockquote>
<p><strong>Choose your failure mode and you will find it quickly.</strong></p>
</blockquote>
<h2 id="please-skip-the-philosophy">Please Skip the Philosophy</h2>
<p>A valid request. Perhaps you don&rsquo;t care about this verbosity of thought, or considerations therein, or maybe you&rsquo;re aware of the reprisals and follies and want to move on to the engineering discussion? If so, simply scroll down to the section titled, <em><strong>&ldquo;How Does This Relate to Memory&rdquo;</strong></em>. Note that in doing so you will miss a blurb from <a href="https://en.wikipedia.org/wiki/Office_Space">Office Space</a>.</p>
<hr>
<h2 id="endeavor-to-endure-the-philosophy">Endeavor to Endure the Philosophy</h2>
<p>A fair degree of the human experience involves a process by which those of &ldquo;early-phase cognition&rdquo; attempt to self-obfuscate their <em>&ldquo;desire for desire&rdquo;</em>, attempting to live a life of nebulous and fleeting happiness, non-blissfully and unaware that it is this desire to feel and experience desire itself which has cornered their experience into a lifetime of endless searching, yearning, wanting, never satiated, eventually growing old and stale and losing their imaginative or creative or physical edge.</p>
<blockquote>
<p>This cycle of The Great Chase is one basis of Sisiphean frustration; one which - until it is surpassed - which requires being acknowledged, accepted, and integrated into their forward movement</p>
</blockquote>
<p>Some understand that to exist with desire, that all-controlling force, seemingly inescapable force which presses down upon the rock, forever trapping your perspective into the wheel of the unknown yet forever traveled, repeating mistakes which others warned against, refusing awareness of one&rsquo;s own misfortunate mentality and guiding-line towards an inevitable failure; experiences from which all lessons are never to be learned.</p>
<p>Go ahead. <strong>Do it</strong>. Don&rsquo;t learn from others. <strong>Do everything yourself,</strong> do it with the veracity by which you have become convinced is correct - do everything as though this is the first time anyone has ever tried to achieve the new shiny thing. Surely, this must be the path towards truth, self-realization, self-actualization, self-assurance, and that desperation of desire for freedom from desire to desire everything&hellip; and then&hellip; surely success is ensured?</p>
<p>No, <em>that modality of mentality would achieve its opposite effect</em>, and it would be a waste of everyone&rsquo;s time; because despite the ego-driven main-character syndrome which has become so performatively boring in the past two decades of social media, <strong>it&rsquo;s not all about You, or Me, it&rsquo;s about Everyone</strong> alive and even those who we have loved who died.</p>
<h4 id="mr-gibbons">Mr. Gibbons</h4>
<p>Peter Gibbons:<br>
It&rsquo;s not just about me and my dream of doing nothing. It&rsquo;s about all of us&hellip; Michael, we don&rsquo;t have a lot of time on this earth!</p>
<p>We weren&rsquo;t meant to spend it this way. Human beings were not meant to sit in little cubicles staring at computer screens all day, filling out useless forms and listening to eight different bosses drone on about about mission statements.</p>
<p>Michael Bolton:<br>
I told those fudge-packers I liked Michael Bolton&rsquo;s music.</p>
<p>Peter Gibbons:<br>
Oh, That is not right, Michael.</p>
<p>Purposeless self-serving inefficiency which is predicated on assured failure wastes time that humanity does not have - <strong>we do not have time for oppositional defiance induced mediocrity</strong>. Stop the gamification.</p>
<h2 id="the-mindset-of-being-simply-wrong">The Mindset of Being Simply Wrong</h2>
<p>Instead of repeating the pattern described above, grow the fuck up and learn how to effectively learn from others, to learn from the past, to learn using a reinforcement framework of concept-action-processing. <em>&ldquo;Thems may be big words&rdquo;</em>, but this is not a complicated concept. One does not have to choose the path of stupidity; ignorance - we&rsquo;re all ignorant in all manner of ways and that&rsquo;s inescapable; however when one ignores the data, ignores the lesson, and chooses the path before them via oppositional defiance, that&rsquo;s called <em>&ldquo;being stupid&rdquo;</em>. It&rsquo;s stupid not to learn from others.</p>
<hr>
<h2 id="how-does-this-relate-to-memory">How Does This Relate to Memory</h2>
<p>Memory is everything. The conscious experience, the neural network running inside our brains, the execution of &ldquo;<a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC12025022/">The Default Mode Network</a>&rdquo;, requires effective memory - <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC4526749/">short term a well as consolidation to long-term memory</a>.</p>
<p>So, when the industry was informed of the untimely discontinuation of Intel&rsquo;s Optane NVDIMMs&hellip; we were all screwed. Until Q2 2026. Now it&rsquo;s Q2 and finally CXL non-volatile memory is available in sufficiently equivalent density, performance, and lifespan to exceed Optane&rsquo;s role, and it is available in PCIe Gen-4 and Gen-5 and soon&hellip; Gen-6.</p>
<h2 id="an-introduction-to-cxl">An Introduction to CXL</h2>
<ul>
<li>It&rsquo;s not HBM, it&rsquo;s not 3D-Xpoint, it&rsquo;s not SRAM, nor vRAM</li>
<li>CXL is packaged in PCIe, U.3, and EDSFF formats</li>
<li>CXL offers dense capacity, low-latency, and exceptional I/O</li>
<li>CXL is made for Ai/HPC/OLTP memory acceleration</li>
<li>CXL is the new hotness, it is the new standard, it is performance</li>
</ul>
<h2 id="hpc-cluster-storage-acceleration">HPC Cluster Storage Acceleration</h2>
<p>CXL is being built into (not next-gen, now-gen) storage appliances and network protocol accelerator systems used in High Performance Computing, Ai/ML which leverages HPC tech, and Supercomputers.</p>
<h2 id="cxl-in-telco-dsp-as-protocol-caches">CXL in Telco DSP as Protocol Caches</h2>
<p>CXL is perfectly suited for digital signals processing on a range of network protocols and their intra-chassis and inter-chassis RDMA driven networks. There&rsquo;s one person who I know that hates it when I bring up RDMA - truly an example of being willfully ignorant. Moving on&hellip;</p>
<h3 id="cxl-memory-in-telco-atac-chassis">CXL Memory in Telco ATAC Chassis</h3>
<ul>
<li>14 slots in 19-inch rack ≈→ ∆ {$N total trays per 42U ≈ μ19}</li>
<li>16 slots in 23-inch ETSI rack ≈→ ∆ {$N total trays per 42U ≈ μ23}</li>
<li>Chassis heights from 4U to 15U ≈↑ ∆ [[ μ4, μ19, μ23 ]]</li>
<li>Telco grade Power &amp; Cooling Efficiency &amp; Redundancy ++</li>
<li>Mil-DoD Compliant Physical &amp; Operational Security ++</li>
<li>Industrial NEBS Environmental Operating Ranges ++</li>
<li>Zero-Downtime Serviceability &amp; Upgrade/Maint ++</li>
<li>Intra+Inter-Chassis Redundancy (Modular Scale) ++</li>
<li>Geo-Deploy Designed for regional XOR continental mesh ++</li>
</ul>
<hr>
<h2 id="so-why-should-we-listen-to-her">So, Why Should We Listen to Her?</h2>
<p>Becausee I&rsquo;ve been building and iterating these types of storage architectures for nearly twenty years of my career. If you want to do it all from scratch or buy this type of storage performance for 10x the cost, go ahead; the market exists and you can be the big winner.</p>
<p>However, if you don&rsquo;t want to pay a premium for non-OpenSource storage clusters which are capable of serving and scaling from 10s to 100s of Petabytes, then this is the direction by which engineering solutions arrive at the datacenter. My storage designs range from <a href="https://blogs.oracle.com/exadata/advantages-of-exadata-exascale">Oracle&rsquo;s Exadata &amp; Exascale</a> clusters which have been adapted to run non-standard protocols, to fully purpose-built data-acceleration clusters which use COTS building blocks to provide similar performance and scale at a fraction of the cost <em>(not including consulting, engineering scope, and top-to-bottom fully-automated storage architecture deployments)</em>.</p>
<p>As networking has improved, NAND designs have advanced, and costs have reduced on $/TB and $/Watt&hellip; yet always&hellip; always the storage sizes grow in density and capabilities. This is natural and expected.</p>
<hr>
<h2 id="project-coherent-storage-an-evolution">Project Coherent Storage, an Evolution</h2>
<p>Six primary iterations, tracking the advancement of NAND acceleration, Network Acceleration, Protocol Offloading, Non-Volarile RAM, and now we see CXL capable of being deploying into reference architectures by which all others may be measured.</p>
<ul>
<li><strong>Project Coherent Storage v1</strong>, (2010-2012)</li>
<li><strong>Project Coherent Storage v2,</strong> (2011-2015)</li>
<li><strong>Project Coherent NAND,</strong> (CMPLX.io) (2015-2017)</li>
<li><strong>Project Coherent IO-Max v1</strong>, w/ Optane PMem (2020-2024)</li>
<li><strong>Project Coherent IO-Max v2</strong>, w/ Optane PMem (2024-2025)</li>
<li><strong>Project Coherent Storage v3</strong>, w/ CXL AIC/U3 (2026)</li>
</ul>
<h3 id="development-details---concise-timeline">Development Details - Concise Timeline</h3>
<p>A little bit of engineering nerdery for those who care&hellip; and btw, the community myth that ZFS cannot fulfill a role as a multi-node clustered filesystem are wrong.</p>
<h4 id="what-about-the-zfs-cant-cluster-myth">What About the &ldquo;ZFS Can&rsquo;t Cluster&rdquo; Myth?</h4>
<p>The &ldquo;Clustered ZFS&rdquo; operating modality for multi-controller interactions (<em>not limited to A/B active/passive or even active/active with modified pool-async hooks</em>) requires advanced network hardware and engineering experience which most are not aware of, and so the myth perpetuates; but it is wrong and it has been wrong for as long as SAS drives have had dual-heads and shelves have had 4+ SFF connectors ready for multi-multipath-chaining - and enterprise NVMe drives are also available in this arrangement for the same purpose.</p>
<h4 id="project-coherent-storage-v1-2010-2012"><strong>Project Coherent Storage v1</strong> (2010-2012)</h4>
<ol>
<li>Coherence Grid (DDR3 (Tier1)) + Custom Relational-Vector DBMS</li>
<li>Sunfire ZFS controllers w. Multi-Protocol-Net Interlinks (IB, IPoIB, mNFS+, FC, FCoE)</li>
<li>Geo-Dist-Nodes w. DDR3-PCIe SuperCap &ldquo;Hot Cache Layer&rdquo; (Tier2), w. <a href="https://dogemicrosystems.ca/pub/Sun/System_Handbook/Sun_syshbk_V3.4/Systems/SunFireX4600_M2/spec.html">Sunfire X4600/M2</a> @ 64 DIMMs Hotswap</li>
<li>Geo-Dist-Nodes w. SAS SSDs (Tier3) + SAS Spinner (Tier4)</li>
<li>Controller A/B+ nodes w. SAS-HBA to LTO-N (Tier5)</li>
</ol>
<h4 id="project-coherent-storage-v2-2011-2015"><strong>Project Coherent Storage v2</strong> (2011-2015)</h4>
<ol>
<li>Coherence Grid (DDR3 (Tier1)) + Relational-Vector DBMS</li>
<li>Sunfire ZFS controllers w. Multi-Protocol-Net Interlinks (IB, IP Native L2/L3, mNFS+, FCoE)</li>
<li>Geo-Dist-Nodes w. FusionIO Stacked &ldquo;Hot Cache Layer&rdquo; (Tier2)</li>
<li>Geo-Dist-Nodes w. SAS SSDs (Tier3) + SAS Spinner (Tier4)</li>
<li>Optional A/B nodes w. SAS-HBA to LTO-N (Tier5)</li>
</ol>
<h4 id="project-coherent-nand---cmplxio-2015-2017"><strong>Project Coherent NAND - CMPLX.io</strong> (2015-2017)</h4>
<ol>
<li>Coherence Grid DDR4 (Tier1) + Relational-Vector DBMS</li>
<li>Native ZFS controllers w. Multi-Protocol-Net Interlinks (IB, IP Native L2/L3, mNFS+, iSER)</li>
<li>Geo-Dist-Nodes w. NAND Stacked &ldquo;Hot Cache Layer&rdquo; (Tier2)</li>
<li>Geo-Dist-Nodes w. SAS3 SSDs (Tier3) + SAS3 Spinner (Tier4) [+ optional SAS3 HBA to LTO for Iron Mountain (Tier5)]</li>
<li>This architecture was a basis for one of my former startups, which was sold to private equity and built-upon for their HFT clusters under very tight NDA + Confidentiality Contract</li>
</ol>
<h4 id="project-coherent-io-max-storage-architectures-v1-2-3">Project Coherent IO-Max Storage Architectures v1, 2, 3</h4>
<p>These storage architectures share core foundations, with iterations upward as Non-Volatile Memory was introduced on a wider scale into my designs. The initial design for v1 featured the first generation of Intel Optane 3D-XPoint (Series 100), v2 with Series-200, and now CXL taking the place of Optane PMem SKUs.</p>
<p>The details of each design from v1 and v2 may be expanded upon later, simply for historical purposes, and I have other things to do right now&hellip; but if you&rsquo;ve made it this far into the post and want to see the specification ADRs and related research, which is RAG-pipelined and iteratively deployed on real hardware for revisions and regression testing to validate LLM Inference usage &amp; advancements with the now-opensource Coherence-CE version&hellip; scroll down for a link to v3&rsquo;s repo.</p>
<ul>
<li><strong>Project Coherent IO-Max v1,</strong> (2020-2023)</li>
<li><strong>Project Coherent IO-Max v2,</strong> (2023-2025)</li>
<li><a href="https://github.com/yukon-systems/StorOps__Project_Coherent_Storage"><strong>Project Coherent IO-Max v3</strong>,CXL (2026)</a></li>
</ul>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>Context {length} Matters</title>
      <link>https://winterschon.gitlab.io/en/posts/context-length-matters/</link>
      <pubDate>Mon, 04 May 2026 23:53:00 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/context-length-matters/</guid>
      <description><![CDATA[<p>Saturday morning means it&rsquo;s time for a blog post about <strong>&ldquo;The Ten Stages of Ai/ML Engineering&rdquo;</strong> 💖 .. aka <em>&ldquo;Stop wasting money&rdquo;</em>, or the classic <em>&ldquo;No one tuned any caches?&rdquo;</em></p>
<p>These are <code>SELECT NOW();</code> as well as antiquated concepts from my OLTP/OLAP Data Architect era jobs; where so much of the core knowledge translates to &ldquo;LLM Key/Value Cache Architectures&rdquo; that Directors always get confused when they&rsquo;ve not had the same experiences. Anyway, about those Neural Nets&hellip;</p>
<blockquote>
<p>Classic Neuroscience example: &ldquo;I&rsquo;m having a conversation, I&rsquo;m sleepy, my brain will only take in single simple sentences with one action and one request at most; anything further will be silently discarded or cause Brain Queue.</p>
</blockquote>
<p>We all know the feeling of a sluggish Brain Queue, where our sleepiness limits comprehension, limits attention span, and limits the amount of sensory input capacity for decision making.</p>
<p>Having insufficient resources, like attention or short term memory, can result in the mind becoming stuck in a Consideration Loop leading to &ldquo;Sleepy-Faced Analysis-Paralysis&rdquo;. This is where the brain is too tired to comprehend the full cognitive pathway required to exit from the loop.</p>
<p>When working with on-premise or public-API based LLMs, engineering choices must be made, specifically the <strong>First-Stage</strong> task of <em><strong>&ldquo;choosing the correct model&rdquo;</strong></em>.. and more generally with decision making processes where the length of associative (<em>contextual</em>) information is a requirement.</p>
<hr>
<h2 id="the-tldr--sure-timesa-wastin">The TL;DR .. Sure, Time&rsquo;s&rsquo;a Wastin'</h2>
<p>How about some quick blurbs from real human-to-human conversations, sourced from my career path right up through this past week. There are a few decently representative examples of short context vs long context.</p>
<blockquote>
<p>She&rsquo;s too verbose. She seems shy and quiet. She talks too much. She doesn&rsquo;t go deep on technical details. She goes on tangents and my attention span is too short to see the larger picture. She&rsquo;s hard to read. She&rsquo;s too open about everything. She&rsquo;s difficult to &ldquo;get into the weeds with&rdquo;. (that last one is my new favorite).</p>
</blockquote>
<p>It&rsquo;s always a double standard; I&rsquo;m used to it, contextually speaking.</p>
<ol>
<li>Context length is the amount of text an LLM can see at once.</li>
<li>CTL affects response quality, server specs, latency, API, cost.</li>
<li>A longer window can help the model reason across more information, but it also makes the system heavier to run.</li>
<li>Treat context length as a core system requirement always.</li>
<li>Define it, test it, document it, monitor it, know it, love it.</li>
<li>Adjust it based on real usage. It will be chunked, split, cached.</li>
</ol>
<hr>
<p><img src="/content/images/2026/05/burning-the-runway.960px-1-1.png" alt=""></p>
<h3 id="whats-this-about-burning-runways">What&rsquo;s this about Burning Runways?</h3>
<p>But before we do, and because everyone loves to compltain about 💸&hellip; it&rsquo;s really in ones best interests to understand how those bills become a reality, especially right now in the industry when <em>&ldquo;courting adoption&rdquo;</em> can be considered a write-off vs <em>&ldquo;chasing profits&rdquo;,</em> except for some <em>(oooh Claude, you&rsquo;re not being ethical lately)</em>.</p>
<p>Rewind from LLMs to the SaaS era&hellip; just look at real world stories of situations where applications were not controlled on their Context States, leading to <a href="https://serverlesshorrors.com/">tens and hundreds of thousands of dollars in SaaS Application API bills</a>:</p>
<ul>
<li><a href="https://serverlesshorrors.com/all/vercel-700">$738.420</a>, <em>&ldquo;I subscribe to Vercel Pro for $20 per month. I also added a spending limit of $120, so no nasty surprises, right?&rdquo;</em></li>
<li><a href="https://serverlesshorrors.com/all/firebase-cloudrun-72k">$72,000.999</a>, <em>&ldquo;We Burnt $72K testing Firebase + Cloud Run and almost went Bankrupt&rdquo;</em></li>
<li><a href="https://serverlesshorrors.com/all/cloudflare-120k">$120,000.420</a>, <em>&ldquo;Cloudflare took down our website after trying to force us to pay 120k$&rdquo;</em></li>
</ul>
<hr>
<h2 id="what-is-context-length">What is Context Length?</h2>
<p>Context length, sometimes called window size or max tokens per forward pass, is the number of tokens a model can attend to at once. It directly limits how much raw text, user history, or retrieved knowledge can be processed in a single inference step. Our brains do this constantly, we infer and make decisions based on memory and situational context of data, and neural networks do too.</p>
<p>Since every engineering stage ultimately decides what the model sees and how much it costs to see it, context length is a cross‑cutting quality attribute. Below we walk through each first‑stage task (including the critical &ldquo;Iterative Revision&rdquo; stage) and explain how important context length is, what engineering implications arise, and what concrete actions you can or should take and why.</p>
<p>For comparison analysis, click through the data table below to see model specific specifications, including Context Length, for various Open Source models <em>(these are not the latest LLMs, so go look at HuggingFace if you want more info).</em></p>
<p>Cardtainer (Shadow DOM, Self-contained)</p>
<hr>
<h2 id="context-length-what-it-changes">Context Length: What It Changes</h2>
<p>So, you want it hot and loose or you want those warmed-up caches pre-primed from snapshot slapshots to the top-layer of the mesh?</p>
<blockquote>
<p>&ldquo;Sure, but how much can the cache layers <em>(there&rsquo;s more than three)</em> handle before we overload the cluster with memory pressure or downstream write amplification?&rdquo;</p>
</blockquote>
<h4 id="small-context-windows-are-great-longer-also-yes">Small Context Windows Are Great, Longer Also Yes!</h4>
<ul>
<li>A small context window is fine for short prompts and mobile devices with NPUs that are fundamentally different from large GPUs like the H200 or MI300&hellip; or inference clusters serving thousands of them.</li>
<li>A larger window lets the model work across longer documents, multi-turn conversations, codebases, contracts, research notes, support histories, or anything else where the answer depends on more than one paragraph of information.</li>
</ul>
<p><strong>That does not make longer context automatically better.</strong> It makes the system more capable, but also more expensive and more operationally sensitive.</p>
<h3 id="longer-context-often-requires-more-resources">Longer Context Often Requires More Resources</h3>
<p>Yeaaaah, but we&rsquo;re not talking about <a href="https://huggingface.co/litert-community/gemma-4-E4B-it-litert-lm">Gemma4 on LiteRT</a>, this is a conceptual discussion for general LLM engineering. So&hellip;</p>
<ul>
<li>Longer Context = More memory pressure</li>
<li>Longer Context = Higher GPU requirements</li>
<li>Longer Context = Higher cost per request</li>
<li>Longer Context = More complex data handling</li>
<li>Longer Context = Requires more testing for latency, stability, and output quality</li>
</ul>
<p><strong>Context length is not just a model feature. It is an architecture decision.</strong></p>
<hr>
<h2 id="why-context-length-matters-across-the-whole-project">Why Context Length Matters Across the Whole Project</h2>
<p>Context length touches almost every part of an LLM project. It affects how we define the product, prepare the data, choose infrastructure, test the model, and manage cost.</p>
<h3 id="1-product-requirements">1. Product requirements</h3>
<p>Start with the real use case. Can the product work with short prompts, or does it need to process full documents, long chat histories, tickets, logs, reports, or contracts?</p>
<ul>
<li>That answer should be written into the project requirements early. For example:</li>
</ul>
<blockquote>
<p>The model must support at least an 8K token context window for production inference.</p>
</blockquote>
<p>Without that requirement, the team may pick a model, GPU profile, or data pipeline that works in a demo but fails under real usage. Confusion!</p>
<h3 id="2-data-collection">2. Data collection</h3>
<p>Long-context systems need long-form data. That may include:</p>
<ul>
<li>Full PDFs</li>
<li>Long chat transcripts</li>
<li>Complete contracts</li>
<li>Support cases</li>
<li>Technical documentation</li>
<li>Source code repositories</li>
<li>Meeting notes or knowledge base articles</li>
</ul>
<p>The team also needs to confirm that the data can legally be stored, processed, and used for training or retrieval. This is especially important when full documents are involved.</p>
<h3 id="3-data-chunking">3. Data chunking</h3>
<p>Most long documents still need to be split into chunks. The goal is to avoid cutting the text in a way that destroys meaning.</p>
<p>A good chunking pipeline should:</p>
<ul>
<li>Keep related content together</li>
<li>Avoid splitting sentences or sections awkwardly</li>
<li>Add overlap where needed</li>
<li>Track source metadata</li>
<li>Stay within the model’s context limit</li>
</ul>
<p>This is where a lot of long-context quality is won or lost. <strong>Bad chunking creates missing facts, fragmented answers, and unnecessary API calls</strong>.</p>
<h3 id="4-infrastructure">4. Infrastructure</h3>
<p>Longer context needs more memory, and therefore more money, more electricity, more attention to&hellip; you get the idea. It means larger GPUs, more careful batching, tighter monitoring, and better cost controls.</p>
<p>For example, moving from short prompts to 8k or 16k token workloads can change:</p>
<ul>
<li>GPU selection</li>
<li>vRAM requirements</li>
<li>Batch size</li>
<li>Throughput</li>
<li>Latency</li>
<li>Autoscaling behavior</li>
<li>Failure modes</li>
</ul>
<p>The infrastructure has to match the context target. Otherwise the system may work in testing and fall over in production.</p>
<h3 id="5-model-selection">5. Model selection</h3>
<p>Not every model handles long context well. Some models support long windows natively. Others can technically be extended, but quality may degrade if the model was not trained or tuned for that range.</p>
<p>When selecting a model, the team should check:</p>
<ul>
<li>Maximum supported context length</li>
<li>Quality at long context</li>
<li>Retrieval performance</li>
<li>Latency profile</li>
<li>Memory behavior</li>
<li>Positional encoding strategy</li>
<li>Cost per request</li>
</ul>
<p>The advertised context window is not enough. The model needs to perform well near the limit.</p>
<h3 id="6-experiment-tracking">6. Experiment tracking</h3>
<p>Context length should be logged as a first-class experiment variable.</p>
<p>Every run should capture:</p>
<ul>
<li>Context window size</li>
<li>Chunk size</li>
<li>Overlap strategy</li>
<li>GPU type</li>
<li>Memory usage</li>
<li>Tokens per second</li>
<li>Latency</li>
<li>Cost</li>
<li>Evaluation results</li>
</ul>
<p>This makes it possible to compare short-context and long-context runs without guessing.</p>
<h3 id="7-testing-and-validation">7. Testing and validation</h3>
<p>Long-context bugs often do not show up with short prompts.</p>
<p>The test suite should include:</p>
<ul>
<li>Short inputs</li>
<li>Medium inputs</li>
<li>Maximum-length inputs</li>
<li>Inputs near the limit</li>
<li>Realistic long documents</li>
<li>Multi-document prompts</li>
<li>Stress tests for memory and latency</li>
</ul>
<p>The goal is to verify that the model does not crash, truncate important information, hallucinate around missing context, or slow down beyond acceptable limits.</p>
<h3 id="8-documentation">8. Documentation</h3>
<p>Context decisions need to be documented. Future engineers should be able to understand:</p>
<ul>
<li>Why the context size was chosen</li>
<li>How chunking works</li>
<li>Where truncation can happen</li>
<li>Which GPU profile is required</li>
<li>How to increase or reduce the window</li>
<li>What tests must pass before changing it</li>
</ul>
<p>This prevents context length from becoming tribal knowledge.</p>
<h3 id="9-production-monitoring">9. Production monitoring</h3>
<p>Once users are in the system, monitor the actual request lengths. Track things like:</p>
<ul>
<li>Average prompt length</li>
<li>95th percentile prompt length</li>
<li>Maximum prompt length</li>
<li>Truncation events</li>
<li>Retrieval misses</li>
<li>API call volume</li>
<li>Latency by token count</li>
<li>Cost by request type</li>
</ul>
<p>If users start pushing against the window, that is an early signal. The system may need better chunking, better retrieval, caching, prompt compression, or a longer-context model.</p>
<h3 id="10-api-limits-and-cost-behavior">10. API limits and cost behavior</h3>
<p>Shorter context can create more API calls. If one user request has to be split into many chunks, the system may hit:</p>
<ul>
<li>Higher latency</li>
<li>Higher request volume</li>
<li>Rate limits</li>
<li>More billed API calls</li>
<li>More orchestration complexity</li>
<li>More opportunities for partial failure</li>
</ul>
<p>A larger-context model can reduce the number of chunks required for some workflows, but it may also increase the cost of each request.</p>
<p>The right answer is not always <em>“bigger window.”</em> The right answer is the smallest context window that reliably supports the use case.</p>
<hr>
<h2 id="the-practical-flow">The Practical Flow</h2>
<p>For a real project, the workflow looks like this:</p>
<ol>
<li>Define the longest input the product needs to handle.</li>
<li>Confirm the data exists and can legally be used.</li>
<li>Split the data into chunks that preserve meaning.</li>
<li>Choose infrastructure that can support the target window.</li>
<li>Select a model that performs well at that context length.</li>
<li>Track context length in every experiment.</li>
<li>Test the model with realistic long inputs.</li>
<li>Document how the window, chunking, and infrastructure work.</li>
<li>Monitor real user request lengths in production.</li>
<li>Adjust when usage patterns change.</li>
</ol>
<p>This keeps context length connected to the actual system, not just the model card. It&rsquo;s super duper important so get it right! Test, then test more, and automate the tests, and have a validation LLM with reasoning and validation post-training awareness &hellip; or you&rsquo;re gonna have a bad day.</p>
<hr>
<h2 id="what-this-means-in-practice">What This Means in Practice</h2>
<p>A longer context window can improve answer quality because the model can see more relevant information at once. It can also increase cost, latency, memory usage, and operational risk.</p>
<p>That tradeoff matters. For most production systems, context length should be treated like any other engineering constraint:</p>
<ul>
<li>Capacity</li>
<li>Latency</li>
<li>Reliability</li>
<li>Cost</li>
<li>Security</li>
<li>Compliance</li>
<li>Maintainability</li>
</ul>
<p>It is not just a prompt design detail. It affects the data pipeline, model choice, infrastructure plan, testing strategy, and production budget.</p>
<hr>
<h2 id="checklist-for-your-future-llm-project">Checklist for Your Future LLM Project</h2>
<p>Before committing to a context length (and quantization), make sure&hellip;</p>
<ol>
<li>What is the longest input this product needs to handle?</li>
<li>Are we working with snippets, full docs, or multi-doc workflows?</li>
<li>Do we have the right to store and process the full source data?</li>
<li>Are we chunking the data in a way that preserves meaning?</li>
<li>Do we need overlap between chunks?</li>
<li>Can the selected model support the required window?</li>
<li>Does the model still perform well near the edge of that window?</li>
<li>Do we have enough GPU memory for the target workload?</li>
<li>Are we tracking context length in experiments?</li>
<li>Are we testing short, medium, long, and maximum-length inputs?</li>
<li>Are we monitoring real request lengths in production?</li>
<li>Are we watching API limits, cache perf, tokens/ second, and cost?</li>
</ol>
<p>If the answer to those questions is clear, the project is probably handling context length correctly. If the answer is vague, context length is still an unresolved architecture risk.</p>
<hr>
<h2 id="heading"></h2>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>Inferencing Trivialities</title>
      <link>https://winterschon.gitlab.io/en/posts/inferencing-trivialities/</link>
      <pubDate>Tue, 20 Jan 2026 04:02:00 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/inferencing-trivialities/</guid>
      <description><![CDATA[<p>I&rsquo;m working on a triviality here, a tangent to a tangent to making a list for a message in a calendar invite. However, I want better jargon for one term specifically. So&hellip; off to the Inference VM Cluster&hellip; at home, with 2TB of RAM and quad Ampere GPUs.</p>
<p>Why not simply sit and stare into the nothingness while taxing memory stores for <em>&ldquo;that one word or phrase&hellip;&rdquo;</em>, when I could access vast sums of human knowledge in microseconds? I&rsquo;ll go with the latter.</p>
<hr>
<h2 id="what-is-your-query">What is your query?</h2>
<blockquote>
<p>looking for several versions of &ldquo;the 30,000 foot view, the high-level vantage point&rdquo;</p>
</blockquote>
<p><em>—the inference begins—</em></p>
<pre tabindex="0"><code>%&gt; Okay, the user is asking for &#34;nerd versions&#34; of the phrase &#34;30,000 foot view&#34; or &#34;high-level vantage point.&#34; Hmm, they probably want alternatives that sound more technical or academically precise, something a data scientist or engineer might use.  

%&gt; First, I should unpack why they&#39;re asking. The original phrase is business jargon, so they might be:  

- A professional tired of clichés wanting to sound more credible  
- Someone prepping for a technical presentation needing precise terms  
- Or just a linguaphile playing with semantics (hence &#34;nerd versions&#34;)  

&gt; The key is replacing the folksy aviation metaphor with domain-specific rigor. Let&#39;s categorize:  

**Science/math approaches:**  
- Astronomy terms work because they&#39;re literally about observational scale (parsecs, light-years). The &#34;cosmological horizon&#34; suggestion makes me smile—it&#39;s absurdly over-the-top but technically correct for &#34;biggest possible zoomed-out view.&#34;  
- Thermodynamics&#39; &#34;coarse-grained&#34; is perfect—it&#39;s the actual term for ignoring microscopic details. Nerds will recognize it instantly.  

**Tech/engineering angles:**  
- Sysadmins will love &#34;layer 7 abstraction&#34; (OSI model joke). Devs might prefer &#34;architectural overview&#34; since it implies skipping code details.  
- &#34;Topological overview&#34; is niche but glorious if your audience does graph theory. Otherwise, it&#39;s weaponized obscurity.  

---

#### 🌌 **Astronomy/Physics Edition**  
- **&#34;Cosmological Horizon Perspective&#34;**  
- *Why it’s nerdy:* References the observable universe’s limit (~46B light-years). Implies *truly* fundamental abstraction, ignoring local gravitational anomalies (a.k.a. &#34;tactical details&#34;).  
- *Example:* &#34;Before simulating dark matter flows, let’s establish the **cosmological horizon perspective** of the galaxy formation model.&#34;  

---

#### 🔬 **Systems Engineering / Control Theory**  
- **&#34;State-Space Coarse-Graining Overview&#34;**  
- *Why it’s nerdy:* Borrows from statistical mechanics. &#34;Coarse-graining&#34; means deliberately *averaging out* microscopic states to see macro-scale behavior. Rejects the imprecision of &#34;30k feet&#34; with thermodynamic rigor.  
- *Example:* &#34;We’re stuck on actuator tolerances; let’s revert to the **state-space coarse-graining overview** and re-define system boundaries.&#34;  

---

#### 💻 **Computer Science / Distributed Systems**  
- **&#34;Layer-7 Abstraction Boundary Analysis&#34;**  
- *Why it’s nerdy:* Uses the OSI model. Layer 7 (application layer) is the highest level of network abstraction. Bonus points for &#34;boundary analysis&#34; — a formal spec for where abstraction stops.  
- *Example:* &#34;The microservices are failing because we optimized Layer 4. Step back to the **Layer-7 abstraction boundary analysis** before debugging.&#34;  

---

#### 🧪 **Chemistry / Materials Science**  
- **&#34;Mean-Field Approximation Snapshot&#34;**  
- *Why it’s nerdy:* In complex systems (e.g., polymers), &#34;mean-field theory&#34; ignores particle interactions to model bulk behavior. The *antithesis* of atomistic simulation.  
- *Example:* &#34;Stop modeling individual monomers. What does the **mean-field approximation snapshot** suggest about the polymer’s phase transition?&#34;  

---

#### 📐 **Mathematics / Topology**  
- **&#34;Homotopy Class Invariant Summary&#34;**  
- *Why it’s nerdy:* In topology, homotopy classes ignore geometric details (e.g., bending/stretching) to focus on *essential structure*. Only topologists would use this to mean &#34;big picture.&#34;  
- *Example:* &#34;Your graph algorithm is over-engineered. What’s the **homotopy class invariant summary** of the network’s connectivity?&#34;  

---

#### ⚙️ **Aerospace Engineering Correction**  
- **&#34;Stratospheric Cruise Altitude Contextualization&#34;**  
- *Why it’s nerdy:* Points out that **30,000 feet = 9,144 meters** is *tropospheric*, not stratospheric (starts at 36,000 ft). Uses &#34;contextualization&#34; to mock business jargon while sounding academic.  
- *Example:* &#34;Per FAA Class A airspace regulations, 30k ft isn’t stratospheric. Let’s reset with the **stratospheric cruise altitude contextualization**.&#34;  

---

#### 📊 **Data Science / ML**  
- **&#34;Manifold Hypothesis Pre-Projection&#34;**  
- *Why it’s nerdy:* Assumes high-dimensional data lives on a low-dimensional manifold. &#34;Pre-projection&#34; means before dimensionality reduction (e.g., t-SNE/PCA). Ignores feature engineering details.  
- *Example:* &#34;Don’t tweak the hyperparameters yet. We need a **manifold hypothesis pre-projection** of the latent space topology.&#34;  

---

#### 💡 **Why these work for nerdery:**  
- **No aviation metaphors** → Replaced with field-specific *formalisms*.  
- **Precision over vagueness** → &#34;30,000 feet&#34; is arbitrary; these terms define *exactly* what’s abstracted.  
- **Embedded critique** → Some (like the aerospace example) subtly mock the original phrase’s inaccuracies.  
- **Jargon density** → Guaranteed to make MBA-types sweat.  

#### 🚫 **Pro tip for usage:**  
Only deploy these **if your audience will recognize the terminology**. In a room of astrophysicists, *cosmological horizon perspective* earns respect. In a board meeting, mostly no one will care, unless they&#39;re in-group.  

---
</code></pre><p>Interesting results, some useful ideas there as an example, which underscores a requirements of leveraging LLM tool-chains.</p>
<p>Using advanced systems necessitates preconditions of awareness which, unfortunately too often, are ignored or undesirable to the layperson. In another realm this concept is known as, &ldquo;Respect The Chemistry!&rdquo;</p>
<blockquote>
<p>LLMs Facilitate the Augmentation of Human Intellect through existing Topical Comprehension, mediated by Post-Context Information Consolidation and Integration.</p>
</blockquote>
<p>In other words, don&rsquo;t leave your brain at the door.</p>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>Storage Unlimited, Hypothetical</title>
      <link>https://winterschon.gitlab.io/en/posts/storage-unlimited-hypothetical/</link>
      <pubDate>Tue, 13 Jan 2026 01:54:04 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/storage-unlimited-hypothetical/</guid>
      <description><![CDATA[<p>Sometimes hypothetical scenarios and questions of intrigue require delving into the realm of imagination and then back to the cold-harsh reality of the physical world. Let&rsquo;s focus on a recent <strong>Hypothetical Storage Architecture Question</strong>: <em>&ldquo;If you had an unlimited budget, how much data would you store?&rdquo;</em></p>
<blockquote>
<p><strong>Adjusted Query</strong>: how much storage space would the user deploy to an existing multi-Petabyte array, with consideration to physical limitations in systems design which prioritize two common architectural decision targets: More or Faster?</p>
<p>(1) maximizing raw-block capacity<br>
(2) maximizing I/O performance</p>
</blockquote>
<h2 id="tldr">TL;DR</h2>
<p>Between 4-5PB is the simplest answer, but those are just numbers. Could be 10x either, but that&rsquo;s not realistic - it&rsquo;s conjecture. The full picture requires insight into physical limits of the transfer time, storage space, rack space, and rotational speeds involved; spacetime could be analyzed by the right minds if this were JPL <code>^_^</code> .. instead of limited to hardware I&rsquo;ve acquired over a small handful of years.</p>
<h2 id="hypothetical-or-reality">Hypothetical or Reality</h2>
<p>Let&rsquo;s say that I contacted the datacenter and ordered additional power circuits to light-up additional drive shelves, which are already installed <em>(minus the box of drive trays which are in a massive box on a parts shelf in my home office)</em>. Ok, reality checks out there.</p>
<p>The circuit drops would go to the central storage rack which is currently at 84% power limit. I know this because power is monitored and validated via a combination of Check_MK + Prometheus + SNMP exporters, which poll power stats remotely from the cabinet&rsquo;s APC ATS, the rack&rsquo;s per-port metered and switched outlet PDUs, and then if I really want to I can look at the DC&rsquo;s circuit stats (via MRTG) which are tracked for the cabinet. Reality checks out there decently enough. Moving on&hellip;</p>
<hr>
<h2 id="the-hypothetical">The Hypothetical</h2>
<p>First we&rsquo;ll cover some raw numbers and theoretical maximums by looking at two high-level approaches required for <em>&ldquo;More or Faster&rdquo;</em>.</p>
<p>The astute reader may wonder why we&rsquo;re not discussing &gt;100TB QLC NVMe drives or ultra-dense E2 ruler-style 2U chassis, and the answer is that those calculations are generally similar in equation workflow <em>(eg: how many things of X can we put into Y at A,B,C performance/size/latency)</em>, however those hardware types are not currently racked in my real-world systems at an interesting scale. However, migrating to denser NVMe arrangements will likely be part of an eventual down-scaling forklift operation whenever the SAS3 arrays are no longer useful for my personal labs or colo bills.</p>
<p>Production is another story, where large format SAS3 is still relevant and being deployed and improved over time; in the last several years we&rsquo;re seen drive capacity double, along with some innovative designs. It&rsquo;s not often considered exciting, but it lasts A LONG TIME, and the NSA loves archiving the internet on this medium over in their Utah storage complex <em>(overheard, surely).</em></p>
<p>So, back to the math&hellip;</p>
<h4 id="decision-optimize-for-faster-prioritize-iops--bw">Decision: Optimize for Faster (prioritize IOPs + bw)</h4>
<p>Aggregate per-rack w/ 10x shelves of raw 4K block <code>= 3,824 TB == 3.72 PB</code></p>
<table>
  <thead>
      <tr>
          <th>Shelves</th>
          <th>SAS3 Drives</th>
          <th>Brand</th>
          <th>Model</th>
          <th>Total</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>8x DE3-24P</td>
          <td>192</td>
          <td>Seagate</td>
          <td>EXOS Mach2 @ 18TB</td>
          <td>= 3,456 TB</td>
      </tr>
      <tr>
          <td>2x DE3-24C</td>
          <td>48</td>
          <td>Oracle</td>
          <td>SSD @ 7.68TB/drive</td>
          <td>= 368 TB</td>
      </tr>
      <tr>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td>== 3,824 TB</td>
      </tr>
  </tbody>
</table>
<h4 id="decision-optimize-for-raw-storage-capacity">Decision: Optimize for RAW Storage Capacity</h4>
<p>How about the same hardware focused on max-total raw space with less regard to per-drive IOPs <em>(perhaps we offset the latency reduction per-drive via larger</em> <a href="https://github.com/openzfs/zfs/blob/master/module/zfs/arc.c"><em>L1ARC and L2ARC</em></a> <em>buffers on the head-nodes, which becomes a loaded tangent)</em>&hellip; then the rack could be upgraded to host <strong>4.85PB @ $800/m MRC ($400/m cabinet + $400/m amperage)</strong>**.</p>
<p>We&rsquo;ll also save the conversation about concessions made at time of contract signing where I might / maybe / surely have saved on recurring costs by locking-in a multi-year multi-rack contract. Sales team, thanks!</p>
<h4 id="what-is-this-mrc-mrr">What is this MRC, MRR?</h4>
<p>MRC in this situation is the <strong>&lsquo;Monthly Recurring Cost&rsquo;</strong> for power + rack. This value does not include the cost of acquired hardware, which is variable on supply-chain sourcing and other factors. I&rsquo;m also not going to describe potential MRC or MRR offsets which factor into profit margin potential and/or influence EBITDA.</p>
<p>Ok, what is MRR and EBID..? Fine, at least with MRR it&rsquo;s <strong>&lsquo;Monthly Recurring Revenue&rsquo;</strong>, and one can read <a href="https://www.investopedia.com/terms/e/ebitda.asp">all about EBITDA elsewhere</a>.</p>
<table>
  <thead>
      <tr>
          <th>Shelves</th>
          <th>SAS3 Drives</th>
          <th>Brand</th>
          <th>Model</th>
          <th>Total</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>8x DE3-24P</td>
          <td>192</td>
          <td>Seagate</td>
          <td>EXOS X30 @ 24TB</td>
          <td>= 4,608 TB</td>
      </tr>
      <tr>
          <td>2x DE3-24C</td>
          <td>48</td>
          <td>Oracle</td>
          <td>SSD @ 7.68TB/drive</td>
          <td>= 368 TB</td>
      </tr>
      <tr>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td>== 4,976 TB</td>
      </tr>
  </tbody>
</table>
<h4 id="what-about-flash-cache-or-optane-or-non-volatile-blah-blah-blah">What about Flash-Cache or Optane or Non-Volatile blah blah blah</h4>
<p>Sure, those are considerations, where applicable. Some footnote notes&hellip;</p>
<ul>
<li>It&rsquo;s prudent to deploy storage controllers with SLC NVMe or PMem/NVDIMM persistent cache <em>(which are often a baseline performance requirement)</em>. These are sized anywhere from cumulative 1-12TB per-controller, depending on available PCIe lanes and/or NV-DIMM slots.</li>
<li>It&rsquo;s a good idea to make scoping decisions like that ahead of time, instead of later realizing that the controllers&rsquo; lanes are maxed out or all DIMM slots are used (or you bought 128GB NVDIMMs instead of 512GB, thinking <em>&ldquo;8x 128GB should be fine for PMem&rdquo;</em> or the other fun one about ignoring (or being unaware) about GHz speed reduction by running <a href="https://lenovopress.lenovo.com/lp2000-balanced-memory-configurations-4th-5th-gen-2s-intel-processors#maximizing-memory-bandwidth">4-DPC in a 2-DPC</a> max-perf system.</li>
<li>Those determinations may be either workload dependent, or in my personal life sometimes it qualifies as the <em>&ldquo;because I wanted to&rdquo;</em> type of maximalist methodology, or the <em>&ldquo;this is relevant for future proofing my own rationalization on fun hardware&rdquo;</em>, or could be considered a baseline in pre-sales because <em>&ldquo;they always want more performance eventually; just bake it in from the start&rdquo;.</em> It varies, but remember where you started and where any future requirements for performance headroom exists.</li>
</ul>
<hr>
<h2 id="wheres-the-math">Where&rsquo;s the Math?</h2>
<p>Validation on spec baselines can be tedious, but anyway&hellip; the <a href="https://docs.oracle.com/en/storage/zfs-storage/zfs-appliance/os8-8-x/service-manual/oracle-storage-drive-enclosure-de3-24.html">DE3-24C and DE3-24P</a> have very shiny and well made <a href="https://docs.oracle.com/en/storage/zfs-storage/zfs-appliance/os8-8-x/cabling-guide/cabling-tables-and-diagrams-for-oracle-zfs-storage-appliance-racked-system-zs11-2-capacity-configurations.html">Dual-Redundant IOMs with 4x SAS3 SFF-8643</a> connectors.</p>
<h3 id="specs-for-our-sas3-fabric-with-de3-24-shelves">Specs for our SAS3 Fabric with DE3-24 Shelves</h3>
<ul>
<li>One SAS-3 lane (PHY): 12 Gbit/s ⇒ 1.5 GB/s (raw line-rate, decimal GB)</li>
<li>External SAS x4 port connector: 4 PHY × 12 Gbit/s ⇒ 48 Gbit/s ⇒ 6 GB/s</li>
<li>Each DE3-24{C/P} has 2× IOM, with each IOM having 4× SFF-8643 ports</li>
</ul>
<table>
  <thead>
      <tr>
          <th>Item</th>
          <th>Value</th>
          <th>Notes</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>SAS-3 lane rate</td>
          <td>12 Gbit/s</td>
          <td>per PHY</td>
      </tr>
      <tr>
          <td>1 PHY raw</td>
          <td>1.5 GB/s</td>
          <td>12/8</td>
      </tr>
      <tr>
          <td>1 x4 port raw</td>
          <td>6 GB/s</td>
          <td>4 PHY × 1.5</td>
      </tr>
      <tr>
          <td>Shelf fabric cap</td>
          <td>12N GB/s</td>
          <td>dual-IOM</td>
      </tr>
      <tr>
          <td>10-shelf fabric cap</td>
          <td>120N GB/s</td>
          <td>10 shelves</td>
      </tr>
  </tbody>
</table>
<table>
  <thead>
      <tr>
          <th>N active x4 ports per IOM</th>
          <th>Per-shelf fabric cap (GB/s)</th>
          <th>10-shelf fabric cap (GB/s)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td>12</td>
          <td>120</td>
      </tr>
      <tr>
          <td>2</td>
          <td>24</td>
          <td>240</td>
      </tr>
      <tr>
          <td><strong>3 (N+1 on 4-port IOM)</strong></td>
          <td><strong>36</strong></td>
          <td><strong>360</strong></td>
      </tr>
      <tr>
          <td>4 (no spare)</td>
          <td>48</td>
          <td>480</td>
      </tr>
  </tbody>
</table>
<h4 id="drive-specs---seagate-exos--oracle-ssd">Drive Specs - Seagate EXOS &amp; Oracle SSD</h4>
<table>
  <thead>
      <tr>
          <th>Drive</th>
          <th>Metric</th>
          <th>Value</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Seagate Exos ST24000NM007H (24TB HDD)</td>
          <td>Max sustained OD (MB/s)</td>
          <td><strong>285</strong></td>
      </tr>
      <tr>
          <td>Seagate Exos Mach.2 ST18000NM0272 (18TB HDD)</td>
          <td>Max sustained OD (MB/s)</td>
          <td><strong>554</strong></td>
      </tr>
      <tr>
          <td>Mach.2 ST18000NM0272</td>
          <td>4K random @ QD16 (IOPS)</td>
          <td><strong>304 read / 560 write</strong></td>
      </tr>
      <tr>
          <td>Oracle 7.68TB RI SAS-3 SSD</td>
          <td>Seq (MB/s)</td>
          <td><strong>2150 read / 1980 write</strong></td>
      </tr>
      <tr>
          <td>Oracle 7.68TB RI SAS-3 SSD</td>
          <td>4K random (IOPS)</td>
          <td><strong>450k read / 95k write</strong></td>
      </tr>
  </tbody>
</table>
<h2 id="scenario-a--maximum-raw-block-space">Scenario A – Maximum RAW Block Space</h2>
<p>Before going into the theoretical weeds, let&rsquo;s look at some per-shelf media limits.</p>
<p><strong>1) Oracle DE3-24P shelf w/ 24TB</strong> Spinners**:** 24 × 285 MB/s = <strong>6.84 GB/s</strong> (media-limited)</p>
<p><strong>2) Oracle DE3-24C shelf</strong> w/ SSDs:</p>
<ul>
<li>Read: 24 × 2150 MB/s = <strong>51.60 GB/s</strong> → <strong>capped by fabric</strong> at <strong>36 GB/s</strong> (N=3)</li>
<li>Write: 24 × 1980 MB/s = <strong>47.52 GB/s</strong> → <strong>capped by fabric</strong> at <strong>36 GB/s</strong> (N=3)</li>
</ul>
<table>
  <thead>
      <tr>
          <th>Tier</th>
          <th>Shelves</th>
          <th>Per-shelf effective (GB/s)</th>
          <th>Tier aggregate (GB/s)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>DE3-24P (24× 24TB HDD)</td>
          <td>8</td>
          <td>6.84</td>
          <td>54.72</td>
      </tr>
      <tr>
          <td>DE3-24C (24× 7.68TB SSD)</td>
          <td>2</td>
          <td><strong>36.00</strong> (fabric-capped)</td>
          <td><strong>72.00</strong></td>
      </tr>
      <tr>
          <td><strong>Total (10 shelves)</strong></td>
          <td>10</td>
          <td>—</td>
          <td><strong>126.72</strong></td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="scenario-b-maximum-performance">Scenario B: Maximum Performance</h2>
<p>Hardware has limits, and we&rsquo;re looking at 8× DE3-24P w/ 18TB Mach.2 HDD + 2× DE3-24C w/ 7.68TB SSD (N=3)</p>
<h3 id="aggregate-sequential-bandwidth-n3">Aggregate sequential bandwidth (N=3)</h3>
<ul>
<li><strong>Mach.2 18TB HDD shelf</strong>: 24 × 554 MB/s = <strong>13.296 GB/s</strong> (media-limited; below 36 GB/s fabric cap)</li>
<li><strong>SSD shelf</strong>: remains <strong>fabric-capped</strong> at <strong>36 GB/s</strong> read and write (N=3)</li>
</ul>
<table>
  <thead>
      <tr>
          <th>Tier</th>
          <th>Shelves</th>
          <th>Per-shelf effective (GB/s)</th>
          <th>Tier aggregate (GB/s)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>DE3-24P (24× Mach.2 HDD)</td>
          <td>8</td>
          <td>13.296</td>
          <td>106.368</td>
      </tr>
      <tr>
          <td>DE3-24C (24× 7.68TB SSD)</td>
          <td>2</td>
          <td><strong>36.000</strong> (fabric-capped)</td>
          <td><strong>72.000</strong></td>
      </tr>
      <tr>
          <td><strong>Total (10 shelves)</strong></td>
          <td>10</td>
          <td>—</td>
          <td><strong>178.368</strong></td>
      </tr>
  </tbody>
</table>
<h3 id="aggregate-random-rw-4k-iops-n3">Aggregate Random R/W 4K IOPS (N=3)</h3>
<p><strong>Fabric-derived 4K IOPS cap per shelf (upper bound)</strong>:<br>
36 GB/s @ 4KB = approx 8.79M IOPS</p>
<ul>
<li><strong>SSD shelf</strong>
<ul>
<li>Read: 24 × 450k = 10.8M IOPs → <strong>capped</strong> to <strong>8.79M IOPs</strong></li>
<li>Write: 24 × 95k = <strong>2.28M IOPs</strong> → <strong>media-limited</strong> (below fabric cap)</li>
</ul>
</li>
<li><strong>Mach.2 HDD shelf (4K @ QD16)</strong>
<ul>
<li>Read: 24 × 304 = <strong>7,296 IOPs</strong></li>
<li>Write: 24 × 560 = <strong>13,440 IOPs</strong></li>
</ul>
</li>
</ul>
<table>
  <thead>
      <tr>
          <th>Tier</th>
          <th>Aggregate Read IOPs</th>
          <th>Aggregate Write IOPs</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>8× DE3-24P (Mach.2 HDD shelves)</td>
          <td>58,368</td>
          <td>107,520</td>
      </tr>
      <tr>
          <td>2× DE3-24C (SSD shelves)</td>
          <td><strong>17,580,000</strong></td>
          <td><strong>4,560,000</strong></td>
      </tr>
      <tr>
          <td><strong>Total (10 shelves)</strong></td>
          <td><strong>17,638,368</strong></td>
          <td><strong>4,667,520</strong></td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="lets-see-the-deltas">Let&rsquo;s See the Deltas!</h2>
<p>What&rsquo;s <em>&ldquo;a delta&rdquo;</em>? Sometimes it&rsquo;s the headwaters of a bay, where the river distributes across a flood-plane into many separately-unified channels, eventually giving way to deeper waters and&hellip;. no no not that kind.</p>
<p>Delta as a value in storage is often used as a marker to show the differential of two functions which indicates directional change. At least, that&rsquo;s what comes from my brain while I sit here having an ice cream sandwich, but it has some alternate terminology which applies irrespective of ice cream hour:</p>
<blockquote>
<p>Delta uppercase Δ, lowercase δ<br>
Uppercase: a change of any changeable quantity<br>
Lowercase: the central difference for a function</p>
<p>~ The discriminant of a polynomial equation or symmetric difference of two sets<br>
~ The determinant of the matrix of coefficients of a set of linear equations</p>
</blockquote>
<h3 id="scenario-b-vs-scenario-a-with-n3">Scenario B vs Scenario A (with N=3)</h3>
<ul>
<li><strong>Total sequential BW</strong>: <strong>126.72 → 178.368 GB/s</strong> (increase <strong>+51.648 GB/s</strong>)
<ul>
<li>Primary determinant: per-shelf BW <strong>6.84 → 13.296 GB/s</strong> (Mach.2 dual-actuator).</li>
</ul>
</li>
<li><strong>SSD tier</strong> remains <strong>fabric-capped</strong> at <strong>36 GB/s per SSD shelf</strong> under N=3; increasing N (or adding more independent uplinks with additional HBAs) is what changes that cap.</li>
</ul>
<ol>
<li>Faster array = <strong>less space @ higher IOPs and BW</strong> == 178 GB/s @ 3.8PB</li>
<li>Larger array = <strong>more space @ lower IOPs and BW</strong> == 126 GB/s @ 4.9PB</li>
</ol>
<p>Equations w/ decimal units: 1 TB = 1000 GB</p>
<ul>
<li>jaja usually we work in 1024 (but I&rsquo;m tired today, so not right now)</li>
</ul>
<pre tabindex="0"><code>t_1TB(s)      = 1000 / BW_GBps
t_full(s)     = (Capacity_TB * 1000) / BW_GBps
t_full(hours) = t_full(s) / 3600
BW_density    = BW_GBps / Capacity_TB   (GB/s per TB)
              = 1000 * BW_density       (MB/s per TB)
</code></pre><table>
  <thead>
      <tr>
          <th>Metric</th>
          <th>Faster array</th>
          <th>Larger array</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Bandwidth (GB/s)</td>
          <td>178</td>
          <td>126</td>
      </tr>
      <tr>
          <td>Capacity (TB)</td>
          <td>3824</td>
          <td>4976</td>
      </tr>
      <tr>
          <td>Time per 1 TB (s)</td>
          <td>5.62</td>
          <td>7.94</td>
      </tr>
      <tr>
          <td>Full sweep time (h)</td>
          <td>5.97</td>
          <td>10.97</td>
      </tr>
      <tr>
          <td>BW density (GB/s per TB)</td>
          <td>0.04655</td>
          <td>0.02532</td>
      </tr>
      <tr>
          <td>BW density (MB/s per TB)</td>
          <td>46.55</td>
          <td>25.32</td>
      </tr>
      <tr>
          <td>Density ratio (faster/larger)</td>
          <td>1.84×</td>
          <td>—</td>
      </tr>
  </tbody>
</table>
<h2 id="so-whats-the-answer-more-faster">So&hellip; what&rsquo;s the answer? More, Faster?</h2>
<p>Is bigger is better? Sometimes. Sometimes you need it faster. Sometimes you want both.</p>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>My EOY-2025 as told by the Ai</title>
      <link>https://winterschon.gitlab.io/en/posts/my-eoy-2025-as-told-by-the-ai/</link>
      <pubDate>Thu, 01 Jan 2026 20:58:01 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/my-eoy-2025-as-told-by-the-ai/</guid>
      <description><![CDATA[<p>I&rsquo;ll keep this simple, relatively speaking. There are a lot of inference providers on the market and most of them are either a waste of time, a waste of money, or wasteful in their resource burn and lack of attention to optimization. We do not have time to waste.</p>
<p>People in the industry are playing hard and fast, and whether those qualities may be considered a good thing is up for endless debate, but not right now. Right now I&rsquo;m going to show some End of Year snapshots which are relevant to the blog&rsquo;s purpose: wtf am I doing here anyway?</p>
<p>2025 was mostly extremely challenging, and mostly in helpful ways, but also featured a repetition of lessons which it seems I need to reflect on for additional forward momentum.</p>
<p>Let&rsquo;s take a look at some of my core qualities as told by the oft-loved and oft-maligned OpenAi&rsquo;s Chat-GPT 💟.</p>
<hr>
<h3 id="your-year-painted-in-pixels">Your Year, Painted in Pixels</h3>
<p>Very close, nice work GPT. While I do not have a 400GbE switch on my desk, I do have a few 100GbE 32-port switches in the racks, and occasionally 200GbE NICs and optics will float around the test bench.</p>
<p><img src="/content/images/2026/01/GPT-00-EOY2025-1222-153913-2-1.png" alt=""></p>
<hr>
<h3 id="the-architect-archetype--39-of-chatgpt-users">The Architect Archetype ~ 3.9% of ChatGPT Users</h3>
<p>It&rsquo;s true! Over the 25 years of this career I&rsquo;ve held architecture specific roles across the domains of Hardware Systems, Infrastructure Automation, Databases, and HPC Storage realms. It&rsquo;s what I&rsquo;ve always wanted to do, going all the way back to 1985 when introduced to the 4.77MHz IBM PC, Model 5150.</p>
<p><img src="/content/images/2026/01/GPT-01-EOY2025-1222-153913-1.png" alt=""></p>
<hr>
<h3 id="personality-specialist-planner-conceptual">Personality: Specialist, Planner, Conceptual</h3>
<p>That&rsquo;s fairly accurate, more so if we add &ldquo;spatial reasoning&rdquo; to a list of cognitive methods.</p>
<blockquote>
<p>&ldquo;Thinks in structures and systems. Uses ChatGPT to design elegant frameworks and long-term strategies within a domain.&rdquo;</p>
</blockquote>
<p><img src="/content/images/2026/01/GPT-02-EOY2025-1222-153913-1.png" alt=""></p>
<hr>
<h3 id="a-datacenter-in-the-living-room">A Datacenter in the Living Room?</h3>
<p>Close in accuracy, however the <em>&ldquo;living room datacenter&rdquo;</em> is more commonly located in a home-office room <em>(when living in an apartment),</em> or in a dedicated area of the garage with HVAC filtration + dedicated 208/220/240V power, and the requisite automated cooling systems <em>(usually Tripp-Lite units with duct-blowers).</em> For systems at home the machines are often bought as separate server components along with a 4-5U chassis + rails + multiple sub-50 decibel large-format 120-180mm fans. Systems with high RPM 40-80mm axial screamers belong in a proper colocation facility.</p>
<p><img src="/content/images/2026/01/GPT-03-EOY2025-1222-153913-1.png" alt=""></p>
<h4 id="how-about-that-homelab---is-it-in-a-constant-state-of-flux">How about that Homelab - is it in a constant state of flux?</h4>
<p>Yes, mostly. It&rsquo;s often helpful for proof of concept tests, hypothesis validation, and running benchmarks without having to drive to the DC or go back and forth with Remote Hands requests. Plus, lots of fun going on with hardware at home, but sometimes results in broken nails 😔.</p>
<p><img src="/content/images/2026/01/GPT-DC-EOY2025-1025-00.png" alt=""></p>
<p>Messy cables? Sometimes. Labels? Sometimes.</p>
<p><img src="/content/images/2026/01/GPT-DC-EOY2025-1215-01.jpg" alt=""></p>
<p>The homelab is often rebuilt: storage devices, fiber, dac, cables, and test clusters revised.</p>
<h5 id="homelab-sure-but-how-about-those-colocation-photos-instead">Homelab, sure&hellip; but how about those colocation photos instead?</h5>
<p>As we&rsquo;ve seen, some of the server hardware lives at home in my 25U shorty-racks, some is <a href="https://he.net">across the bay at a datacenter</a> where big-loud machines require CRAC style cooling, and some of it is spread across the globe at other colocation facilities where The Providers have megawatt and gigawatt infra capacity. My personal infrastructure is a hybrid design, utilizing everything from embedded systems to multi-GPU hosts to public-cloud virtual machines&hellip; so, let&rsquo;s see a bit more&hellip;</p>
<ul>
<li>Recent datacenter photos: <a href="https://prose.winterschon.com/a-recent-datacenter-colo-visit/">https://prose.winterschon.com/a-recent-datacenter-colo-visit/</a></li>
</ul>
<hr>
<h3 id="your-chat-style">Your Chat Style</h3>
<p>The analysis says&hellip; well, it&rsquo;s fairly accurate for a description of being in-person as well as at the keyboard during remote meetings or daily chats.</p>
<p>Technical or otherwise, usually this is consistent. I&rsquo;m often chatty, verbose, attentive, talkative, opinionated, even positively bubbly at times. Unless you catch me on a day where those qualities are supplanted by the clouds of quietly recalcitrant moods - the type which are grounded on a dualistic view of existence best described as Stoicistic-Nihilism, having been sourced from far too many post-traumatic stress events endured.</p>
<blockquote>
<p>Your Chat Style: Direct, technically precise, often layered with humor and a critical edge, mixing structured reasoning with conversational spontaneity and sharp observational wit.</p>
</blockquote>
<p><img src="/content/images/2026/01/GPT-04-EOY2025-1222-153913-1.png" alt=""></p>
<hr>
<h3 id="your-2025-chat-stats">Your 2025 Chat Stats</h3>
<p>Hold on now. I&rsquo;ve used em dashes since 6th grade English class—so if seeing those in my writings is giving an impression that I use LLMs for all of my authoring is quite incorrect. For all of <a href="https://www.theringer.com/2025/08/20/pop-culture/em-dash-use-ai-artificial-intelligence-chatgpt-google-gemini">those people who don&rsquo;t like them</a> I have a solution: go to the settings section and set your rules and move on with your life. 😏</p>
<ul>
<li><strong>Total Chats</strong>: 720</li>
<li><strong>Messages sent</strong>: 4,861 (not tokens, messages)</li>
<li><strong>Chattiest day</strong>: September 5th (why? we&rsquo;ll need to see&hellip;)</li>
<li><strong>Images generated</strong>: 3 (Sora kinda sucks)</li>
<li><strong>Em-Dashes &ldquo;Exchanged&rdquo;</strong>: 1,882</li>
<li><strong>Top Messages Sent</strong>: 1% (percentile)</li>
</ul>
<p>Regardless of those stats, even with my use of ChatGPT&rsquo;s advancements with their &ldquo;Pro Account&rdquo;, most of my Ai/ML occurs on self-made infrastructure. I don&rsquo;t rely on closed source, I don&rsquo;t like closed source, and I don&rsquo;t like non-democratized intelligence services that are just in it for profit. My career was built on Open Source and this current infra uses tooling like Ollama, Open-WebUI, vLLM, llama.cpp, CUDA, PyTorch, ROCm, and many other examples of collaborative ingenuity - free to use, free to improve, so please contribute if you can.</p>
<p><img src="/content/images/2026/01/GPT-05-EOY2025-1222-153913-1.png" alt=""></p>
<hr>
<h3 id="three-big-themes-of-2025">Three Big Themes of 2025</h3>
<ol>
<li><strong>Building Ultra-Low-Latency Systems</strong> (true)</li>
<li><strong>Experimenting, Measuring, Refining</strong> (true)</li>
<li><strong>Engineering Meets Everyday Life</strong> (true)</li>
</ol>
<p><img src="/content/images/2026/01/GPT-06-EOY2025-1222-153913-1.png" alt=""></p>
<hr>
<h2 id="thoughts-on-2026-ai-industry-trends--rules">Thoughts on 2026, Ai Industry Trends != Rules</h2>
<p>Working in the Ai/HPC/ML industry, an observable fact is that the majority of consumer-facing Ai companies are still trying to figure out this new landscape, how it works, why anyone should care, and how to monetize whatever it is that they&rsquo;re focused on.</p>
<p>Most will repeat the errors of the past, most will fail, most will malign the tech while misunderstanding nearly everything about the topic; and that&rsquo;s fine. That&rsquo;s the routine in Silicon Valley, but it doesn&rsquo;t have to be.</p>
<ol>
<li><a href="https://cansel-soergens.com/2022/08/01/okr-for-complex-problems/">We cannot solve today&rsquo;s problems with yesterday&rsquo;s methods</a>, and that is a simple fact. We need the core technologies involved with Ai in order to resolve the massive amount of tech debt from earlier generations, but we need to stop expecting the same success from the same methods from the past; this is not the same world as 10, 20, or even 5 years ago.</li>
<li>The current anti-Ai mentality in mass-media is occurring despite companies like IBM, Cray, Fujitsu, BullSequana, and a handful of others with <a href="https://top500.org/lists/top500/2025/11/highs/">Top-500 dominant postures</a> being focused on Ai-enabled Supercomputing, HPC, and acceleration hardware domains for well over two decades. These clusters have been active at research facilities with names like <a href="https://home.cern/news/press-release/cern/cern-leads-new-european-community-initiative-supercomputing">CERN</a>, <a href="https://ats.org/our-impact/rosman-center-fuels-technion-supercomputing/">Technion</a>, and of course the DoD and Military labs. These clusters keep us safe, they advance human understanding, assist with solving otherwise unsolvable problems, and are used to maintain the systems and functions our current world relies on for security and the advancement of human potential.</li>
<li>Ai is not just chatbots, it&rsquo;s not limited to multi-modal agentic buzz-words, but that&rsquo;s a tangent for another day. Datacenters are not ruining the world like mass-destruction of rainforests just so people can eat more cows. Conversely, we have an entire section of the Supercomputing industry <a href="https://top500.org/lists/green500/">focused on green energy and resource efficiency</a>. Medical advancements, brain research, climate science and modeling, cancer research, etc&hellip; all of this is and has been advanced by Ai - but it&rsquo;s not from the consumer side and it&rsquo;s not how the media presents the information. Gosh, I wonder what incentive the media has to engage in such maligning tactics?</li>
</ol>
<h3 id="how-do-we-move-forward">How Do We Move Forward?</h3>
<p>In spite of or despite anti-Ai sentiments, while the public-facing corporate marketing landscape fights for <em>&ldquo;Consumer Economy Dominance&rdquo;</em>, engineers and architects like myself are busy in the background innovating with <em>(sometimes our own)</em> Ai/ML systems and <em>(sometimes our own RSU/ISO/BST* funded)</em> heavy-compute big-data storage infrastructures.</p>
<p>People like myself do this because we love it <em>(mostly, nothing is perfect)</em>, and because we want to improve the lives of those around us, not to simply make money and acquire material goods. These skills require compromise, dedication, attention to detail, and a deeply held desire to improve the human condition through personal investment of time, mentoring younger engineers, and the occasional runway.</p>
<h4 id="together-with-the-ais-we-will-build-a-better-ultron">TOGETHER WITH THE AIs WE WILL BUILD A BETTER ULTRON</h4>
<p>Kidding, mostly. <a href="https://marvel.fandom.com/wiki/Ultron_(Earth-616)">Ultron</a> had some good philosophical points, but we&rsquo;re not in Strawberry Fields or the BS about paperclips from unimaginative and uninformed bloggers; this is real life and The Terminator is not around the corner. Pass the espresso and let&rsquo;s check the local-node TTFT and CHRs to see how SkyNet is doing. ❤️</p>
<hr>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>A Recent Datacenter Colo Visit</title>
      <link>https://winterschon.gitlab.io/en/posts/a-recent-datacenter-colo-visit/</link>
      <pubDate>Sat, 06 Dec 2025 06:06:59 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/a-recent-datacenter-colo-visit/</guid>
      <description><![CDATA[<p>A short post with annotated photos should be sufficient for this post. Perhaps more detail later, but the short version is that just about everything in racks 1,2,3 – aka Cab.68, 69, 70 – is going to be mostly upgraded. My hardware has been here for several years and it needs a refresh.</p>
<p>So, where to begin&hellip; let&rsquo;s see&hellip; we start with the <a href="https://www.raptorcs.com/TALOSII/">POWER9</a> at home on my desk, and me looking a wreck in the morning&hellip;</p>
<p><img src="/content/images/2025/12/IMG_20251203_161129_750_960px-1.png" alt=""></p>
<hr>
<p>Where is this wonderful place that brings me so much joy? <a href="https://he.net">Hurricane Electric</a> of course.</p>
<blockquote>
<p>For Silicon Valley datacenter nerds, Hurricane Electric’s Fremont and San Jose facilities are the spiritual home of budget-friendly colo: cabinet and partial-cabinet plans with same-day turn-up, straightforward BGP, and native v6 on a backbone that’s been aggressively peering since the early 2000s, making it a historically significant and still notably affordable place to park gear in the Bay Area.</p>
</blockquote>
<p>And as such&hellip; it&rsquo;s where most of my gear resides. What was once a HomeLab at home has become a situation of _&ldquo;let&rsquo;s move everything into the colo and tell PG$E to suck it on their $300-600/month apartment electric bills <em>(which is physically impossible, they&rsquo;re a proven CA Governor sponsored monopoly)</em>.</p>
<h3 id="tools-and-so-forth">Tools and So Forth</h3>
<p>How about a photo of my lovely <a href="https://www.wera.de/en/tools/highlights-great-tools/textile-boxes/">Wera designed Datacenter tool bag</a>? Yes! It&rsquo;s rugged and strong and doesn&rsquo;t distort with heavy items. Love it. At the top of the photo is whichever purse happened to be brought along that day; Kors or Burbs or Coach or whichever fit size requirements at the time.</p>
<p>Not shown: a squared-rasp-file occasionally required for <em>&ldquo;standardizing&rdquo;</em> the rail mounting holes in those old-ass blue racks. My right hand still has scars from years ago - before owning that rasp to fix the burrs.</p>
<p><img src="/content/images/2025/12/ResizedImage_2025-12-05_20-53-19_10.png" alt=""></p>
<hr>
<h3 id="always-getting-injured-but-thats-ok">Always Getting Injured, but that&rsquo;s OK.</h3>
<p>Now, about those old scars - there are surely new ones periodically. While getting ready for the colo, just standing at the sink with some sheers, cutting&hellip; cutting&hellip; and ohffs that&rsquo;s my finger. Yep, it&rsquo;s definitely deep! Apply pressure! Wrap it tight! Not too tight though&hellip; and what was at my disposal? Paper medical tape and clear plastic industrial packing tape.</p>
<p>FINE. It&rsquo;s FINE. The bleeding mostly stopped, and off we go to the datacenter!</p>
<p><img src="/content/images/2025/12/ResizedImage_2025-12-05_20-53-15_4-1.png" alt=""></p>
<p>done cut my self real bad</p>
<hr>
<h3 id="networking-servers-drives-dpus-and-all-the-other-fun">Networking, Servers, Drives, DPUs, and all the other fun!</h3>
<p>Ok, enough rambling. Here&rsquo;s a photo gallery with annotated pics. Each rack has some major revisions to undergo, which requires planning and documentation updates and all the usual production readiness routines.</p>
<p><img src="/content/images/2025/12/ResizedImage_2025-12-05_20-53-16_5.png" alt=""></p>
<p><img src="/content/images/2025/12/ResizedImage_2025-12-05_20-53-16_6.png" alt=""></p>
<p><img src="/content/images/2025/12/ResizedImage_2025-12-05_20-53-17_7.png" alt=""></p>
<p><img src="/content/images/2025/12/ResizedImage_2025-12-05_20-53-18_8.png" alt=""></p>
<p><img src="/content/images/2025/12/ResizedImage_2025-12-05_20-53-18_9.png" alt=""></p>
<p><img src="/content/images/2025/12/ResizedImage_2025-12-05_20-53-19_11.png" alt=""></p>
<p><img src="/content/images/2025/12/ResizedImage_2025-12-05_20-53-20_12.png" alt=""></p>
<p><img src="/content/images/2025/12/ResizedImage_2025-12-05_20-53-21_13.png" alt=""></p>
<hr>
<h3 id="more-hardware---more-arm64">More Hardware - More ARM64!</h3>
<p>Now you may wonder, where is all of my ARM64 equipment and the other clusters? Those are still in the 2x 25U racks at home – they&rsquo;ll be migrated to the colo as well, once I convert them to use industrial Compact-PCI chassis blade mounts with integrated/redundant power and backplane. I bring you&hellip; the <em>ADLINK cPCIS-2632R 3U Compact PCI chassis.</em></p>
<p><img src="/content/images/2025/12/ADLINK-cPCIS-2632R-CompactPCI.webp" alt=""></p>
<p>Industrial ADLINK cPCIS-2632R CompactPCI</p>
<hr>
<h3 id="sata3-really">SATA3&hellip; Really?</h3>
<p>And we wrap up the day&rsquo;s fun with&hellip; decisions on what to do with these SATA3 SSDs recovered from some old R420 systems&hellip; perhaps the LC922 boxes can use those + some 240GB Intel or Samsung boot drives. These days I never bother with SATA, only SAS or NVMe. <em>HoHumBoringSataSoSlow.</em></p>
<p><img src="/content/images/2025/12/ResizedImage_2025-12-05_20-53-14_2.png" alt=""></p>
<hr>
<h3 id="a-tale-of-two-labs---one-is-real-the-other">A Tale of Two Labs - One is Real, The Other&hellip;</h3>
<p>I love having my own hardware for my own labs. I love not having to rely on a corporation over-promising on lab resources for the architecture design process – real physical hardware which is absolutely required for <em><strong>&ldquo;Proof of Concept Engineering&rdquo;</strong></em>.</p>
<p>As a wise-one once related, not everything can be a <em>Power Point Presentation.</em> Engineers need physical hardware for validation workflows, otherwise it&rsquo;s all just vaporware.</p>
<p>🙉 🙈 🙊</p>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>DPU Cabling and Rack Elevations</title>
      <link>https://winterschon.gitlab.io/en/posts/dpu-cabling-and-rack-elevations/</link>
      <pubDate>Sat, 11 Oct 2025 18:32:15 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/dpu-cabling-and-rack-elevations/</guid>
      <description><![CDATA[<p>Generally when deploying DAC for inter-rack network connections, particularly the quad-breakout heavy gauge Mellanox type, I&rsquo;ll go with the RU waterfall–fanout method. If I&rsquo;m using regular fiber-optics and MMF/SMF then the calculations sometimes change, depending on whether those are multi-lane MPO to single-port fanouts or port-to-port direct connections. Anyway, those acronyms aside, let&rsquo;s move on.</p>
<p>In preparation for a hardware refresh and much needed colocation visit, I&rsquo;ve ordered additional Mellanox DPUs. Those require a few additional cables to augment the existing hardware stockpile. I already have some 100G to 4x 25G breakouts, but not enough, and not in the correct lengths. Yay for ebay, all acquired for under $100 as <em>&ldquo;new old stock&rdquo;</em>.</p>
<h3 id="what-do-those-dpus-look-like">What do those DPUs look like?</h3>
<p>Well, for starters they don&rsquo;t look exactly like these old ConnectX-3 QDR Infiniband NICs but the DAC are similar. Mellanox changed their heatsink aesthetic along the way, and the heatsinks are far larger on the newer chipsets, with no less cooling required (~200+ LFM).</p>
<p><img src="/content/images/2025/10/eva-mellanox-QDR-Infiniband.960px-1.png" alt=""></p>
<p>Mellanox ConnectX-3 Infiniband NICs and QDR DAC from ~2015, photo circa 2022</p>
<p>Once the DPUs arrive - <em>which is supposed to be today</em> - I&rsquo;ll take some photos and clean all of the PCBs and traces and slot connectors. In the interim, here&rsquo;s the eBay photo for reference.</p>
<p><img src="/content/images/2025/10/mellanox-bluefield2.png" alt=""></p>
<p>The big question&hellip; spend precious time with the R630 cluster in cab68, remove their ConnectX-4 Dual-Port 100G NICs, or install the BF2 DPUs to the cluster of IBM LC922 POWER9 systems in cab70&hellip; hmmmm.. 🤔 This decision will not be completed today. So, let&rsquo;s think about cable maps and rack units.</p>
<h3 id="heres-a-lazy-ascii-diagram">Here&rsquo;s a lazy ASCII diagram</h3>
<p>Showing three lengths of DAC being used for rack-height designated connections, each cable SKU being 0.5M longer/shorter to account for the destination system&rsquo;s location. DAC is heavy, so any time we can make the cable runs shorter we&rsquo;ll (perhaps marginally) reduce latency while reducing load on the rack-cabling organizers, and generally resulting in a cleaner layout. The following diagram is not to scale for either cab68 or cab70, it simply shows how the waterfall method uses length-based drops.</p>
<pre tabindex="0"><code>+----------------------------------------------------------+
| RU42 | [Leaf Switch, QSFP28/56]                          |
|      |  [P01..P16]                                       |
|      |     |                                             |
|      |     +-DAC-1 1.5m ——————————&gt; [RU38] Server-A      |
|      |     +-DAC-2 2.0m ————————————&gt; [RU32] Server-B    |
|      |     +-DAC-3 2.0m ————————————&gt; [RU26] Server-C    |
|      |     +-DAC-4 2.5m ———————————————&gt; [RU20] Server-D |
+----------------------------------------------------------+

Labeling scheme:
  Leaf ports: P01–P16 (logical)
  Designators: 4x 25G lanes per 100G QSFP28 port (physical)
  Servers: A,B,C,D with SFP28 1–4 (A-1, A-2, A-3, A-4)
  Cables: DAC-1..4 with length tag (DAC-3 2.0m)
</code></pre><hr>
<h2 id="where-are-these-new-dac">Where are these new DAC?</h2>
<p>On their way&hellip; hopefully sooner than the stated arrival.</p>
<p><img src="/content/images/2025/10/ebay-dac-order.960px.png" alt=""></p>
<hr>
<h2 id="update-guess-what-showed-up">[update] Guess What Showed Up?</h2>
<p>One of the correct SKU with correct firmware and PCB revision <em>(MBF2H332A-AECOT Rev-C1 2022-02-15)</em>, and three of the same SKU without the correct firmware or PCB revision. So, three of them will not work for this project, and in an ideal world the vendor will reship the correct ones quickly.</p>
<p><img src="/content/images/2025/10/Bluefield2-Four-Shipped-SideSide.960px.png" alt=""></p>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>Serial RS232 &#43; Crossover Keystones</title>
      <link>https://winterschon.gitlab.io/en/posts/serial-rs232-crossover-keystones/</link>
      <pubDate>Sat, 20 Sep 2025 22:07:07 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/serial-rs232-crossover-keystones/</guid>
      <description><![CDATA[<p>HomeLab, Networking, Cables&hellip; let&rsquo;s look at the requirements for building custom keystone jacks and RS232 serial cables. A minor discussion of the core components is necessary before looking at the technical aspects.</p>
<p>This post was written over a series of months, initially as lab notes, with some bits and bytes added each time the tools come out or the patch panels are rewired. While perhaps not a common task, hopefully the knowledge finds someone else looking for these solutions.</p>
<h2 id="switch-port-system-roles">Switch-Port System Roles</h2>
<p>This post discusses several types of connections and signals conversion in a field where the list of potential operating modes is prone to complexity. Brands involve APC, Avocent, Blackbox, Cisco, Cyclades, Moxa, Netshelter, OpenGear, Vertiv, and more - but here in my HomeLab and in the enterprises in which I&rsquo;ve worked, there&rsquo;s a common requirement for critical equipment to talk to a System Infrastructure Manager system or OOB device.</p>
<h3 id="system-infrastructure-manager">System Infrastructure Manager</h3>
<p>Featured in the post&rsquo;s header image, I&rsquo;m using Blackbox for OOB services, but these specs are matched by various brands in similar price points.</p>
<p><strong>Device:</strong> BlackBox model LES1248a out‑of‑band (OOB) connection manager<br>
<strong>Specs</strong>: 48‑port, 1U, dual-PSU, dual-LAN, cellular 3G and POTS optional</p>
<p><strong>Provided Features</strong></p>
<ol>
<li>Remote access services using web-based serial console interface for infrastructure devices (switches, routers, PDUs, UPS, etc).</li>
<li>Centralizes remote‑management via multi-protocol connections and bridging between serial devices and user-facing network services.</li>
<li>Access‑control lists (ACLs) and role‑based access control (RBAC)</li>
<li>Monitoring, logging, and alerting</li>
</ol>
<h4 id="reference-generic-pin-mapping-for-8p8c-rj45">Reference: Generic Pin Mapping for 8P8C RJ45</h4>
<p>This represents the usual 8P8C RJ45 connector layout, with pin usage according to different serial standards. While we are focused on RS232, it can be helpful for visualization purposes to see how other standards are implemented.</p>
<table>
  <thead>
      <tr>
          <th>Pinout</th>
          <th>EIA‑232</th>
          <th>EIA‑422</th>
          <th>EIA‑485 Full Duplex</th>
          <th>EIA‑485 Half Duplex</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1 (in)</td>
          <td>DCD</td>
          <td></td>
          <td></td>
          <td></td>
      </tr>
      <tr>
          <td>2 (out)</td>
          <td>RTS</td>
          <td>TxD+</td>
          <td>TxD</td>
          <td>DATA+</td>
      </tr>
      <tr>
          <td>3 (in)</td>
          <td>DSR</td>
          <td></td>
          <td></td>
          <td></td>
      </tr>
      <tr>
          <td>4 (out)</td>
          <td>TxD</td>
          <td>TxD‑</td>
          <td>TxD‑</td>
          <td>DATA‑</td>
      </tr>
      <tr>
          <td>5 (in)</td>
          <td>RxD</td>
          <td>RxD+</td>
          <td>RxD+</td>
          <td></td>
      </tr>
      <tr>
          <td>6</td>
          <td>GND</td>
          <td>GND</td>
          <td>GND</td>
          <td>GND</td>
      </tr>
      <tr>
          <td>7 (in)</td>
          <td>CTS</td>
          <td>RxD‑</td>
          <td>RxD‑</td>
          <td></td>
      </tr>
      <tr>
          <td>8 (out)</td>
          <td>DTR</td>
          <td></td>
          <td></td>
          <td></td>
      </tr>
  </tbody>
</table>
<hr>
<h2 id="working-with-keystone-connectors">Working with Keystone Connectors</h2>
<p>Those 48 ports aren&rsquo;t going to fill themselves up without some occasional head scratching along the lines of..</p>
<blockquote>
<p><em>Q: &ldquo;How can I connect this RJ12 RS232 based APC PDU to a RJ45 RS232 infrastructure manager?&rdquo;</em></p>
</blockquote>
<blockquote>
<p>A: You&rsquo;re going to have to convert the pin-out for an RJ12 cable to the expected pin-map of an RJ45 RS232 rollover cable.</p>
</blockquote>
<p>Great. I have those requirements!</p>
<p><img src="/content/images/2025/09/Serial-Cables-IMG_0996.png" alt=""></p>
<p>Let&rsquo;s see the various pin and cable maps involved with some common use cases. We&rsquo;ll get to the RJ12 content, but let&rsquo;s see standard mappings first.</p>
<h3 id="1-standard-ethernet-8p8c-straight-straight">1) Standard Ethernet, 8P8C Straight-Straight</h3>
<p>These are simple and have no pin conversion to map. This is a basic reference only, there&rsquo;s nothing to do.</p>
<table>
  <thead>
      <tr>
          <th>J1 (Keystone Front)</th>
          <th>J2 (Keystone Back)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>J1‑1 →</td>
          <td>J2‑1</td>
      </tr>
      <tr>
          <td>J1‑2 →</td>
          <td>J2‑2</td>
      </tr>
      <tr>
          <td>J1‑3 →</td>
          <td>J2‑3</td>
      </tr>
      <tr>
          <td>J1‑4 →</td>
          <td>J2‑4</td>
      </tr>
      <tr>
          <td>J1‑5 →</td>
          <td>J2‑5</td>
      </tr>
      <tr>
          <td>J1‑6 →</td>
          <td>J2‑6</td>
      </tr>
      <tr>
          <td>J1‑7 →</td>
          <td>J2‑7</td>
      </tr>
      <tr>
          <td>J1‑8 →</td>
          <td>J2-8</td>
      </tr>
  </tbody>
</table>
<hr>
<h3 id="2-cisco-rollover-8p8c-switch-crossover">2) Cisco Rollover, 8P8C Switch-Crossover</h3>
<p>Standard rollover cable pin-map. In this case it&rsquo;s what we want to use when connecting a Cisco style switch to our Blackbox (both with RJ45 RS232 ports).</p>
<table>
  <thead>
      <tr>
          <th>Pin</th>
          <th>Signal</th>
          <th>Direction</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td>DCD</td>
          <td>in</td>
      </tr>
      <tr>
          <td>2</td>
          <td>RTS</td>
          <td>out</td>
      </tr>
      <tr>
          <td>3</td>
          <td>DSR</td>
          <td>in</td>
      </tr>
      <tr>
          <td>4</td>
          <td>TxD</td>
          <td>out</td>
      </tr>
      <tr>
          <td>5</td>
          <td>RxD</td>
          <td>in</td>
      </tr>
      <tr>
          <td>6</td>
          <td>GND</td>
          <td><em>(none)</em></td>
      </tr>
      <tr>
          <td>7</td>
          <td>CTS</td>
          <td>in</td>
      </tr>
      <tr>
          <td>8</td>
          <td>DTR</td>
          <td>out</td>
      </tr>
  </tbody>
</table>
<h4 id="keystone-pins-8p8c-switch-crossover">Keystone Pins, 8P8C Switch-Crossover</h4>
<p>My patch panels use keystone jacks to simplify things, and they ship with straight-through RJ45-RJ45 connectors which do not change the wiring. That&rsquo;s fine in some cases, but let&rsquo;s see what we need to do to build a custom crossover keystone jack.</p>
<table>
  <thead>
      <tr>
          <th>J1 (BlackBox side)</th>
          <th>J2 (Cisco side)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>J1‑2 (RTS) →</td>
          <td>J2‑8 (CTS)</td>
      </tr>
      <tr>
          <td>J1‑3 (DSR) →</td>
          <td>J2‑2 (DTR) (optional)</td>
      </tr>
      <tr>
          <td>J1‑4 (TxD) →</td>
          <td>J2‑6 (RxD)</td>
      </tr>
      <tr>
          <td>J1‑5 (RxD) →</td>
          <td>J2‑3 (TxD)</td>
      </tr>
      <tr>
          <td>J1‑6 (GND) →</td>
          <td>J2‑4 (GND)</td>
      </tr>
      <tr>
          <td>J1‑7 (CTS) →</td>
          <td>J2‑1 (RTS)</td>
      </tr>
      <tr>
          <td>J1‑8 (DTR) →</td>
          <td>J2‑7 (DSR)</td>
      </tr>
      <tr>
          <td>J1‑1 (DCD) →</td>
          <td>— (no connection to J2)</td>
      </tr>
  </tbody>
</table>
<hr>
<h3 id="3-apc-pdu-conversion-6p6c-rj12--8p8c-rj45">3) APC PDU Conversion, 6P6C RJ12 → 8P8C RJ45</h3>
<ul>
<li>APC PDU side: 6P6C RJ12 connector with grey ethernet cable</li>
<li>Blackbox side: 8P8C RJ45 connector with grey ethernet cable</li>
</ul>
<h3 id="rj12-6p6c-connector-for-apc-940-0144a">RJ12 6P6C Connector for APC (940-0144A)</h3>
<p>While APC has more than one RJ12 connector on their products, this one is the most common from my SKU usage in the enterprise.</p>
<table>
  <thead>
      <tr>
          <th>Pin</th>
          <th>Signal</th>
          <th>Direction / Notes</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td>—</td>
          <td>No connection (NC)</td>
      </tr>
      <tr>
          <td>2</td>
          <td>GND</td>
          <td>Ground</td>
      </tr>
      <tr>
          <td>3</td>
          <td>TX</td>
          <td>Serial transmit <strong>to</strong> peer</td>
      </tr>
      <tr>
          <td>4</td>
          <td>RX</td>
          <td>Serial receive <strong>from</strong> peer</td>
      </tr>
      <tr>
          <td>5</td>
          <td>GND</td>
          <td>Ground</td>
      </tr>
      <tr>
          <td>6</td>
          <td>—</td>
          <td>No connection (NC)</td>
      </tr>
  </tbody>
</table>
<h3 id="keystone-pins-6p6c-rj12-for-apc-pdu">Keystone Pins, 6P6C RJ12 for APC PDU</h3>
<p>This is where things get fun? We have an 8-pin cable on both sides of the jack, but only 4 pins are needed on the APC RJ12 side. Look closely and plan ahead when you&rsquo;re chopping wires and punching connectors.</p>
<p><strong>Rj45 Blackbox View</strong></p>
<table>
  <thead>
      <tr>
          <th>J1 (BlackBox side)</th>
          <th>J2 (APC side)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>J1‑1 (DCD)</td>
          <td>— <em>(no connection to J2)</em></td>
      </tr>
      <tr>
          <td>J1‑2</td>
          <td>— <em>(no connection to J2)</em></td>
      </tr>
      <tr>
          <td>J1‑3</td>
          <td>— <em>(no connection to J2)</em></td>
      </tr>
      <tr>
          <td>J1‑4 (TxD – out)</td>
          <td>J2‑4 (RxD – input to APC)</td>
      </tr>
      <tr>
          <td>J1‑5 (RxD – in)</td>
          <td>J2‑3 (TxD – output of APC)</td>
      </tr>
      <tr>
          <td>J1‑6 (GND)</td>
          <td>J2‑2 (GND) <strong>and</strong> J2‑5 (GND)</td>
      </tr>
      <tr>
          <td>J1‑7</td>
          <td>— <em>(no connection to J2)</em></td>
      </tr>
      <tr>
          <td>J1‑8</td>
          <td>— <em>(no connection to J2)</em></td>
      </tr>
  </tbody>
</table>
<p><strong>Rj12 APC View</strong></p>
<table>
  <thead>
      <tr>
          <th>APC RJ12 (6P6C)</th>
          <th>Console RJ45 (8P8C)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>pin 1 –</td>
          <td>–</td>
      </tr>
      <tr>
          <td>pin 2 GND</td>
          <td>pin 4 GND</td>
      </tr>
      <tr>
          <td>pin 3 TX →</td>
          <td>pin 6 RXD (into console)</td>
      </tr>
      <tr>
          <td>pin 4 RX ←</td>
          <td>pin 3 TXD (out of console)</td>
      </tr>
      <tr>
          <td>pin 5 GND</td>
          <td>pin 5 GND (optional second ground)</td>
      </tr>
      <tr>
          <td>pin 6 –</td>
          <td>–</td>
      </tr>
  </tbody>
</table>
<p><strong>USOC (RJ‑12) Pinout</strong></p>
<table>
  <thead>
      <tr>
          <th>Pin (L→R)</th>
          <th>Colour (typical US C)</th>
          <th>Pair</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td>White</td>
          <td>P3</td>
      </tr>
      <tr>
          <td>2</td>
          <td>Black</td>
          <td>P2</td>
      </tr>
      <tr>
          <td>3</td>
          <td>Red</td>
          <td>P1</td>
      </tr>
      <tr>
          <td>4</td>
          <td>Green</td>
          <td>P1</td>
      </tr>
      <tr>
          <td>5</td>
          <td>Yellow</td>
          <td>P2</td>
      </tr>
      <tr>
          <td>6</td>
          <td>Blue</td>
          <td>P3</td>
      </tr>
  </tbody>
</table>
<p><strong>RJ‑45 (T568B) Pinout</strong></p>
<table>
  <thead>
      <tr>
          <th>Pin (L→R)</th>
          <th>Colour (T568B)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1</td>
          <td>White‑Orange</td>
      </tr>
      <tr>
          <td>2</td>
          <td>Orange</td>
      </tr>
      <tr>
          <td>3</td>
          <td>White‑Green</td>
      </tr>
      <tr>
          <td>4</td>
          <td>Blue</td>
      </tr>
      <tr>
          <td>5</td>
          <td>White‑Blue</td>
      </tr>
      <tr>
          <td>6</td>
          <td>Green</td>
      </tr>
      <tr>
          <td>7</td>
          <td>White‑Brown</td>
      </tr>
      <tr>
          <td>8</td>
          <td>Brown</td>
      </tr>
  </tbody>
</table>
<p><em>Both USOC/T568B tables assume the connector tab is facing down and the pins are read left‑to‑right.</em></p>
<h2 id="regarding-flow-control---dsrdtr-assertion">Regarding Flow Control - DSR/DTR Assertion</h2>
<p>Fun times with RS232 sometimes involve flow-control, though often this is set to &ldquo;None&rdquo;, there are more options than None where None is concerned. Let&rsquo;s see why Blackbox offers the following options, given the following debugging scenario:</p>
<h5 id="defining-a-common-flow-control-issue">Defining a Common Flow Control Issue</h5>
<p><strong>Problem</strong>: Blackbox shows incomplete port status*, with no terminal output when connecting via Cisco rollover cable.</p>
<p><em>[*] (&ldquo;RTS | DTR&rdquo; instead of &ldquo;RTS | DSR | DTR | DCD&rdquo;)</em></p>
<h5 id="signal-debugging-workflow">Signal Debugging Workflow</h5>
<table>
  <thead>
      <tr>
          <th>Configuration</th>
          <th>Action</th>
          <th>Purpose</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1. Validate &ldquo;Hardware Flow Control&rdquo;</td>
          <td>Enable sampling</td>
          <td>Detect carrier signals</td>
      </tr>
      <tr>
          <td>2. Pinout Verification</td>
          <td>Check mappings</td>
          <td>Ensure proper signal visibility</td>
      </tr>
      <tr>
          <td>3. Signal Testing</td>
          <td>Use multimeter</td>
          <td>Confirm remote device asserts DSR/DCD</td>
      </tr>
      <tr>
          <td>4. Manual Carrier Assert</td>
          <td>Add loop adapter</td>
          <td>Force carrier presence</td>
      </tr>
  </tbody>
</table>
<h5 id="inspecting-flow-control-modes">Inspecting Flow Control Modes</h5>
<table>
  <thead>
      <tr>
          <th>Configuration</th>
          <th>Result</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>None - Default</td>
          <td>Take no action</td>
      </tr>
      <tr>
          <td>None - Flow control signals unpowered</td>
          <td>FC signal pins explicitly disabled</td>
      </tr>
      <tr>
          <td>Hardware</td>
          <td>(implied: signals are powered)</td>
      </tr>
      <tr>
          <td>Software</td>
          <td>(implied: signals are powered)</td>
      </tr>
      <tr>
          <td>Software - Flow control signals unpowered</td>
          <td>FC signal pins explicitly disabled</td>
      </tr>
  </tbody>
</table>
<ul>
<li><strong>Q: What, surely the two None types are equivalent?</strong></li>
<li><strong>A: They are not equivalent.</strong></li>
</ul>
<p>The port is usable in either <em>&ldquo;None-Type&rdquo;</em> modality <strong>only if TxD/RxD signals are present</strong>. The console server will report <em>&ldquo;No signal data available&rdquo;</em> when the connected Blackbox port is operating in the following states:</p>
<ol>
<li>not powering when it needs power</li>
<li>actively sampling modem-control lines</li>
<li>when the remote device side never asserts them</li>
</ol>
<h4 id="confusions-with-state-mode-usability">Confusions with State-Mode Usability</h4>
<p>Using <em>&ldquo;None - Flow control signals unpowered&rdquo;</em> disables the port&rsquo;s modem-line sensing, which prevents the appliance from reporting DSR/DCD/CTS.</p>
<ul>
<li>Whether or not you can connect over the line depends whether the device has active TxD/RxD connection signals, irrespective of whether Blackbox knows about DSR/DCD/CTS state.</li>
<li>Alternatively, the remote device may never assert DSR/DCD, as many network-console ports don&rsquo;t provide carrier signals, so the server has nothing to report.</li>
</ul>
<hr>
<h2 id="ok-what-else">Ok&hellip; What else?</h2>
<p>Despite many efforts and assumptions, it&rsquo;s a fact that RS232 is not going anywhere any time soon and it remains not simply useful but necessary.</p>
<p>The global view of serial connection usage includes datacenters, industrial automation systems, expansive cellular / broadband / telco networking hardware, mainframe connected terminals, all the way to a near-endless number of embedded systems. Good times, plenty of TxD/RxD signals to go around. 😄</p>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>Sunday Homelab TPM OMGOSH</title>
      <link>https://winterschon.gitlab.io/en/posts/sunday-homelab-tpm-omgosh/</link>
      <pubDate>Sun, 31 Aug 2025 15:08:18 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/sunday-homelab-tpm-omgosh/</guid>
      <description><![CDATA[<p>It&rsquo;s 0721 on a Sunday morning. I&rsquo;m laying on the couch, pondering the facts of existence, still dealing with C19 Nimbus side effects, and going through a mental checklist for #HomeLab tasks which need attention.</p>
<p>During standard weekends, when not afflicted with the covids, all of the following tasks could be completed in a relaxing and reasonable pace. Perhaps two or three.. time will tell. 😌</p>
<ol>
<li>Remove all ephemeral hardware from 25U rack #2</li>
<li>Swap out 4U APC 3kVA UPS for 2U APC 1.5kVA, in 25U rack #2</li>
<li>Move ARM64 cluster from 12U rack to 25U rack #2</li>
<li>Swap 1x APC PDU (metered only) for APC PDU (switched), in 25U rack #1</li>
<li>Validate LACP map on EX3300-48T, rack #2</li>
<li>Validate 40mm fan situation on EX3300-48T, rack #2</li>
<li>Recable 3x 24 port patch panels, rack #2</li>
<li>Deploy 1x 24 port patch panels, rack #1</li>
<li>Replace all fans in 2U net-infra SmartOS node</li>
<li>Finish firmware updates on all APC devices</li>
<li>Upgrade firmware on all managed switches</li>
<li>Validate 5GbE SFP+/BASET optic for FTTH on X710 NIC</li>
<li>Install 3x SM863 SSD boot drives for Talos II Power9</li>
<li>Install 3x 883DCT SSD storage drives for Talos II Power9</li>
<li>Swap 2x10G Intel X550 for 4x25G QL41234 in Talos II</li>
<li>Swap 2x 120mm &amp; add 1x 92mm fans in Talos II</li>
<li>Ident 1000W PSU for EPYC box, needs PMbus</li>
<li>ooooh there&rsquo;s so much more&hellip;</li>
</ol>
<p><img src="/content/images/2025/08/MessyHomeLab-SunnyCA_2025-08-31_07-43-28_1.png" alt=""></p>
<p>rack consolidation strongly needed</p>
<p>Ehrlich gesagt, just look at this mess, and it&rsquo;s on carpet? Even with solid 14 gauge copper grounding straps on every UPS, PDU, ATS, along with GFCI + AFCI isolation breakers, I cannot in good conscience recommend such blasphemy of electrical code compliance concerns.</p>
<p>So, add this to the list: find some manner of solid platform with a grounding-strap for the two 25U racks <em>(12U needs to be elsewhere, byeeeee).</em></p>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>LLM Variants - Purpose Tuned Models</title>
      <link>https://winterschon.gitlab.io/en/posts/llm-variants-purpose-tuned-models/</link>
      <pubDate>Fri, 15 Aug 2025 20:19:05 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/llm-variants-purpose-tuned-models/</guid>
      <description><![CDATA[<p>When deploying local models or when accessing remote API based LLMs with one&rsquo;s tools of choice, there comes a time <em>(and that time is now)</em>, when the options presented are vast and various. One may consider, just give me <em>&ldquo;the default&rdquo;</em>, but there is no default model. These days we have variants, where one LLM has been quantized or re-trained or post-trained or adapted in various ways to fine tune its abilities and focus.</p>
<p>Let&rsquo;s inspect one of my favorites lately, <a href="https://huggingface.co/collections/Qwen/qwen3-67dd247413f0e2e4f653967f">Qwen3-235B</a>. This is not a model that one commonly sees running outside of large compute clusters and supercomputers, because the 235 billion parameters require substantially more resources than most infrastructures have available. Often when we see Qwen3 in-use on not-supercomputers, it&rsquo;s the 32B variant, which can run well enough on a 16GB+ vRAM capable GPU. <a href="https://huggingface.co/Qwen/collections">Querying the models on Huggingface and one will see there are 32B on the low-side all the way to 480B</a> for the supercomputers and research clusters, and many customized ones built from the originals.</p>
<p>Parameter quantity aside, as we&rsquo;re not focused on that at the moment, let&rsquo;s look at the primary high-level differences, as well as low-level technical differences, between LLM variants like &ldquo;Coder&rdquo;, &ldquo;Thinking&rdquo;, &ldquo;Instruct&rdquo;. Over at the <a href="https://cloud.cerebras.ai/">Cerebras Inference Cloud</a> we can use the following types.</p>
<table>
  <thead>
      <tr>
          <th>Qwen3-32B</th>
          <th>Qwen3-235B-Coder</th>
          <th>Qwen3-235B-Instruct</th>
          <th>Qwen3-235B-Thinking</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Base LLM</td>
          <td>Code Generation</td>
          <td>Sequence Executions</td>
          <td>Complex Reasoning</td>
      </tr>
  </tbody>
</table>
<p><img src="/content/images/2025/08/Cerebras-Inference-2025-08-15-124030.png" alt=""></p>
<hr>
<h3 id="high-level-differences">High Level Differences</h3>
<ul>
<li><strong>Base Model</strong>: Generalist, no task specialization.</li>
<li><strong>Coder</strong>: Focuses on <strong>programming efficiency</strong> (e.g., auto-completion, error fixing).</li>
<li><strong>Instruct</strong>: Prioritizes <strong>user safety and conversational alignment</strong> (e.g., chatbots).</li>
<li><strong>Thinking</strong>: Targets <strong>structured reasoning</strong> (e.g., math proofs, logical puzzles).</li>
</ul>
<table>
  <thead>
      <tr>
          <th><strong>Variant</strong></th>
          <th><strong>Purpose</strong></th>
          <th><strong>Users</strong></th>
          <th><strong>Features</strong></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Base</strong></td>
          <td>General-purpose language modeling</td>
          <td>Researchers, Developers</td>
          <td>Broad knowledge coverage, foundational capabilities for text generation</td>
      </tr>
      <tr>
          <td><strong>Coder</strong></td>
          <td>Code generation &amp; understanding</td>
          <td>Software Developers</td>
          <td>Optimized for programming tasks (code completion, debugging, multi-language support)</td>
      </tr>
      <tr>
          <td><strong>Instruct</strong></td>
          <td>Instruction-following for conversational tasks</td>
          <td>End-users, Chatbots</td>
          <td>Aligned with human preferences, safety filters, chat template adherence</td>
      </tr>
      <tr>
          <td><strong>Thinking</strong></td>
          <td>Complex reasoning &amp; step-by-step problem-solving</td>
          <td>Analysts, Researchers</td>
          <td>Enhanced logical reasoning, chain-of- thought generation, multi-step inference</td>
      </tr>
  </tbody>
</table>
<h3 id="low-level-differences">Low Level Differences</h3>
<ul>
<li><strong>Tokenizer</strong>: Coder extends vocabulary for code symbols (e.g., <code>def</code>, <code>-&gt;</code>), while others reuse the base tokenizer.</li>
<li><strong>Fine-Tuning</strong>: Instruct uses RLHF for alignment; Thinking uses process-based rewards for intermediate steps.</li>
<li><strong>Decoding</strong>: Thinking enforces iterative step generation via modified KV-cache management, unlike autoregressive defaults.</li>
<li><strong>Loss Functions</strong>: Coder weights syntax validity; Thinking penalizes incorrect reasoning paths early.</li>
</ul>
<table>
  <thead>
      <tr>
          <th><strong>Variant</strong></th>
          <th><strong>Data</strong></th>
          <th><strong>Arch</strong></th>
          <th><strong>Loss</strong></th>
          <th><strong>Infer</strong></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Base</strong></td>
          <td>General web text, CommonCrawl, books, articles, balanced domain coverage</td>
          <td>Standard Transformer architecture, no task-specific changes</td>
          <td>Standard cross- entropy loss over next-token prediction</td>
          <td>Autoregressive generation; neutral tone, no task- specific formatting</td>
      </tr>
      <tr>
          <td><strong>Coder</strong></td>
          <td>Code repositories, 30%+ code data</td>
          <td>Extended tokenizer with code-specific tokens; syntax-aware positional embeddings</td>
          <td>Weighted cross- entropy loss favoring syntactically valid code constructs</td>
          <td>Generates code with proper indentation, supports infilling</td>
      </tr>
      <tr>
          <td><strong>Instruct</strong></td>
          <td>Instruction-response pairs (self-instructed data, human- annotated dialogues)</td>
          <td>No structural changes; fine-tuned attention layers for instruction parsing</td>
          <td>SFT + RLHF, Proximal Policy Optimization with safety rewards</td>
          <td>Outputs structured responses</td>
      </tr>
      <tr>
          <td><strong>Thinking</strong></td>
          <td>Reasoning datasets (GSM8K, MATH, HotpotQA), iterative problem-solving examples</td>
          <td>Added &ldquo;reasoning head&rdquo; for intermediate step prediction; modified KV-cache for iterative decoding</td>
          <td>Process-based supervision loss (rewarding correct intermediate steps)</td>
          <td>Explicitly outputs reasoning steps (eg, &ldquo;Step 1: &hellip; Step 2: &hellip;&rdquo;) before final answer</td>
      </tr>
  </tbody>
</table>
<h3 id="use-case-mapping">Use Case Mapping</h3>
<ul>
<li>Need <strong>code generation</strong>? → <strong>Coder</strong></li>
<li>Building a <strong>chatbot</strong>? → <strong>Instruct</strong></li>
<li>Solving <strong>multi-step problems</strong>? → <strong>Thinking</strong></li>
<li>Researching <strong>foundational capabilities</strong>? → <strong>Base</strong></li>
</ul>
<h3 id="visualizing-decisions-via-flowchart"><strong>Visualizing Decisions via Flowchart</strong></h3>
<p>Visualizes the evolution from base model to specialized variants, emphasizing technical divergence points, which you can see in the live rendering panel over at <a href="https://mermaid.live/edit#pako:eNpdk1tv2jAUgP_KkSvtZQkjQAhk0qRCqDZpnbSWpzV9MMkxWE3syHbaUuC_7zhQxspL8OX7fC72jhW6RJayteHNBpZZroB-1w-_X1ANw8EwnsGMW4Rb2lY9Qhh-2y8NlwpL0ArWqNDwCl5wBQ5f3R5mF-TjSdZRn2FOCii0aVoLn8DpJ1TyDQ0Qh8pKrfYwv6BDv998cNzfLL_c_fx-4w-XyjrTFo5Iu4fsEv1xWvpA3yG3Wkm1hpI7ysr5QKSjFJx8RiiRikGre1hcypYbqZ5ommRH3czrYBY95OzecVVyU0JhtLUhKmd0s4WKBnmufmHrfHmkEmhQFZizU0TzTjH3Cp9maBsspJDFsSyevd8qx19D_sINAtYrLH1o9mzIOkPmDV1BeCXXqqYAPMsFui0IWVFu_5BFhyw65FyJDfLSIw6bcLUNLX2pU0vQrWta17FHuqi4tRkKWPn7QO4qvcKxSIQIqNgUdnoVTaZ9Ib5-2P_MjeTKnRAxFgLLMxIPilHELxG4DmbdGf9NzoMsWLyraIUFdGVlyVLqMwasRlNzP2Q7T-XMbbCmcqf0l_rzlLNcHYhpuPqjdf2OGd2uNywVvLI0ahu6FphJTo-hPs9S4-geznWrHEunnYKlO_bK0jjpjSfJKOkPJoP-YBonAduyNJoOe3HSHw2jQTKMptF4dAjYW3dovzdJ4oBhKZ02t8eH172_w1_u1yG-">Mermaid.Live</a></p>
<p><img src="/content/images/2025/08/qwen-models-mermaid.png" alt=""></p>
<pre tabindex="0"><code>graph TD
    A[Qwen3-235B Base Model] --&gt;|Trained on general web text| B[Qwen3-235B]
    A --&gt;|+ Code corpus &amp; tokenizer extension| C[Qwen3-235B-Coder]
    A --&gt;|+ SFT/RLHF on instructions| D[Qwen3-235B-Instruct]
    A --&gt;|+ Reasoning datasets &amp; iterative decoding| E[Qwen3-235B-Thinking]

    B --&gt; B1[&#34;Standard cross-entropy loss\nNeutral inference&#34;]
    C --&gt; C1[&#34;Code-specific tokens\nSyntax-aware embeddings&#34;]
    D --&gt; D1[&#34;RLHF alignment\nSafety filters&#34;]
    E --&gt; E1[&#34;Reasoning head\nStep-by-step CoT output&#34;]

    classDef base fill:#e6f7ff,stroke:#1890ff;
    classDef variant fill:#f6ffed,stroke:#52c41a;
    class A,B base;
    class C,D,E variant;
</code></pre><hr>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>Saturday Morning Inference</title>
      <link>https://winterschon.gitlab.io/en/posts/saturday-morning-inference/</link>
      <pubDate>Sat, 09 Aug 2025 20:22:35 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/saturday-morning-inference/</guid>
      <description><![CDATA[<p>Less prose this morning, more focus on home-lab and new OSS tech.</p>
<h3 id="what-is-lora-and-why-is-it-not-lorawan">What is LoRA and why is it not LoRaWAN?</h3>
<p>It&rsquo;s an acronym for &ldquo;Low Rank Adaptation&rdquo;, which is an optimization method for LLMs that can dramatically reduce resource requirements while optimizing for post-training re-trains.</p>
<ul>
<li>Neural Nets: <a href="https://arxiv.org/abs/2106.09685">LoRA: Low-Rank Adaptation of Large Language Models</a></li>
<li>WAN Nets: <a href="https://lora-alliance.org/about-lorawan/">LoRaWAN is a Low Power, Wide Area (LPWA)</a></li>
</ul>
<hr>
<h3 id="what-is-auto-round-and-why-should-we-care">What is Auto-Round and why should we care?</h3>
<p>Another neural-network optimization tool, specifically for quantizing large language models into <em>&ldquo;still large but optimized for specific precision&rdquo;</em>. Intel released a <code>Q4KS</code> quantized version of the <code>GPT-OSS-20B</code> <a href="https://huggingface.co/Intel/gpt-oss-20b-gguf-q4ks-AutoRound">model on Huggingface for those who want a high-performance model on lower resource</a> hardware.</p>
<ul>
<li>This algorithm helps engineers run models originally intended for Very Large Systems With Lots of VRAM to run on lower-spec systems which are often optimized on <code>Tokens/sec per Watt (Tk/s/W)</code>.</li>
<li>Additionally, it allows models which are expected to run on Nvidia GPUs to run on alternate hardware (CPU, HPU, etc), <a href="https://github.com/intel/auto-round?tab=readme-ov-file#-key-features">multiple calibration datasets, mixed-bit Quantizing, etc.</a></li>
<li>Reference: <a href="https://github.com/intel/auto-round">Intel Auto-Round</a> Quantizer</li>
</ul>
<hr>
<h3 id="64gb-vram-gpus-vs-cerebras-cloud">64GB vRAM GPUs vs Cerebras Cloud</h3>
<p>The new big news this week has been OpenAi&rsquo;s release of two OSS models, <code>GPT-OSS-20B</code> and <code>GPT-OSS-120B</code>, which are quite exciting for technical reasons which I won&rsquo;t go into right now.</p>
<p>So, a quick comparison with running <code>GPT-OSS-20B</code> on a local-at-home GPU host vs the <a href="https://www.cerebras.ai/news/cerebras-helps-power-openai-s-open-model-at-world-record-inference-speeds-gpt-oss-120b-delivers">inference cloud at work</a> - where we&rsquo;re running the <code>GPT-OSS-120B</code> variant of the model <em>(feel free to try that here:</em> <a href="https://cloud.cerebras.ai/"><em>https://cloud.cerebras.ai</em></a><em>)</em></p>
<p>First, a screenshot of the local system running Open-WebUI with Ollama backend. See the hover-box for the tokens/sec performance values.</p>
<p><img src="/content/images/2025/08/GPT-OSS-20b_Ollama-Tokens-Sec_2025-08-09-112833.png" alt=""></p>
<p>Token results for GPT-OSS-20B running on a 64GB vRAM local@home system</p>
<p>And then we see the tokens per second for the Cerebras cluster, running <code>GPT-OSS-120B</code> variant of the model, which is executing on millions of cores for the cluster and multi-TB of vRAM (equivalent terms).</p>
<p><img src="/content/images/2025/08/GPT-OSS-120b_Cerebras-Tokens-Sec_2025-08-09-1258-1.png" alt=""></p>
<p>Token results for GPT-OSS-120B running on the public Cerebras cluster</p>
<table>
  <thead>
      <tr>
          <th>Cerebras UI Term</th>
          <th>Corresponds to</th>
          <th>Explanation</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Input tokens/s</strong></td>
          <td><strong>Prompt tokens/s</strong></td>
          <td>Speed of processing the input/context tokens (prefill phase)</td>
      </tr>
      <tr>
          <td><strong>Output tokens/s</strong></td>
          <td><strong>Response tokens/s</strong></td>
          <td>Speed of generating new tokens sequentially (generation phase)</td>
      </tr>
      <tr>
          <td><strong>Total tokens/s</strong></td>
          <td><strong>Combined metric</strong></td>
          <td>(Input + Output tokens) / total processing time</td>
      </tr>
  </tbody>
</table>
<hr>
<p>Using the same prompt query we have token rates for the local development system:</p>
<table>
  <thead>
      <tr>
          <th>Prompt Token/sec</th>
          <th>Response Token/sec</th>
          <th>System</th>
          <th>Cores</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>541/s</td>
          <td>36/s</td>
          <td>4x A4000</td>
          <td>44,352</td>
      </tr>
      <tr>
          <td>22,858/s</td>
          <td>1,394/s</td>
          <td>multi-CS-3</td>
          <td>millions</td>
      </tr>
  </tbody>
</table>
<p>Big numbers! 😃</p>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>Good Morning from the Glossary</title>
      <link>https://winterschon.gitlab.io/en/posts/good-morning-from-the-glossary/</link>
      <pubDate>Fri, 08 Aug 2025 14:19:44 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/good-morning-from-the-glossary/</guid>
      <description><![CDATA[<p>This content has been migrated to the Lexicon page: <a href="https://prose.winterschon.com/lexicon/">https://prose.winterschon.com/lexicon/</a></p>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>Profiles</title>
      <link>https://winterschon.gitlab.io/en/profiles/</link>
      <pubDate>Fri, 13 Jun 2025 04:26:35 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/profiles/</guid>
      <description><![CDATA[<h2 id="the-internet-age-of-days-long-passed">The Internet Age of Days Long Passed</h2>
<p>Yes, quite so, I miss the internet of the &rsquo;90s. The original idealism which prioritized being kind, helpful, welcoming, and infinitely curious about all things technical and complex and challenging.. instead we have mostly an internet where the experience has become &ldquo;garbage in - garbage out&rdquo;, and a wider array of assholerly than I expected to see three decade prior.</p>
<p>Nevertheless, we&rsquo;re no longer in that era, and so here are my modern life accounts from a variety of networks. Often one may find my username existing as <em><strong>&ldquo;winterschon&rdquo;</strong></em>, though my active presence wavers and wanes - periodic silence, staccato quipped sarcasm and critique, and the inevitable return to torrential expressions. Can we have more Gopher, XMPP, USENET, and maybe even IRC + OTR over the ISDN.</p>
<hr>
<h2 id="verification-and-validity-identity-defined">Verification and Validity, Identity Defined</h2>
<p>Generally speaking, if you don&rsquo;t see a profile listed here, then it&rsquo;s probably not a real account of my own. Do not engage and do not inquire to the unknown account - it only feeds the trolls and makes everything worse.</p>
<blockquote>
<p><strong>Ignore the Impersonators, Stalkers, Liars, and the Jüdenhasser Pseudo-Activists</strong></p>
</blockquote>
<p>Specifically, Twitter/X have the most egregious examples <em>(which I am not back-linking), and of course their support team refuses to take those shitheel accounts down)</em>. If in doubt, please contact me on one of the networks below.</p>
<h3 id="can-i-send-you-an-encrypted-email-instead">Can I send you an encrypted email instead?</h3>
<p>Yes, and here is my PGP / GPG key from the MIT Keyserver:</p>
<ul>
<li><a href="https://keys.openpgp.org/vks/v1/by-fingerprint/A3E24F7A3AFE90AAC9DDD82807769C89CD9AD67C">Personal GPG PubKey (A3E24F7A)</a></li>
</ul>
<hr>
<h2 id="the-many-names-of-who-are-you">The Many Names of &lsquo;Who Are You&rsquo;?</h2>
<p>Some people know me by one or two or four different names. I didn&rsquo;t choose this life, so what else is there to say? People get married, divorced, stalked, adopted, disowned, disavowed, etc.. some people go into witness protection programs, some do not. Some get tired of doing so, and some must have online presence for their career - and for some there is simply no other choice.</p>
<h3 id="where-is-madeline">Where is Madeline?</h3>
<p>That&rsquo;s my middle name. If you know me, likely you already know this, and if you know me very well, then you know that you know that you know that I know that you know this already. So double check your double-8, five-by-five, it&rsquo;s too long passed and now&rsquo;s TTGTFG - the endless slog, the Long Slow Distance, bekons just one more belay from the great beyond.</p>
<h3 id="where-is-annaliese">Where is Annaliese**?**</h3>
<p>If you know me extra-more, from the sandstone expanses of Monument Valley, the Canyonlands, all of those falls on El Cap, the backcountry avalances we unstuck-ourselves from, to the summits of Sierra 14&rsquo;ers.. then you may know my <em>&ldquo;what&rsquo;s your wall name?&rdquo;</em>, or perhaps from the portaledges and frozen bivys and smashed scorpions carried-off in your stupid empty tequilla bottle <em>(&ldquo;no glass on the wall, asssssshoooooleeeee!&rdquo;)&hellip;</em> then Annaliese and Anja say hallo and hola and shalom from <em><strong>above and beyond the great so-long</strong></em>. 👋🌄💝</p>
<hr>
<h2 id="industry">Industry</h2>
<ul>
<li><strong>Consulting Services</strong>: <a href="https://consulting.winterschon.com">consulting.winterschon.com</a></li>
<li><strong>Ai Storage/Infra R&amp;D:</strong> <a href="https://yukon.systems">yukon.systems</a></li>
</ul>
<h2 id="networks">Networks</h2>
<ul>
<li><strong>Mastodon (<strong>bridge</strong>)</strong>:@eva@prose.winterschon.com</li>
<li><strong>LinkedIn (<strong>new-acct</strong>)</strong>: <a href="https://linkedin.com/in/eva-winterschon">linkedin.com/in/eva-winterschon</a></li>
<li><strong>SubStack</strong>: <a href="https://substack.com/@winterschon">substack.com/@winterschon</a></li>
<li><strong>Instagram</strong>: <a href="https://www.instagram.com/winterschon/">instagram.com/winterschon</a></li>
</ul>
<h2 id="asynchronous-comms">Asynchronous Comms</h2>
<ul>
<li><strong>Matrix</strong>: <a href="https://matrix.to/#/@winterschon:matrix.org">@winterschon:matrix.org</a></li>
<li><strong>Zoom</strong>: <a href="https://zoom.us/launch/chat?src=direct_chat_link&amp;email=eva@winterschon.com">eva @\ winterschon.com</a></li>
<li><strong>Teams</strong>: <a href="https://teams.microsoft.com/l/chat/0/0?users=eva@winterschon.com">eva @\ winterschon.com</a></li>
</ul>
<h2 id="codes-and-repos">Codes and Repos</h2>
<ul>
<li><strong>GitHub (personal)</strong>: <a href="https://github.com/em-winterschon">github.com/em-winterschon</a></li>
<li><strong>GitHub (startup)</strong>: <a href="https://github.com/yukon-systems">github.com/yukon-systems</a></li>
<li><strong>GitLab</strong>: <a href="https://gitlab.com/winternull">gitlab.com/winternull</a></li>
<li><strong>CodeBerg (self)</strong>: <a href="https://codeberg.org/winterschon">codeberg.org/winterschon</a></li>
<li><strong>CodeBerg (proj)</strong>: <a href="https://codeberg.org/rfc1918">codeberg.org/rfc1918</a></li>
<li><strong>CodeBerg (proj)</strong>: <a href="https://codeberg.org/yukon-systems">codeberg.org/yukon-systems</a></li>
</ul>
<h2 id="dots-of-inconsequence">Dots of (in)Consequence</h2>
<p>Most engineers who come from a <a href="https://www.opengroup.org/membership/forums/platform/unix">UNIX background</a>, and maybe the newer generations who did not grow up using <a href="https://en.wikipedia.org/wiki/Single_UNIX_Specification">literal UNIX®</a> [2], tend to travel their years with at least one personal repo for their range of &lsquo;dot files&rsquo; - configurations for text editors, terminals, terminal emulators, shell configs, and so forth. Maybe that repo started out using UNIX&rsquo;s <a href="https://en.wikipedia.org/wiki/Source_Code_Control_System">SCCS</a>, or the 90s winrar <a href="https://en.wikipedia.org/wiki/Concurrent_Versions_System">CVS</a>, perhaps <a href="https://en.wikipedia.org/wiki/Revision_Control_System">RCS</a>, then <a href="https://en.wikipedia.org/wiki/Subversion_(software)">SVN</a> or <a href="https://en.wikipedia.org/wiki/Mercurial_(software)">Mercurial</a> or <a href="https://en.wikipedia.org/wiki/Fossil_(software)">Fossil</a>, a big-check jaunt with <a href="https://en.wikipedia.org/wiki/Perforce#P4">Perforce</a>, forced to use <a href="https://en.wikipedia.org/wiki/Git">Git</a> (it&rsquo;s not great! quick, back to Perforce P4)!</p>
<p>Well you get the point, there are many ways to deal with challenges wrought by engineering&rsquo;s evolving needs for multiple concurrent and distributed instances of source code control management. I&rsquo;ve used all of the ones listed plus a handful of others, and while Git is less headache than CVS and SVN, it&rsquo;s from the mind of a self-proclaimed dictator for life, and I don&rsquo;t want to use it - but the industry demands ecosystem compatibility. So, the usual bitching aside, here&rsquo;s my current dot-files repo.</p>
<ul>
<li><strong>Dot-Files</strong>: <a href="https://codeberg.org/winterschon/dot-files">codeberg.org/winterschon/dot-files</a></li>
<li><strong>Dot-Blumenkrieg</strong> [3]: <a href="https://codeberg.org/rfc1918/dotfiles-blumenkrieg">codeberg.org/rfc1918/dotfiles-blumenkrieg</a></li>
</ul>
<h2 id="technical-domains">Technical Domains</h2>
<ul>
<li><strong>Hugging Face</strong>: <a href="https://huggingface.co/winterschon">huggingface.co/winterschon</a></li>
</ul>
<hr>
<h2 id="reference-points">Reference Points</h2>
<ul>
<li>[*] If so, please message me via a valid profile from this page and let me know - as there exist impostors who&rsquo;ve stolen my personal photos, professional likeness, and should be dealt with accordingly.</li>
<li>[2] &ldquo;The UNIX® trademark is owned by The Open Group, an industry standards consortium, which acquired it from Novell in 1993. It is used to certify that operating systems comply with the Single UNIX Specification <em>{&ldquo;SUS, that is suss..&rdquo;}</em>. The brand separates the trademark from any single company&rsquo;s code, allowing multiple, independent implementations to be certified.&rdquo;</li>
<li>[3] Blumenkrieg translates to &ldquo;Flower War&rdquo;, and is mostly an inside joke about the <a href="https://en.wikipedia.org/wiki/Anschluss">near-immediate capitulation of Austria</a> during the inevitable rearmament of the Kaiser&rsquo;s German Empire as it evolved into the &ldquo;Thousand Year Reich&rdquo; which lasted about six. What kind of Jew isn&rsquo;t capable of laughing at the ease by which the world looked on as my lineage and so many others&rsquo; were whole-sale slaughtered and exterminated at <a href="https://en.wikipedia.org/wiki/Mauthausen_concentration_camp">Mauthausen</a>, condeming the part of my ancestral lineage to a brutal and inescapably horrific death - who had re-located at the time in <a href="https://en.wikipedia.org/wiki/Passau">Passau</a> after escaping from <a href="https://jewisheritage.org/history-of-jews-in-belarus">Belarus pogroms</a>.They all died, except for the very few who strived forward and managed to escape through the frosted-frozen Alps during storms of mourning and endless searching.</li>
</ul>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>System Migration Complete, and Now it&#39;s Cherry Time</title>
      <link>https://winterschon.gitlab.io/en/posts/system-migration-complete-and-now-its-cherry-time/</link>
      <pubDate>Mon, 02 Jun 2025 01:17:19 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/system-migration-complete-and-now-its-cherry-time/</guid>
      <description><![CDATA[<p>Sunday offers an EOD and EOW wrap up thoughts, with some meandering grammatical expressionism. Present state of this week&rsquo;s hardware resource aggregation into one of the LLM research boxes is&hellip; 98%. The data migration from earlier today is complete, with ZFS offering some enjoyable numbers.</p>
<blockquote>
<p>zpool scrub cranking out 19.6G/s, with 2.74T scanned at approx 2min, with the pool predicting a total of 38min to complete</p>
</blockquote>
<p>While building the spec and futzing with the BOM, one of my priorities was to ensure zero PCIe lane contention, with I/O going direct to 64 cores at 3.5GHz peaks, and eight memory channels in use (4x ECC-REG + 4x NVDIMM). All of those conditions have been benchmarking well so far; yay for meeting personally set expectations. 🤗</p>
<p>I&rsquo;d say this is mostly pretty decent for a draid1 array with NVMe on a single-socket Xeon ICX box, and so far much better than the dual socket Ice Lake boxes that I was benching at ${OldOrg}. The recurring two-socket issue on this Xeon generation, and on its successor Sapphire Rapids, is that there&rsquo;s too much cross-socket comms unless specific choices are made with PCIe peripherals and specific choices with BIOS tuning and kernel settings and core-pinning; all of which can be time consuming at a minimum, and head scratching with &ldquo;Just call Premier Support!&rdquo; at the far end, unless you know better.</p>
<p>This should not come as a surprise to anyone who has been benchmarking multi-socket Xeons ever since Xeons were brought into existence. Having had that experience, and because <em>&ldquo;data + facts + personal experience == real answers&rdquo;</em>, it was simple to predict performance concerns related to cross-socket latency, and don&rsquo;t forget PCIe slot to socket sequencing and NUMA domain crossing, especially when optimizing for high-throughput network based storage transfers. If you scaled a 1 socket to 2 to 4 on the old Nehalem-EX based Xeons, then you know what I mean - they could never match the classic Big Iron vendors&rsquo; quad-socket designs like Sun&rsquo;s SPARC T3 and M3 series, and certainly not competitive to IBM&rsquo;s POWER7 options.</p>
<p>Anyway, there&rsquo;s a little game to play in storage server land called, &ldquo;high density rack-scale storage is more efficient with single socket boards, using a high-lane count, high-clock, big cache SKUs&rdquo;. This isn&rsquo;t the time for a lesson in predictive algorithms necessary for resource optimization, ones which should be used when determining cost/benefit analysis of horizontal vs vertical (or combined) storage system scaling at the rack-level; but <strong>it is time</strong> for me to get off of the computer and eat some cherries and watch one of the alternate endings for Cyberpunk 2077 Phantom Liberty!</p>
<p>And really, for a Sunday evening, remaining at this standing desk in the office-lab is not appealing, particularly due to the <em>&ldquo;it&rsquo;s just too damn hot for pants!&rdquo;</em> environment, even with the A/C on full blast (common metric for this lab, though it&rsquo;s fine weather for a skirt).</p>
<p>PS, the pool scub finished with zero errors. I am pleased. Migration complete.</p>
<p>#linux #zfs #xeon #intel #ibm #sunmicrosystems #storage #hardware #engineering #memories</p>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>The demise of Fedora as a Developer Distro</title>
      <link>https://winterschon.gitlab.io/en/posts/the-demise-of-fedora-as-a-developer-distro/</link>
      <pubDate>Wed, 28 May 2025 22:27:48 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/the-demise-of-fedora-as-a-developer-distro/</guid>
      <description><![CDATA[<p>The Q4-2024 through Q2-2025 cycle has been one of remarkable instability for Fedora kernels and systemd breaking-changes. F40 through F42 have offered more crashes, more kernel panics, and more core dumps than any triple-set of versions since its dawning into existence - and I&rsquo;ve been running this distro for dev-only boxes since the first release.</p>
<p>In the worst of circumstances, Fedora notified me of a firmware update, which was a hands-off type of &ldquo;reboot to install&rdquo; EFI blob which bricked my Thinkpad X1 Nano laptop just last week. That&rsquo;s an expensive failure and one which has no simple resolution (many hours, many iso to img to efi/cap conversions, and maybe soon a WSOP-8 NAND reprogramming).</p>
<p>I&rsquo;ve been all-in on the RedHat infra train since 1999, having used it at global backbone providers, satellite infra providers, hpc clusters, media conglomerates, gaming networks, streaming services, cloud providers and hyperscalers, and just about everything in-between&hellip; and while I have my qualms on certain technical aspects and corporate strategy over those years, I still consider it one of my favorite Linux distos (top five at least), and it&rsquo;s my first choice for enterprise Linux. So, I&rsquo;m not just hating on the ecosystem here, I&rsquo;m a vested user who&rsquo;s been disappointed too many times by the direction</p>
<p>Unfortunately, with Fedora, I stand behind my position that Redhat has been too hands-off in conducting standards requirement alignment, in requiring a base level of stability upon which serious engineering development can be done, without having to clean up other people&rsquo;s messes every few weeks.</p>
<p>It&rsquo;s just not a great dev platform distro anymore, and yet the org markets the name as if it were a valid OS for all manner of production uses. IoT use? Never, no thanks. Edge devices? Never again. Security? Forget about it.</p>
<p>It&rsquo;s not a &ldquo;bleeding-edge issue&rdquo; - as that&rsquo;s Rawhide&rsquo;s territory where stability of any sort is not expected. The evolving issue with Fedora is that it is uncommonly unstable for a &ldquo;dev env&rdquo;, and one which ships far too much untested code and pushes the equivalent of &ldquo;crowd source fail-tests&rdquo; where they expect the users to &ldquo;just tell us if it doesn&rsquo;t work&rdquo;. Their release engineering and load-testing seems to occur with zero multivariate matrices sequences for all manner of performance, validation, and functional tests. I suppose they consider unit testing to be &ldquo;full coverage&rdquo;, but it is not. Happy to be corrected here, though I will remain disappointed and avoid any further deployments or firmware updates from Fedora.</p>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>🌐 Ai/ML Cluster for Traveling</title>
      <link>https://winterschon.gitlab.io/en/posts/nvidia-ai-cluster-for-traveling/</link>
      <pubDate>Sun, 25 May 2025 14:24:31 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/nvidia-ai-cluster-for-traveling/</guid>
      <description><![CDATA[<p>A little travel cluster, all set for Ai engineering and development ❤️</p>
<ul>
<li>1x Nvidia Jetson Xavier NX 16GB</li>
<li>3x Nvidia Jetson Orin NX 16GB</li>
<li>3x GoWin R86S, N6005 16GB</li>
<li>2x Pi-KVM v4-mini for remote/headless access</li>
<li>2x NanoPi nodes, a RISC-V LeechiPi, and LattePanda Mu</li>
<li>Associated networking for 10/5/2.5/1G ports</li>
</ul>
<p>Setup in a Pelican Air case, ready for the flight!</p>
]]></description>
      
    </item>
    
    
    
    <item>
      <title>🌆 Sunday Coming to a Close</title>
      <link>https://winterschon.gitlab.io/en/posts/sunday-coming-to-a-close/</link>
      <pubDate>Mon, 21 Apr 2025 10:47:00 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/sunday-coming-to-a-close/</guid>
      <description><![CDATA[<p>Positive amounts of progress in <em>&ldquo;The Machine Room&rdquo;</em>, which is perhaps a more apt name for my home office and the 1/2 rack of RFC99 lab systems [1]. I&rsquo;ve had a tendency to refer to it as a #HomeLab, and while some of the workloads are purely for personal enjoyment and nothing else, there&rsquo;s also startup related hybrid-cloud hardware and it&rsquo;s linked to the Hurricane Electric FMT2 colocation racks where the bigger metal lives.</p>
<p>Generally, the only systems that I want to keep at home are the ones which receive active physical attention with hardware changes or re-cabling etc; tasks that would be costly and not fun for Remote Hands to deal with at the colo.</p>
<p>So, why then all of this talk about computational hardware? Mostly just because it&rsquo;s enjoyable.</p>
<h2 id="footnotes-and-references">Footnotes and References</h2>
<ul>
<li>[1] RFC99, RFC1918.tld</li>
</ul>
<p>The RFC1918s are references to a set of domains which I&rsquo;ve acquired over a number of years, specific to home-colo-startup lab architecture development. In standing with the concept of &ldquo;<em>Usage-Based Naming Convention&rdquo;</em>, the following TLDs are used in my systems and hostname structures. Anything RFC is for private-local scope, and yes it does refer to the <a href="https://datatracker.ietf.org/doc/html/rfc1918">IETF RFC1918</a> if any becomes curious. Sometimes these domains have valid TLS wildcard certs, sometimes they are self-signed, sometimes there&rsquo;s no need for</p>
<ul>
<li>rfc1918.ai - All things LLM and M/L related, agentic flows, sentience</li>
<li>rfc1918.cloud - Private and Hybrid cloud usage for logical addressing</li>
<li>rfc1918.dev - Development related addresses, code repos, emails</li>
<li>rfc1918.host - Hosts of course, virtual or metal and often embedded</li>
<li>rfc1918.io - iSER, iSCSI, SAN, and similar storage specific functions</li>
<li>rfc1918.sh - Script hosting, mostly used in automation workflows</li>
<li>rfc1918.systems - Referential use, pending docs migration to new wiki</li>
</ul>
<h2 id="additional-tlds-for-the-labs">Additional TLDs for the Labs</h2>
<p>My definition of Lab isn&rsquo;t always formal, or informal, or singular-entity driven. Sometimes I prefer to expand the term to include informally organized teams where there&rsquo;s a shared goal, though perhaps open-ended. In that regard, the most recent TLD has been assigned to <em>bsd.engineering.</em></p>
]]></description>
      
    </item>
    
    
  </channel>
</rss>
