<?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>Storage on Eva Winterschon</title>
    <link>https://winterschon.gitlab.io/tags/storage/</link>
    <description>Recent content in Storage on Eva Winterschon</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>Some copyright notice - [my license](https://example.com/license)</copyright>
    <lastBuildDate>Tue, 07 Jul 2026 21:32:56 +0000</lastBuildDate><atom:link href="https://winterschon.gitlab.io/tags/storage/index.xml" rel="self" type="application/rss+xml" /><icon>https://winterschon.gitlab.io/logo.svg</icon>
    
    
    <item>
      <title>A Day with F2FS @ The Pool</title>
      <link>https://winterschon.gitlab.io/en/posts/a-day-with-f2fs-at-the-pool/</link>
      <pubDate>Tue, 07 Jul 2026 21:32:56 +0000</pubDate>
      
      <guid>https://winterschon.gitlab.io/en/posts/a-day-with-f2fs-at-the-pool/</guid>
      <description><![CDATA[<p>Embedded systems are all around us and most people never know about their presence. Most people never give any consideration to the little devices which make modern life possible.</p>
<blockquote>
<p>Data caching at The Edge isn&rsquo;t always from Fastter or Cuntter or Cloudstter or whichever CDN happens to be serving your IG, Safeway, NFL, Reddit, Anthropology, or 338% of the internet&rsquo;s concurrent traffic being pointless traversals like jQuery minified &amp; brotli-fied and sent back and forth endlessly through Internet Exchanges.</p>
<p>Edge caching is not limited to Anthropic or OAI or whoever else&rsquo;s Load-Balancer API-side &ldquo;prompt cache (not yet! after LB!)&rdquo; packets which &ldquo;those people&rdquo; are constantly complaining about, nor the hyperscalers who whitebox big CDN networks under their own headline IP.. those are not what I&rsquo;m talking about when I talk about Edge Caches.</p>
</blockquote>
<p>These little embedded devices which collect climate metrics, air quality data, assembly robotics, municipal awareness and telemetry data, and everything else from a very long list&hellip; they need read-heavy churn-heavy persistent storage on a filesystem optimized for tiny sized industrial NAND.</p>
<p>More examples for the ones of all sizes making modern life possible: that ATM you went to, the parking lot video surveillance systems, traffic light coordinator nodes, telco edge ONT routers and OOBs with SDNs, and a thousand other examples abound that are functionally ignored.</p>
<p>Also, robots. And factory hardware. And factories making robots that make tiny factories? Hopefully so.</p>
<hr>
<h2 id="embeds-reduce-capex--opex-efficiently">Embeds Reduce CAPEX &amp; OPEX Efficiently</h2>
<p>So, those embedded devices usually are designed for efficiency, while not too often designed to be hammering on NAND for write-heavy storage workloads. This has caveats: devices explicitly designed for write heavy I/O on purpose, and therefore not what I&rsquo;m referring to, and cases where the provisioning and/or configuration stages of fleet deployment are improperly aligned to hardware realities.</p>
<p>Why? Low wattage, moderate caches, and a desire to not burn out NAND when the device is located in a difficult-to-get-to location for service techs working on hardware replacement.</p>
<p>Most of all - we want efficient storage for embedded devices so that their operationally collected data can be stored in memory with a ECC write-back cache with <em>&ldquo;operationally consistent&rdquo;</em> garbage collection and non-invasive wear-leveling, all while the <strong>transactions are paged/queued to F2FS before async&rsquo;ing upstream to a centralized data collector for aggregation</strong>.</p>
<h4 id="predator-drones-too">Predator Drones Too?</h4>
<p>Yes and no, they send their comms to LEOSAT before humanity&rsquo;s &ldquo;furthest from the menial and meaningless non-Elysium people&rdquo; edge devices cache, aggregate, and compute roll-up analytics with inline encryption and compression via DPU offload streaming.. all the way down to LANDSAT.</p>
<p>Edge devices have their own little ecosystem separate from the manner in which datacenter storage network-enabled hardware operates. All by design, and always room for improvement.</p>
<p><img src="/content/images/2026/07/dumpster-fire.gif" alt=""></p>
<blockquote>
<p>Many people consider this boring tech, and would rather move fast and break things — your time is limited, people are sick of perfectly workable systems breaking all the fuckin time and they&rsquo;re tired of being A/B tested on in production — doing those things makes your company&rsquo;s testing policy look like an asshole. Everyone, stop being assholes. Thanks!</p>
</blockquote>
<hr>
<h2 id="these-things---why-should-we-care">These Things - Why Should We Care?</h2>
<p>You like your cell phone? How about GPS? SAT-NAV? Skylink? Drones operating up above withour your awareness? How about sector antennas for the police and emergency services? Embedded systems are streaming, caching, processing, and relaying data all over the globe and up into LEO constellations.</p>
<p>You don&rsquo;t have to care, and you shouldn&rsquo;t have to care about FSFS or drones unless you work with that side of tech, or its adjacent use cases - like living in the modern world. <strong>Everyone should care because knowledge is fundamentally important</strong>, if for no other reason at all. Do you know how the light-switch on the wall works? Same deal. Stop making excuses for saying you don&rsquo;t know or don&rsquo;t care or you will be left behind. No one is saving us but ourselves, and we must have knowledge to do so.</p>
<h2 id="recent-adventures-with-standards-definitions">Recent Adventures with Standards-Definitions</h2>
<p>I love automation. In part this is because I prefer efficiency over repetitive manual bullshit. Efficiently handling requirements means more time to do what I love:</p>
<ul>
<li><strong>Hanging out by the pool</strong> with a tablet or waterproof e-ink reader.<br>
Way back in 2018 my e-book tally was 62 novels over the calendar year. That number has dropped off recently for trivial reasons, but the point remains that I love to read, and I love to lay out by the pool.</li>
<li><strong>What I do not love</strong>:<br>
Wasting time when I could be at the pool. ♥‿♥</li>
</ul>
<p><img src="/content/images/2026/06/eva-physique-at-the-pool.960px-1.png" alt=""></p>
<p>there&rsquo;s only room for two hats in my life - and this is the one for sunning</p>
<ul>
<li><strong>What I&rsquo;ll never not love</strong>:<br>
The poem on my torso, dedicated to the manner in which my departed twin lived &amp; loved.</li>
</ul>
<hr>
<h3 id="standards-for-nand-standards-for-sd-nand">Standards for NAND? Standards for SD-NAND!</h3>
<p>To the point, here&rsquo;s a script that had to be blasted out a while back, while imaging so many too many industrial-spec SD/TF-cards for a fleet of distibuted data collectors. These fun little RK3588 based systems have a NPU and only an eMMC drive for the OS.</p>
<p>While the eMMC in question has decent specs, if it fails then it&rsquo;s sadly more expensive to de-solder and re-solder and re-image the OS on eMMC, and so on these systems we use the SD NAND for the following data:</p>
<ul>
<li>Ephemeral scratch space and logs (eg: <code>/var/log</code>, <code>/var/tmp</code>, <code>/tmp</code> - <em>nope, these go to tmpfs</em>)</li>
<li>Cache directories which are aptly named <code>.cache</code> or <code>.Cache</code> סּ_סּ</li>
<li>Files which must be staged locally but have no business being on the OS mount points.</li>
<li>Several other use cases that I don&rsquo;t feel like describing right now; so here&rsquo;s the discussion for those who love to know more more more.</li>
</ul>
<pre tabindex="0"><code>### F2FS - Embedded Filesystem Performance Options

- Ref: https://docs.kernel.org/filesystems/f2fs.html

#### Option Flags and Reasoning

##### For High-Churn I/O
This is less ideal, but sometimes a `tmpfs` overlay isn&#39;t an option, so it&#39;s better than burning out the eMMC. A good industrial SD card has ECC, wear-leveling, checksum validations, write-amplification controls, etc. Don&#39;t care for those features? You may one day...

Example Writes: data persistent log-sync, package builds on-device, container writable layers, time-series compressible metrics, telemetry buffers, or small-file caches, opt for the non-default `-o 10` flag. 

| Option                      | Rationale              |
| --------------------------- | -----------------------|
| `-l DATA`                   | Stable label for `/etc/fstab`; avoids relying on device enumeration order. UUID is an alternative, but requires programmatic parsing of `blkid` output, or manually specifying a UUID to pass to the FS creation process.. or you can simpy use a GPT label. |
| `-o 5`                      | Reserves 5% of the F2FS volume for the F2FS cleaner. `mkfs.f2fs` documents this as hidden overprovision space used by the cleaner. |
| `-t 1`                      | Performs discard/TRIM at format time; defaults discard to enabled, but some card readers/cards mishandle it; use `-t 0` if format stalls or logs errors |
| `extra_attr`                | Required by several modern F2FS features. |
| `inode_checksum`            | Adds inode metadata checksums; useful for removable flash and unattended systems. |
| `sb_checksum`               | Adds superblock checksum support. |
| `flexible_inline_xattr`     | Modern xattr layout; useful with `extra_attr` and future feature expansion. |
| `inode_crtime`              | Adds inode creation-time support; low cost, useful for forensic/debug visibility. |
| `lost_found`                | Creates lost+found support for recovery workflows. |
| `compression`               | Good for compressible write-heavy data; poor fit for already-compressed media, model files, archives, database pages, and random-write workloads. |
| `compress_algorithm=zstd:3` | Validate performance of zstd compression options before using for production purposes. |
| `compress_log_size=%u`      | Support configuring compress cluster size. The size will be `4KB * (1 &lt;&lt; %u)`. The default and minimum sizes are 16KB. |
| `checkpoint_merge`          | Self-describing (or check the refs)  |
| `nocheckpoint_merge`        | Disable checkpoint merge feature. |

- `checkpoint=%s[:%u[%]]`: Set to &#34;disable&#34; to turn off checkpointing. Set to &#34;enable&#34; to re-enable checkpointing. Is enabled by default. 

- `checkpoint_merge`
When checkpoint is enabled, this can be used to create a kernel daemon and make it to merge concurrent checkpoint requests as much as possible to eliminate redundant checkpoint issues. Plus, we can eliminate the sluggish issue caused by slow checkpoint operation when the checkpoint is done in a process context in a cgroup having low i/o budget and cpu shares.

- `compress_algorithm=%s`
- `compress_algorithm=lzo-rle`

Control compress algorithm, currently f2fs supports &#34;lzo&#34;, &#34;lz4&#34;, &#34;zstd&#34; and &#34;lzo-rle&#34; algorithm.

- `compress_algorithm=%s:%d`

Control compress algorithm and its compress level.. only &#34;lz4&#34; and &#34;zstd&#34; support compress level config and those algos may be in your kernel config and may not.. but you&#39;ll find out quickly if you don&#39;t already know the answer.
</code></pre><p>=========      ===========
algorithm      level range
=========      ===========
lz4            3 - 16
zstd           1 - 22
=========      ===========</p>
<pre tabindex="0"><code>
- `compress_log_size=%u`
Support configuring compress cluster size. The size will be `4KB * (1 &lt;&lt; %u)`. The default and minimum sizes are 16KB.

- `compress_extension=%s`

Support adding specified extension, so that f2fs can enable compression on those corresponding files.
If all files with `.ext` has high compression rate, we can set the `.ext` on compression extension list and enable compression on these file by default rather than to enable it via ioctl.

For other files, we can still enable compression via ioctl. Note that, there is one reserved special extension `*`, it can be set to enable compression for all files.

- `nocompress_extension=%s`

Support adding specified extension, so that f2fs can disable compression on those corresponding files, just contrary to compression extension.
If you know exactly which files cannot be compressed, you can use this.

&gt; The same extension name can’t appear in both compress and nocompress extension at the same time.

If the compress extension specifies all files, the types specified by the nocompress extension will be treated as special cases and will not be compressed.
After add nocompress_extension, the priority should be: `dir_flag &lt; comp_extention,nocompress_extension &lt; comp_file_flag,no_comp_file_flag`.

- `compress_chksum`
Support verifying chksum of raw data in compressed cluster.

- `compress_mode=%s`
Control file compression mode: &#34;fs&#34; and &#34;user&#34;. In &#34;fs&#34; mode (default), f2fs does automatic compression on the compression enabled files. In &#34;user&#34; mode, f2fs disables the automaic compression and gives the user discretion of choosing the target file and the timing.

The user can do manual compression/decompression on the compression enabled files using ioctls.

- `compress_cache`
Support to use address space of a filesystem managed inode to cache compressed block, in order to improve cache hit ratio of random read.

- `inlinecrypt`
When possible, encrypt/decrypt the contents of encrypted files using the blk-crypto framework rather than filesystem-layer encryption.
This allows the use of inline encryption hardware. The on-disk format is unaffected.

- `atgc`
Enable age-threshold garbage collection, it provides high effectiveness and efficiency on background GC. No one likes garbage.

- `discard_unit=%s`
Control discard unit, the argument can be &#34;block&#34;, &#34;segment&#34; and &#34;section&#34;, issued discard command’s offset/size will be aligned to the unit, by default, &#34;`discard_unit=block`&#34; is set, so that small discard functionality is enabled.

For blkzoned device, &#34;`discard_unit=section`&#34; will be set by default, it is helpful for large sized (fucccck off with SMR, less fucks to ZNS) devices to reduce memory cost by getting rid of fs metadata supports small discard (ouch, ever get burned by SMR? yeah... just don&#39;t bother).

- `age_extent_cache`
Enable an age extent cache based on rb-tree. It records data block update frequency of the extent per inode, in order to provide better temperature hints for data block allocation.

- `errors=%s`
Specify f2fs behavior on critical errors. This supports modes: &#34;`panic`&#34;, &#34;`continue`&#34; and &#34;`remount-ro`&#34;, respectively, trigger panic immediately, continue without doing anything, and remount the partition in read-only mode.

By default it uses &#34;`continue`&#34; mode, not my choice.
</code></pre><p>====================== ===============<br>
mode                   continue        remount-ro      panic
====================== ===============<br>
access ops             normal          normal          N/A
syscall errors         -EIO            -EROFS          N/A
mount option           rw              ro              N/A
pending dir write      keep            keep            N/A
pending non-dir write  drop            keep            N/A
pending node write     drop            keep            N/A
pending meta write     keep            keep            N/A
====================== ===============</p>
<pre tabindex="0"><code>
- `nat_bits`
Enable nat_bits feature to enhance full/empty nat blocks access, by default it’s disabled.

- `lookup_mode=%s`
Control the directory lookup behavior for case-folded directories. This option has no effect on directories that do not have the casefold feature enabled.
</code></pre><h1 id="value--------------description">========================================
Value              Description</h1>
<h1 id="flag">perf               (Default) Enforces a hash-only lookup.
The linear search fallback is always
disabled, ignoring the on-disk flag.
compat         Enables the linear search fallback for
compatibility with directory entries
created by older kernel that used a
different case-folding algorithm.
This mode ignores the on-disk flag.
auto               F2FS determines the mode based on the
on-disk <code>SB_ENC_NO_COMPAT_FALLBACK_FL</code>
flag.</h1>
<pre tabindex="0"><code>
----

#### Benchmarking F2FS Compression

Always validate the compression algo used before using those options, as performance of one algo vs anther can vary widely across different CPU generation and architectures, as well as for hosts with algo/hash compression offloading engines. We can cover benchmarking these in another script.

&gt; lzo, lz4, zstd, lzo-rle algorithms

##### Create Partitions
</code></pre><p>DEV=/dev/sdX
sgdisk &ndash;zap-all &ldquo;$DEV&rdquo;
sgdisk -a 2048 -n 1:2048:-16G -t 1:8300 -c 1:DATA &ldquo;$DEV&rdquo;
partprobe &ldquo;$DEV&rdquo;</p>
<pre tabindex="0"><code>
##### Create FS
</code></pre><p>mkfs.f2fs -f <br>
-l DATA <br>
-o 10 <br>
-t 1 <br>
-O extra_attr,inode_checksum,sb_checksum,flexible_inline_xattr,inode_crtime,lost_found,compression,compress_algorithm=zstd:3
&ldquo;${DEV}1&rdquo;</p>
<pre tabindex="0"><code>
#### FS Tab Entry

##### Conservative defaults
</code></pre><p>LABEL=DATA /srv/data f2fs rw,noatime,nodiratime,lazytime,nofail,background_gc=on,gc_merge,checkpoint_merge,flush_merge,mode=adaptive,fsync_mode=posix,nodiscard 0 0</p>
<pre tabindex="0"><code>
##### Compression-capable variant
</code></pre><p>LABEL=DATA /srv/data f2fs rw,noatime,nodiratime,lazytime,nofail,background_gc=on,gc_merge,checkpoint_merge,flush_merge,mode=adaptive,fsync_mode=posix,nodiscard,compress_algorithm=lz4,compress_chksum,compress_mode=fs 0 0</p>
<pre tabindex="0"><code>
#### Selectively Mark Compressible Directories
Do not enable compression broadly for LLM model files, videos, archives, SQLite databases, or opaque binary blobs unless benchmarks show a benefit.
</code></pre><p>mkdir -p /srv/data/_logs /srv/data/_caches.compressible
chattr +c /srv/data/_logs /srv/data/_cache.compressible</p>
<pre tabindex="0"><code></code></pre><hr>
<h3 id="so-maybe-this-is-scriptable">So, Maybe This is Scriptable?</h3>
<p>It sure is, or by Ansible playbook, or Salt sync, perhaps even a CFengine golden image.</p>
<h3 id="thats-a-lot-of-blah-blah-blah-how-about-that-script">That&rsquo;s a lot of blah blah blah. How about that script?</h3>
<p>Efficiency, indeed. Here ya go. The benchmarking script is for another day, or you can check out this <a href="https://www.usenix.org/system/files/conference/fast15/fast15-paper-lee.pdf">workload primer about the filesystem from USENIX</a> (<a href="https://www.usenix.org/sites/default/files/conference/protected-files/fast15_slides_lee.pdf">w/ link to slide deck</a>), and a benchmarking script which has been <a href="https://github.com/nicktehrany/msF2FS">customized for F2FS</a>.</p>
<pre tabindex="0"><code>#!/usr/bin/env bash
# -*- mode: sh; sh-basic-offset: 4; sh-shell: bash; coding: utf-8; indent-tabs-mode: nil; -*-
# ----------------------------------------------------------------------- #
set -euo pipefail
# ----------------------------------------------------------------------- #
# Purpose: POSIX-syntax wrapper to partition and format a non-boot SD/microSD card as F2FS with optional compression.
# NAND Profile: embedded I/O, kernel 6.1+, ECC industrial spec controller.
# WARNING: this destroys data on the selected block device, so be aware.
# ----------------------------------------------------------------------- #

usage() {
    cat &lt;&lt;&#39;USAGE&#39;
Usage:
  format-f2fs-sd-data.sh -d /dev/DEVICE [-l LABEL] [-r RESERVE_GIB] [-o F2FS_OP_PERCENT] [-c]

Examples:
# ----------------------------------------------------------------------- #
  ./format-f2fs-sd-data.sh -d /dev/sdX -l DATA -r 16 -o 5
  ./format-f2fs-sd-data.sh -d /dev/mmcblk0 -l DATA -r 24 -o 8 -c

Options:
# ----------------------------------------------------------------------- #
  -d  Whole block device to erase and partition: /dev/sdX -OR- /dev/mmcblk0
  -l  F2FS label. Default: DATA
  -r  GiB left unpartitioned at end for card FTL spare area. Default: 16
  -o  F2FS hidden overprovision percentage for the F2FS cleaner. Default: 5
  -c  Enable F2FS compression feature at format time. Mount options and chattr are still required.

Dependencies:
# ----------------------------------------------------------------------- #
  sgdisk, partprobe, mkfs.f2fs, lsblk
# ----------------------------------------------------------------------- #
USAGE
}

# Basic Variables
# ----------------------------------------------------------------------- #
LABEL=DATA
RESERVE_GIB=16
OP_PERCENT=5
COMPRESS=0
DEVICE=

# Define ARGV Mappings
# ----------------------------------------------------------------------- #
while getopts &#39;d:l:r:o:ch&#39; opt; do
    case &#34;$opt&#34; in
        d) DEVICE=$OPTARG ;;
        l) LABEL=$OPTARG ;;
        r) RESERVE_GIB=$OPTARG ;;
        o) OP_PERCENT=$OPTARG ;;
        c) COMPRESS=1 ;;
        h) usage; exit 0 ;;
        *) usage; exit 2 ;;
    esac
done

# Sanity Checks
# ----------------------------------------------------------------------- #
if [ -z &#34;$DEVICE&#34; ]; then
    usage &gt;&amp;2
    exit 2
fi

case &#34;$DEVICE&#34; in
    /dev/sd?|/dev/sd??|/dev/mmcblk[0-9]|/dev/nvme[0-9]n[0-9]) ;;
    *)
        echo &#34;Refusing suspicious device path: $DEVICE&#34; &gt;&amp;2
        exit 2
        ;;
esac

# Validate Deps &amp; Check Limits
# ----------------------------------------------------------------------- #
for cmd in sgdisk partprobe mkfs.f2fs lsblk; do
    if ! command -v &#34;$cmd&#34; &gt;/dev/null 2&gt;&amp;1; then
        echo &#34;Missing required command: $cmd&#34; &gt;&amp;2
        exit 1
    fi
done

if [ ! -b &#34;$DEVICE&#34; ]; then
    echo &#34;Not a block device: $DEVICE&#34; &gt;&amp;2
    exit 1
fi

case &#34;$RESERVE_GIB&#34; in
    &#39;&#39;|*[!0-9]*) echo &#34;Reserve GiB must be an integer&#34; &gt;&amp;2; exit 2 ;;
esac
case &#34;$OP_PERCENT&#34; in
    &#39;&#39;|*[!0-9]*) echo &#34;F2FS OP percentage must be an integer&#34; &gt;&amp;2; exit 2 ;;
esac

case &#34;$DEVICE&#34; in
    /dev/mmcblk*|/dev/nvme*) PART=${DEVICE}p1 ;;
    *) PART=${DEVICE}1 ;;
esac

# Define Default F2FS Options
# ----------------------------------------------------------------------- #
FEATURES=&#39;extra_attr,inode_checksum,sb_checksum,flexible_inline_xattr,inode_crtime,lost_found&#39;
if [ &#34;$COMPRESS&#34; -eq 1 ]; then
    FEATURES=${FEATURES},compression
fi

# Make Sure...
# ----------------------------------------------------------------------- #
echo &#34;About to DESTROY all data on: $DEVICE&#34;
lsblk -o NAME,SIZE,MODEL,SERIAL,TRAN,RM,RO,FSTYPE,MOUNTPOINTS &#34;$DEVICE&#34; || true
echo
echo &#34;New partition: $PART&#34;
echo &#34;Label: $LABEL&#34;
echo &#34;Unpartitioned reserve at end: ${RESERVE_GIB} GiB&#34;
echo &#34;F2FS OP: ${OP_PERCENT}%&#34;
echo &#34;F2FS features: $FEATURES&#34;
echo
printf &#39;Type YES to continue: &#39;
read ans
if [ &#34;$ans&#34; != YES ]; then
    echo &#34;Aborted.&#34;
    exit 1
fi

# Best Effort Unmount for Existing Partitions (please don&#39;t need this)
# ----------------------------------------------------------------------- #
if command -v findmnt &gt;/dev/null 2&gt;&amp;1; then
    findmnt -rn -S &#34;$DEVICE&#34; -o TARGET 2&gt;/dev/null | while IFS= read -r mp; do
        [ -n &#34;$mp&#34; ] &amp;&amp; umount &#34;$mp&#34; || true
    done
fi

# And then...
# ----------------------------------------------------------------------- #
sgdisk --zap-all &#34;$DEVICE&#34;
sgdisk -a 2048 -n &#34;1:2048:-${RESERVE_GIB}G&#34; -t 1:8300 -c &#34;1:${LABEL}&#34; &#34;$DEVICE&#34;
partprobe &#34;$DEVICE&#34; || true
sleep 2

if [ ! -b &#34;$PART&#34; ]; then
    echo &#34;Partition node did not appear: $PART&#34; &gt;&amp;2
    lsblk &#34;$DEVICE&#34; &gt;&amp;2 || true
    exit 1
fi

# OhhhShitHandlers
# ----------------------------------------------------------------------- #
# NOTE: -t 1 performs initial discard when supported; if it&#39;s hanging here, rerun manually with -t 0
mkfs.f2fs -f -l &#34;$LABEL&#34; -o &#34;$OP_PERCENT&#34; -t 1 -O &#34;$FEATURES&#34; &#34;$PART&#34; &amp;&amp; \
sync

# Display Block Devs
# ----------------------------------------------------------------------- #
lsblk -o NAME,SIZE,MODEL,SERIAL,TRAN,RM,RO,FSTYPE,LABEL,UUID,PARTUUID,MOUNTPOINTS &#34;$DEVICE&#34;

echo &#34;[COMPLETE]&#34;
# ----------------------------------------------------------------------- #
# EOF #
# ----------------------------------------------------------------------- #
</code></pre>]]></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>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>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>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>
    
    
  </channel>
</rss>
