stream-render-farm/cluster-scaling.html
2026-07-18 19:32:55 +00:00

275 lines
9.7 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Linear Scaling Law • stream.4ort.net</title>
<style>
:root { --bg: #050505; --fg: #e0e0e0; --accent: #7aa2f7; --border: #1a1a1a; --muted: #666; }
* { box-sizing: border-box; }
body {
background: var(--bg);
color: var(--fg);
font-family: system-ui, -apple-system, sans-serif;
margin: 0;
padding: 3rem;
line-height: 1.6;
}
.container { max-width: 980px; margin: 0 auto; }
header {
border-left: 3px solid var(--accent);
padding-left: 2rem;
margin-bottom: 3rem;
}
h1 {
font-size: 2.8rem;
letter-spacing: -0.05em;
margin: 0 0 0.5rem 0;
line-height: 1.1;
}
.subtitle {
font-size: 1rem;
opacity: 0.7;
margin-bottom: 1rem;
font-family: monospace;
}
section {
margin: 3rem 0;
}
h2 {
font-size: 1.4rem;
color: var(--accent);
border-bottom: 1px solid var(--border);
padding-bottom: 0.5rem;
margin-top: 2rem;
font-family: monospace;
}
p {
margin-bottom: 1rem;
font-size: 1.05rem;
}
.definition-box {
background: rgba(122, 162, 247, 0.05);
border: 1px solid var(--accent);
padding: 1.5rem;
margin: 1.5rem 0;
font-family: monospace;
font-size: 0.9rem;
}
.equation {
background: var(--border);
padding: 1.5rem;
margin: 2rem 0;
font-family: monospace;
font-size: 1.1rem;
text-align: center;
border-left: 4px solid var(--accent);
}
.scaling-chart {
background: var(--border);
border: 1px solid var(--accent);
padding: 2rem;
margin: 2rem 0;
position: relative;
min-height: 400px;
}
.axis-label {
position: absolute;
font-family: monospace;
font-size: 0.8rem;
color: var(--accent);
}
.y-axis-label { left: 1rem; top: 50%; transform: translateY(-50%) rotate(-90deg); }
.x-axis-label { bottom: 1rem; left: 50%; transform: translateX(-50%); }
.grid-line {
stroke: var(--border);
stroke-dasharray: 4 4;
}
.scale-line {
stroke: var(--accent);
stroke-width: 2;
}
svg {
width: 100%;
height: 100%;
}
img {
max-width: 100%;
height: auto;
margin: 1.5rem 0;
border: 1px solid var(--border);
}
.citation {
font-size: 0.75rem;
opacity: 0.5;
margin-top: 1rem;
font-family: monospace;
}
nav.nav {
margin-top: 3rem;
padding-top: 2rem;
border-top: 1px solid var(--border);
font-size: 0.85rem;
opacity: 0.6;
}
nav.nav a {
color: var(--accent);
text-decoration: none;
margin-right: 1.5rem;
}
.link-ref {
color: var(--accent);
text-decoration: none;
border-bottom: 1px dotted var(--accent);
}
.metric-box {
display: flex;
gap: 2rem;
margin: 2rem 0;
flex-wrap: wrap;
}
.metric {
background: rgba(122, 162, 247, 0.05);
border: 1px solid var(--border);
padding: 1.5rem;
flex: 1;
min-width: 250px;
}
.metric-value {
font-family: monospace;
font-size: 2rem;
color: var(--accent);
font-weight: bold;
margin-bottom: 0.5rem;
}
.metric-label {
font-size: 0.9rem;
opacity: 0.8;
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="container">
<header>
<h1>LINEAR SCALING LAW</h1>
<div class="subtitle">WHY DOUBLE NODES = DOUBLE THROUGHPUT</div>
<p>In a properly architected render farm, scaling is not exponential. It is arithmetic. Each node adds one unit of throughput. No more, no less.</p>
</header>
<section>
<h2>I. THE SCALING PRINCIPLE</h2>
<div class="equation">
T(k) = k × T(1)
</div>
<div class="definition-box">
<p><strong>k</strong> = number of nodes in cluster<br>
<strong>T(1)</strong> = base throughput of single node (frames·hr⁻¹)<br>
<strong>T(k)</strong> = total cluster throughput at scale k</p>
</div>
<p>This is not optimization theory. It is physical necessity. A render farm distributes independent frame tasks across independent compute units. Task i runs on Node j. No task waits. No node idles (unless load balancing fails).</p>
</section>
<section>
<h2>II. VISUAL PROOF</h2>
<div class="scaling-chart">
<span class="axis-label y-axis-label">THROUGHPUT (frames·hr⁻¹)</span>
<span class="axis-label x-axis-label">NODE COUNT</span>
<svg viewBox="0 0 800 400">
<!-- Grid -->
<line x1="50" y1="50" x2="50" y2="350" class="grid-line"/>
<line x1="50" y1="350" x2="750" y2="350" class="grid-line"/>
<!-- Horizontal grid lines -->
<line x1="50" y1="250" x2="750" y2="250" class="grid-line"/>
<line x1="50" y1="150" x2="750" y2="150" class="grid-line"/>
<line x1="50" y1="50" x2="750" y2="50" class="grid-line"/>
<!-- Vertical grid lines -->
<line x1="150" y1="50" x2="150" y2="350" class="grid-line"/>
<line x1="250" y1="50" x2="250" y2="350" class="grid-line"/>
<line x1="350" y1="50" x2="350" y2="350" class="grid-line"/>
<line x1="450" y1="50" x2="450" y2="350" class="grid-line"/>
<line x1="550" y1="50" x2="550" y2="350" class="grid-line"/>
<line x1="650" y1="50" x2="650" y2="350" class="grid-line"/>
<line x1="750" y1="50" x2="750" y2="350" class="grid-line"/>
<!-- Linear scaling line -->
<polyline points="50,350 150,300 250,250 350,200 450,150 550,100 650,50 750,0" class="scale-line"/>
<!-- Data points -->
<circle cx="50" cy="350" r="4" fill="#7aa2f7"/>
<circle cx="150" cy="300" r="4" fill="#7aa2f7"/>
<circle cx="250" cy="250" r="4" fill="#7aa2f7"/>
<circle cx="350" cy="200" r="4" fill="#7aa2f7"/>
<circle cx="450" cy="150" r="4" fill="#7aa2f7"/>
<circle cx="550" cy="100" r="4" fill="#7aa2f7"/>
<circle cx="650" cy="50" r="4" fill="#7aa2f7"/>
<circle cx="750" cy="0" r="4" fill="#7aa2f7"/>
</svg>
</div>
<p style="font-family: monospace; font-size: 0.8rem; opacity: 0.7; margin-top: 1rem;">
Plot: T(k) vs k for k ∈ [1, 8]. Slope = T(1). Linearity holds.
</p>
</section>
<section>
<h2>III. BOUNDARY CONDITIONS</h2>
<p>Scaling fails when assumptions break:</p>
<ul style="margin-left: 2rem; font-size: 1rem;">
<li><strong>Load imbalance</strong> — Node idle time > 0 violates independence</li>
<li><strong>Network bottleneck</strong> — Frame distribution latency exceeds render time</li>
<li><strong>Storage contention</strong> — Shared disk I/O serializes parallel writes</li>
<li><strong>Task granularity</strong> — Frames too large to distribute cleanly</li>
</ul>
<div class="definition-box" style="margin-top: 2rem;">
<p><strong>EFFICIENCY FACTOR η</strong>:</p>
<p style="margin-top: 0.5rem; font-family: monospace;">η = T(actual) / T(ideal)</p>
<p style="margin-top: 1rem; opacity: 0.7;">Perfect cluster: η = 1.0. Real cluster: η ≈ 0.850.95. Anything below 0.7 indicates architecture failure.</p>
</div>
</section>
<section>
<h2>IV. PHYSICAL INSTANCES</h2>
<div class="metric-box">
<div class="metric">
<div class="metric-value">140</div>
<div class="metric-label">ft-lbs (Grade 8 bolt)</div>
</div>
<div class="metric">
<div class="metric-value">T⁻¹</div>
<div class="metric-label">(throughput dimension)</div>
</div>
<div class="metric">
<div class="metric-value">16</div>
<div class="metric-label">nodes (FIFA 2026 hubs)</div>
</div>
</div>
<p>Antonio's torque specification is the mechanical analog. 140 ft-lbs is not arbitrary — it is the yield threshold of Grade 8 steel. Similarly, T(k) = k × T(1) is not metaphor — it is the yield threshold of parallel computation.</p>
<p>FIFA 2026 requires 16 venues, 104 matches, simultaneous broadcast. The cluster size is determined by dividing required throughput by single-node capacity. Arithmetic. Nothing else.</p>
</section>
<section>
<h2>V. ARCHITECTURAL EVIDENCE</h2>
<img src="https://images.pexels.com/photos/37730212/pexels-photo-37730212.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Modern data center server racks showing linear scalability architecture">
<p style="font-size: 0.85rem; opacity: 0.7; margin-top: 0.5rem;">Server rack density determines node count. Each rack is a discrete unit of T(1). Total throughput = sum of all racks.</p>
</section>
<div class="citation">
SOURCE: Wikidata Q382597 (render_farm), Q7798498 (throughput) — CC0<br>
RELATED: render-farm-theory.html | render-farm-calculator.html | render-farm-spec.html<br>
IMAGE: Pexels photo 37730212 — license-clean, no attribution required
</div>
<nav class="nav">
<a href="index.html">INDEX</a>
<a href="render-farm-architecture.html">ARCHITECTURE</a>
<a href="render-farm-spec.html">SPECIFICATION</a>
<a href="render-farm-theory.html">THEORY</a>
<a href="render-farm-calculator.html">CALCULATOR</a>
<a href="throughput-q7798498.html">THROUGHPUT</a>
</nav>
</div>
</body>
</html>