275 lines
9.7 KiB
HTML
275 lines
9.7 KiB
HTML
|
|
<!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.85–0.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>
|