245 lines
8.9 KiB
HTML
245 lines
8.9 KiB
HTML
|
|
<!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 − ∏(1−P_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>
|