Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/znippy

.nornir/assets/osm-katana-path-matrix.svg

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1300 760" font-family="'DejaVu Sans', 'Segoe UI', sans-serif">
  <defs>
    <linearGradient id="board" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#0b1c2e"/><stop offset="1" stop-color="#06111d"/>
    </linearGradient>
    <linearGradient id="chip" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#14384f"/><stop offset="1" stop-color="#0e2a3e"/>
    </linearGradient>
    <linearGradient id="rail" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#173d57"/><stop offset="1" stop-color="#0c2438"/>
    </linearGradient>
    <linearGradient id="slot" x1="0" y1="0" x2="0" y2="1">
      <stop offset="0" stop-color="#123448"/><stop offset="1" stop-color="#0a2032"/>
    </linearGradient>
    <linearGradient id="hot" x1="0" y1="0" x2="1" y2="0">
      <stop offset="0" stop-color="#1d6f4f"/><stop offset="1" stop-color="#27a36f"/>
    </linearGradient>
    <marker id="arrow" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto">
      <path d="M0,0 L7,3 L0,6 Z" fill="#6fd3f5"/>
    </marker>
    <marker id="arrowd" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto">
      <path d="M0,0 L7,3 L0,6 Z" fill="#7fb0cc"/>
    </marker>
  </defs>

  <rect x="0" y="0" width="1300" height="760" fill="url(#board)"/>
  <g stroke="#143a52" stroke-width="1"><line x1="0" y1="78" x2="1300" y2="78"/><line x1="0" y1="586" x2="1300" y2="586"/></g>
  <g fill="#16415c"><circle cx="40" cy="40" r="2"/><circle cx="1260" cy="40" r="2"/><circle cx="40" cy="732" r="2"/><circle cx="1260" cy="732" r="2"/></g>

  <!-- title -->
  <text x="40" y="40" fill="#eaf6ff" font-size="22" font-weight="700">osm-katana</text>
  <text x="172" y="40" fill="#9fc9e0" font-size="14">planet OSM &#8594; every supported path, <tspan fill="#bfe6ff" font-weight="700">left &#8594; right</tspan>, each permutation <tspan fill="#7be3ad" font-weight="700">100% saturated</tspan></text>
  <g font-size="12">
    <line x1="40" y1="60" x2="78" y2="60" stroke="#6fd3f5" stroke-width="3" marker-end="url(#arrow)"/>
    <text x="86" y="64" fill="#cfe6f5">convert path</text>
    <line x1="210" y1="60" x2="248" y2="60" stroke="#7fb0cc" stroke-width="2.5" stroke-dasharray="5 4" marker-end="url(#arrowd)"/>
    <text x="256" y="64" fill="#cfe6f5">optional &#177; clip dimension</text>
    <rect x="470" y="52" width="30" height="13" rx="3" fill="url(#hot)"/>
    <text x="508" y="64" fill="#cfe6f5">flat-100% cores (1-32-32-32-1)</text>
  </g>

  <!-- column captions -->
  <g fill="#5f93b0" font-size="11" font-weight="700" text-anchor="middle">
    <text x="134" y="104">SOURCE</text><text x="395" y="104">DECOMPRESS</text>
    <text x="650" y="104">INTERMEDIATE</text><text x="920" y="104">RESOLVE</text><text x="1170" y="104">OUTPUT</text>
  </g>

  <!-- ===== europe-clip dimension (top, dashed) ===== -->
  <rect x="540" y="120" width="320" height="52" rx="9" fill="url(#slot)" stroke="#7fb0cc" stroke-width="1.6" stroke-dasharray="6 4"/>
  <text x="700" y="142" fill="#cfe6f5" font-size="12.5" text-anchor="middle" font-weight="700">osmium / osmconvert &#8212; europe clip</text>
  <text x="700" y="160" fill="#9fc9e0" font-size="10.5" text-anchor="middle">osm-katana converts, never clips &#183; &#177;clip = rerun the whole matrix</text>

  <!-- ===== SOURCE ===== -->
  <rect x="44" y="250" width="180" height="92" rx="10" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
  <text x="134" y="284" fill="#eaf6ff" font-size="12.5" text-anchor="middle" font-weight="700">planet-260427.osm.bz2</text>
  <text x="134" y="304" fill="#bfe6ff" font-size="10.5" text-anchor="middle" font-family="'DejaVu Sans Mono', monospace">173 GB</text>
  <text x="134" y="322" fill="#86b3cc" font-size="10" text-anchor="middle">bz2-packed planet XML</text>

  <rect x="44" y="470" width="180" height="64" rx="10" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
  <text x="134" y="498" fill="#eaf6ff" font-size="12.5" text-anchor="middle" font-weight="700">*.osm.gz</text>
  <text x="134" y="517" fill="#86b3cc" font-size="10" text-anchor="middle">gz path (region)</text>

  <!-- ===== DECOMPRESS ===== -->
  <rect x="305" y="200" width="180" height="74" rx="10" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
  <text x="395" y="228" fill="#eaf6ff" font-size="12.5" text-anchor="middle" font-weight="700">znippy lbzip2 -d</text>
  <text x="395" y="246" fill="#7be3ad" font-size="10" text-anchor="middle">parallel bzip2 &#183; 100%</text>
  <text x="395" y="263" fill="#86b3cc" font-size="9.5" text-anchor="middle">znippy CLI, not system bzip2</text>

  <rect x="305" y="300" width="180" height="64" rx="10" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.5"/>
  <text x="395" y="327" fill="#bfe6ff" font-size="11.5" text-anchor="middle" font-weight="700" font-family="'DejaVu Sans Mono', monospace">planet.osm</text>
  <text x="395" y="345" fill="#86b3cc" font-size="9.5" text-anchor="middle">~1.8 TB raw XML &#183; VTD parse</text>

  <!-- ===== INTERMEDIATE (xml2pbf -> pbf) ===== -->
  <rect x="560" y="220" width="180" height="70" rx="10" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
  <text x="650" y="248" fill="#eaf6ff" font-size="13" text-anchor="middle" font-weight="700">xml2pbf</text>
  <text x="650" y="267" fill="#7be3ad" font-size="10" text-anchor="middle">VTD + encode &#183; 100%</text>

  <rect x="560" y="320" width="180" height="58" rx="10" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.5"/>
  <text x="650" y="346" fill="#bfe6ff" font-size="11.5" text-anchor="middle" font-weight="700" font-family="'DejaVu Sans Mono', monospace">planet.pbf</text>
  <text x="650" y="363" fill="#86b3cc" font-size="9.5" text-anchor="middle">zstd-PBF intermediate</text>

  <!-- ===== RESOLVE ===== -->
  <rect x="800" y="222" width="230" height="180" rx="12" fill="url(#chip)" stroke="#7fc8ea" stroke-width="2.4"/>
  <text x="915" y="248" fill="#eaf6ff" font-size="13.5" text-anchor="middle" font-weight="700">pbf2geo / convert</text>
  <text x="915" y="266" fill="#9fc9e0" font-size="10" text-anchor="middle">2-pass resolved geometry</text>
  <g font-family="'DejaVu Sans Mono', monospace" font-size="9.5" fill="#bfe6ff">
    <rect x="818" y="278" width="194" height="20" rx="4" fill="url(#slot)"/><text x="915" y="292" text-anchor="middle">Gatling 1-32-32-32-1 (no-barrier)</text>
    <rect x="818" y="302" width="194" height="20" rx="4" fill="url(#slot)"/><text x="915" y="316" text-anchor="middle">Ragnar lookup_batch::&lt;16&gt; (MLP)</text>
    <rect x="818" y="326" width="194" height="20" rx="4" fill="url(#slot)"/><text x="915" y="340" text-anchor="middle">streaming k-way sort ~13 GB</text>
    <rect x="818" y="350" width="194" height="20" rx="4" fill="url(#slot)"/><text x="915" y="364" text-anchor="middle">zero-copy &#183; rayon-free</text>
  </g>
  <rect x="818" y="376" width="194" height="16" rx="4" fill="url(#hot)"/>
  <text x="915" y="388" fill="#eafff5" font-size="9.5" text-anchor="middle" font-weight="700">32 / 32 cores</text>

  <!-- ===== OUTPUT ===== -->
  <rect x="1062" y="240" width="190" height="70" rx="10" fill="url(#chip)" stroke="#5aa6cf" stroke-width="2"/>
  <text x="1157" y="268" fill="#eaf6ff" font-size="13" text-anchor="middle" font-weight="700">GeoParquet</text>
  <text x="1157" y="287" fill="#86b3cc" font-size="10" text-anchor="middle">nodes / ways / relations &#183; WKB</text>

  <rect x="1062" y="330" width="190" height="58" rx="10" fill="url(#slot)" stroke="#6fd3f5" stroke-width="1.5"/>
  <text x="1157" y="356" fill="#bfe6ff" font-size="12" text-anchor="middle" font-weight="700">geo2arrow</text>
  <text x="1157" y="374" fill="#86b3cc" font-size="9.5" text-anchor="middle">&#8594; Arrow IPC</text>

  <!-- ===== connectors (permutations) ===== -->
  <g fill="none" stroke="#6fd3f5" stroke-width="2.2">
    <!-- source -> decompress -->
    <path d="M224,290 C260,290 268,237 305,237" marker-end="url(#arrow)"/>
    <!-- decompress -> raw osm -->
    <path d="M395,274 L395,300" marker-end="url(#arrow)"/>
    <!-- source -> xml2pbf (bz2 in) -->
    <path d="M224,300 C420,300 430,255 560,255" marker-end="url(#arrow)"/>
    <!-- raw osm -> xml2pbf -->
    <path d="M485,330 C520,330 525,278 560,272" marker-end="url(#arrow)"/>
    <!-- xml2pbf -> pbf -->
    <path d="M650,290 L650,320" marker-end="url(#arrow)"/>
    <!-- pbf -> resolve -->
    <path d="M740,348 C772,348 775,330 800,322" marker-end="url(#arrow)"/>
    <!-- source bz2 -> resolve DIRECT (convert) -->
    <path d="M224,330 C420,470 640,452 800,392" marker-end="url(#arrow)"/>
    <!-- raw osm -> resolve DIRECT (convert) -->
    <path d="M485,345 C620,420 700,400 800,372" marker-end="url(#arrow)"/>
    <!-- gz -> resolve -->
    <path d="M224,500 C520,520 700,470 800,400" marker-end="url(#arrow)"/>
    <!-- resolve -> geo -->
    <path d="M1030,285 C1046,280 1048,275 1062,275" marker-end="url(#arrow)"/>
    <!-- geo -> arrow -->
    <path d="M1157,310 L1157,330" marker-end="url(#arrow)"/>
  </g>

  <!-- clip dimension dashed feed -->
  <g fill="none" stroke="#7fb0cc" stroke-width="2" stroke-dasharray="6 4">
    <path d="M540,150 C360,150 300,176 224,255" marker-end="url(#arrowd)"/>
  </g>

  <!-- edge labels -->
  <g font-size="9.5" font-family="'DejaVu Sans Mono', monospace" fill="#7be3ad">
    <text x="250" y="252">lbzip2 -d</text>
    <text x="300" y="244" fill="#a9d8ee">bz2 &#8594; pbf</text>
    <text x="386" y="466" fill="#a9d8ee">bz2 &#8594; geo (direct)</text>
    <text x="560" y="408" fill="#a9d8ee">osm &#8594; geo (direct)</text>
    <text x="250" y="494" fill="#a9d8ee">gz &#8594; geo</text>
    <text x="744" y="332" fill="#a9d8ee">pbf2geo</text>
  </g>

  <!-- ===== ENGINE RAIL ===== -->
  <rect x="44" y="608" width="1208" height="118" rx="12" fill="url(#rail)" stroke="#3c6a86" stroke-width="1.5"/>
  <text x="64" y="634" fill="#eaf6ff" font-size="13" font-weight="700">GATLING engine</text>
  <text x="170" y="634" fill="#9fc9e0" font-size="11">one reader pre-reads 4&#8211;8 slots &#183; 32 workers carry each unit through all stages, self-dispatch &#183; one writer drains in order &#8212; never waits for all</text>

  <!-- 1-32-32-32-1 mini -->
  <g>
    <rect x="64" y="650" width="60" height="58" rx="6" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.4"/>
    <text x="94" y="676" fill="#bfe6ff" font-size="11" text-anchor="middle" font-weight="700">1</text>
    <text x="94" y="694" fill="#86b3cc" font-size="8.5" text-anchor="middle">reader</text>

    <g>
      <rect x="150" y="646" width="240" height="66" rx="6" fill="url(#slot)" stroke="#7fc8ea" stroke-width="1.4"/>
      <text x="270" y="640" fill="#7be3ad" font-size="9.5" text-anchor="middle">32 &#8594; 32 &#8594; 32  (decode &#183; VTD &#183; encode, no barrier)</text>
    </g>
    <g fill="url(#hot)">
      <rect x="158" y="654" width="13" height="50" rx="2"/><rect x="175" y="654" width="13" height="50" rx="2"/>
      <rect x="192" y="654" width="13" height="50" rx="2"/><rect x="209" y="654" width="13" height="50" rx="2"/>
      <rect x="226" y="654" width="13" height="50" rx="2"/><rect x="243" y="654" width="13" height="50" rx="2"/>
      <rect x="260" y="654" width="13" height="50" rx="2"/><rect x="277" y="654" width="13" height="50" rx="2"/>
      <rect x="294" y="654" width="13" height="50" rx="2"/><rect x="311" y="654" width="13" height="50" rx="2"/>
      <rect x="328" y="654" width="13" height="50" rx="2"/><rect x="345" y="654" width="13" height="50" rx="2"/>
      <rect x="362" y="654" width="13" height="50" rx="2"/>
    </g>

    <rect x="416" y="650" width="60" height="58" rx="6" fill="url(#chip)" stroke="#6fd3f5" stroke-width="1.4"/>
    <text x="446" y="676" fill="#bfe6ff" font-size="11" text-anchor="middle" font-weight="700">1</text>
    <text x="446" y="694" fill="#86b3cc" font-size="8.5" text-anchor="middle">writer</text>

    <g fill="none" stroke="#6fd3f5" stroke-width="2">
      <path d="M124,679 L150,679" marker-end="url(#arrow)"/>
      <path d="M390,679 L416,679" marker-end="url(#arrow)"/>
    </g>
  </g>

  <!-- ordered-bench note -->
  <g font-size="10.5">
    <text x="520" y="660" fill="#cfe6f5" font-weight="700">register_bench_ordered!(n, &#8230;)</text>
    <text x="520" y="678" fill="#9fc9e0">stages run strictly in order, never in parallel &#8212;</text>
    <text x="520" y="694" fill="#9fc9e0">each feeds the next; downstream skips if upstream fails.</text>
    <text x="820" y="660" fill="#cfe6f5" font-weight="700">source: /run/media/.../planet-260427.osm.bz2</text>
    <text x="820" y="678" fill="#9fc9e0">every lane above is one ordered permutation,</text>
    <text x="820" y="694" fill="#7be3ad">all proven flat-100% before the run is green.</text>
  </g>
</svg>