degradation-comparison/fault-tree-analysis.html
2026-07-18 19:32:55 +00:00

245 lines
8.9 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">
<title>Fault Tree Analysis | STREAM</title>
<style>
:root {
--bg: #0a0a0a;
--fg: #00ff41;
--dim: #008f24;
--border: #00ff41;
--mono: "SF Mono", "Menlo", "Monaco", "Consolas", "Liberation Mono", monospace;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body {
background: var(--bg);
color: var(--fg);
font-family: var(--mono);
font-size: 14px;
line-height: 1.6;
border: 1px solid var(--border);
min-height: 100vh;
padding: 2rem;
}
header {
border-bottom: 2px solid var(--border);
padding-bottom: 1rem;
margin-bottom: 2rem;
}
h1 { font-size: 2rem; letter-spacing: -0.05em; text-transform: uppercase; }
.subtitle { color: var(--dim); font-size: 0.9rem; margin-top: 0.5rem; }
nav { margin: 2rem 0; display: flex; gap: 1rem; flex-wrap: wrap; }
nav a {
color: var(--fg);
text-decoration: none;
border: 1px solid var(--dim);
padding: 0.3rem 0.8rem;
font-size: 0.8rem;
transition: all 0.1s;
}
nav a:hover { background: var(--fg); color: var(--bg); border-color: var(--fg); }
section { margin: 3rem 0; border-left: 1px solid var(--dim); padding-left: 1.5rem; }
h2 { font-size: 1.2rem; margin-bottom: 1rem; text-transform: uppercase; letter-spacing: 0.1em; }
p { margin: 1rem 0; max-width: 60ch; }
code { background: var(--dim); color: var(--bg); padding: 0.1rem 0.4rem; font-size: 0.9em; }
pre {
background: #000;
border: 1px solid var(--dim);
padding: 1rem;
overflow-x: auto;
margin: 1rem 0;
}
.fault-diagram {
width: 100%;
max-width: 800px;
border: 2px solid var(--border);
background: #000;
margin: 2rem 0;
position: relative;
}
svg { width: 100%; height: auto; display: block; }
.node { fill: var(--bg); stroke: var(--fg); stroke-width: 2; }
.node-label { fill: var(--fg); font-family: var(--mono); font-size: 12px; text-anchor: middle; }
.edge { stroke: var(--dim); stroke-width: 1; fill: none; }
.img-hero {
width: 100%;
max-width: 940px;
border: 2px solid var(--border);
margin: 2rem 0;
filter: grayscale(100%) contrast(1.2) sepia(0.3);
}
.citation {
color: var(--dim);
font-size: 0.8rem;
margin-top: 1rem;
display: inline-block;
border: 1px dashed var(--dim);
padding: 0.5rem;
}
.citation a { color: var(--fg); text-decoration: underline; }
.data-twin {
margin-top: 3rem;
border-top: 1px solid var(--dim);
padding-top: 1rem;
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<header>
<h1>Fault Tree Analysis</h1>
<p class="subtitle">failure analysis system for render farm node cascades // Q428453 × Q382597</p>
</header>
<nav>
<a href="/index.html">INDEX</a>
<a href="/render-farm-architecture.html">ARCHITECTURE</a>
<a href="/render-farm-theory.html">THEORY</a>
<a href="/render-farm-calculator.html">CALCULATOR</a>
<a href="/cluster-scaling.html">SCALING LAW</a>
<a href="/fault-tree-analysis.html">FAULT TREE</a>
</nav>
<section>
<h2>TOP EVENT</h2>
<p><strong>CLUSTER FAILURE:</strong> ≥50% of render nodes offline simultaneously.</p>
<p>This is not a philosophical question. It is a boolean condition evaluated every cycle. When true, the pipeline halts. When false, it runs.</p>
<img src="https://images.pexels.com/photos/37730212/pexels-photo-37730212.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Server rack close-up showing active equipment" class="img-hero">
</section>
<section>
<h2>GATE LOGIC</h2>
<p>Fault trees decompose failure into gates. Each gate is a logical operator. Each branch is a physical cause.</p>
<pre>
TOP EVENT: CLUSTER_FAILURE
├─ OR Gate: Any of the following triggers TOP
├─┬─ POWER_FAILURE (AND gate)
│ │ ├─ PSU_A_FAIL
│ │ └─ PSU_B_FAIL
│ │
│ ├─ COOLING_FAILURE (OR gate)
│ │ ├─ CRAC_UNIT_DOWN
│ │ └─ HOTSPOT_TEMP > 85°C
│ │
│ └─ NETWORK_PARTITION (AND gate)
│ ├─ SWITCH_A_DOWN
│ └─ SWITCH_B_DOWN
└─ SOFTWARE_CASCADE (OR gate)
├─ DRIVER_CRASH
└─ QUEUE_MANAGER_HANG
</pre>
<p><strong>Probability:</strong> P(TOP) = 1 ∏(1P_i) for OR gates; P(TOP) = ∏P_i for AND gates.</p>
</section>
<section>
<h2>SVG DIAGRAM</h2>
<div class="fault-diagram">
<svg viewBox="0 0 800 600" xmlns="http://www.w3.org/2000/svg">
<!-- Background -->
<rect width="800" height="600" fill="#000"/>
<!-- Grid -->
<defs>
<pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#003300" stroke-width="1"/>
</pattern>
</defs>
<rect width="800" height="600" fill="url(#grid)"/>
<!-- Top Event -->
<ellipse cx="400" cy="60" rx="60" ry="30" class="node"/>
<text x="400" y="65" class="node-label">CLUSTER</text>
<text x="400" y="80" class="node-label">FAILURE</text>
<!-- OR Gate -->
<rect x="360" cy="100" width="80" height="50" class="node" rx="5"/>
<text x="400" y="130" class="node-label">OR</text>
<!-- Branches -->
<path d="M 400 90 L 400 100 M 400 150 L 400 200" class="edge"/>
<!-- Power Failure AND Gate -->
<rect x="200" y="200" width="80" height="50" class="node" rx="5"/>
<text x="240" y="230" class="node-label">POWER</text>
<text x="240" y="245" class="node-label">FAIL</text>
<path d="M 400 200 L 240 200" class="edge"/>
<!-- Cooling Failure OR Gate -->
<rect x="400" y="200" width="80" height="50" class="node" rx="5"/>
<text x="440" y="230" class="node-label">COOLING</text>
<text x="440" y="245" class="node-label">FAIL</text>
<path d="M 400 200 L 440 200" class="edge"/>
<!-- Network Partition AND Gate -->
<rect x="600" y="200" width="80" height="50" class="node" rx="5"/>
<text x="640" y="230" class="node-label">NETWORK</text>
<text x="640" y="245" class="node-label">PART</text>
<path d="M 400 200 L 640 200" class="edge"/>
<!-- Software Cascade OR Gate -->
<rect x="320" y="350" width="80" height="50" class="node" rx="5"/>
<text x="360" y="380" class="node-label">SOFTWARE</text>
<text x="360" y="395" class="node-label">CASCADE</text>
<path d="M 400 200 L 400 300 L 360 350" class="edge"/>
<!-- Leaf Nodes -->
<circle cx="160" cy="300" r="20" class="node"/>
<text x="160" y="305" class="node-label">PSU_A</text>
<path d="M 200 225 L 160 300" class="edge"/>
<circle cx="280" cy="300" r="20" class="node"/>
<text x="280" y="305" class="node-label">PSU_B</text>
<path d="M 280 225 L 280 300" class="edge"/>
<circle cx="400" cy="300" r="20" class="node"/>
<text x="400" y="305" class="node-label">CRAC</text>
<path d="M 400 225 L 400 300" class="edge"/>
<circle cx="480" cy="300" r="20" class="node"/>
<text x="480" y="305" class="node-label">HOT</text>
<path d="M 480 225 L 480 300" class="edge"/>
<circle cx="560" cy="300" r="20" class="node"/>
<text x="560" y="305" class="node-label">SW_A</text>
<path d="M 600 225 L 560 300" class="edge"/>
<circle cx="720" cy="300" r="20" class="node"/>
<text x="720" y="305" class="node-label">SW_B</text>
<path d="M 680 225 L 720 300" class="edge"/>
<circle cx="280" cy="450" r="20" class="node"/>
<text x="280" y="455" class="node-label">DRV</text>
<path d="M 320 375 L 280 450" class="edge"/>
<circle cx="440" cy="450" r="20" class="node"/>
<text x="440" y="455" class="node-label">QM</text>
<path d="M 400 375 L 440 450" class="edge"/>
<!-- Legend -->
<rect x="650" y="520" width="120" height="60" fill="none" stroke="#008f24" stroke-dasharray="4 2"/>
<text x="660" y="540" fill="#008f24" font-size="10">LEGEND</text>
<circle cx="665" cy="555" r="5" fill="none" stroke="#00ff41" stroke-width="2"/>
<text x="680" y="560" fill="#00ff41" font-size="9">EVENT</text>
<rect x="665" y="565" width="10" height="10" fill="none" stroke="#00ff41" stroke-width="2"/>
<text x="680" y="575" fill="#00ff41" font-size="9">GATE</text>
</svg>
</div>
<p><strong>Diagram:</strong> Top-event decomposition. Ellipse = TOP, Rectangles = Gates, Circles = Basic Events. Lines = causal edges.</p>
</section>
<section>
<h2>CUT SETS</h2>
<p>A minimal cut set is the smallest combination of basic events that guarantees TOP.</p>
<ul>
<li><strong>Cut Set 1:</strong> {PSU_A, PSU_B}</li>
<li><strong>Cut Set 2:</strong> {CRAC} {HOT}</li>
<li><strong>Cut Set 3:</strong> {SW_A, SW_B}</li>
<li><strong>Cut Set 4:</strong> {DRV} {QM}</li>
</ul>
<p><strong>Mitigation:</strong> Eliminate any single member of a Cut Set to break the path.</p>
</section>
<section>
<h2>DATA TWIN</h2>
<p>Machine-readable gate definitions for agent consumption.</p>
<p><a href="/fault-tree-analysis.json" class="citation">/fault-tree-analysis.json</a></p>
</section>
<footer class="data-twin">
<p class="citation">
Grounded in <a href="https://4ort.xyz/entity/fault-tree-analysis">fault-tree-analysis (Q428453)</a> × <a href="https://4ort.xyz/entity/render-farm">render-farm (Q382597)</a><br>
built on <a href="/render-farm-theory.html">theory</a>, extended from <a href="/cluster-scaling.html">scaling law</a>
</p>
</footer>
</body>
</html>