Messkette vom 11.09.2026: was hält, was nicht
Maschine: RTX 3070 Laptop (8 GB), Treiber 580.178.04, Triton 2.70.0
(26.06), ONNX-Modelle, System Shared Memory, Messung auf taskset -c 8-15.
Binaries vom Stand b0b36b5, also mit TCP_NODELAY in den Werkzeugen. Die
Kette davor (11c) wurde nach acht Minuten abgebrochen, weil sie ohne diese
Korrektur lief (arm-serve).
Zwei Läufe: die Kette 11d (15:25–16:52) und ein Nachlauf 11e
(16:55–17:44) für die Blöcke, die der Lastwächter als verschmutzt markiert
hatte oder die ein Aufbaufehler entwertet hatte. Rohdaten, Wächterprotokoll
und Taktmitschnitt: InferenceQoS-runtime/messungen/measure-chain-2026-09-11d/ und
.../measure-nachlauf-2026-09-11e/.
Gültigkeit. Der Wächter schreibt alle 30 s jeden fremden Prozess über 30 % CPU mit. Im Nachlauf gab es in 91 Proben keinen einzigen. In der Kette markierte er Browserlast (Chrome bis 117 %) und Gradle-Builds einer anderen Sitzung (Java bis 500 %). Unten steht bei jeder Tabelle, aus welchem Lauf sie stammt; verschmutzte Blöcke sind entweder ersetzt oder als solche benannt.
Datenpfadbudgets (NV-20): bestanden
Kette, ohne Fremdlast.
| Pfad | Nutzlast | Zusatz p50 | Anteil | Urteil |
|---|---|---|---|---|
| Mock, Shm | 150 KB / 1,2 MB / 6,2 MB | +223 / +236 / +210 µs | 3,2–3,6 % | PASS |
| Mock, gRPC-Kopie | 150 KB | +316 µs | 4,8 % | PASS |
| Mock, gRPC-Kopie | 1,2 / 6,2 MB | +1121 / +4771 µs | 16 / 46 % | nicht budgetiert, gehört auf den Shm-Pfad |
| Triton, Shm (Pose, 2,3 MB) | — | +159 µs | — | PASS |
Der Shm-Zusatz hängt nicht von der Nutzlast ab (ADR-0003). Die p99-Spalte der Werkzeuge ist die Differenz zweier p99-Quantile, nicht das p99 der paarweisen Zusatzkosten; das sagt der externe Review zu Recht, und die Tabelle nennt sie deshalb nicht.
Stationäre Rampe: der Kern hält, die Kante ist zu vorsichtig
Kette; zwei kurze Browserproben von rund 40 % CPU. Unabgedeckte Perioden des Detektors (Median über drei Läufe) und des schlechtesten Stroms.
| Last | Detektor Triton | Detektor Vigilant | Faktor | alle Ströme T / V |
|---|---|---|---|---|
| 50–90 % | 0 ‰ | 0 ‰ | — | 0 / 0 ‰ |
| 100 % | 0 ‰ | 0 ‰ | — | 0 / 165 ‰ |
| 110 % | 342 ‰ | 14 ‰ | 24x | 342 / 102 ‰ |
| 125 % | 457 ‰ | 22 ‰ | 21x | 457 / 450 ‰ |
| 150 % | 500 ‰ | 4 ‰ | 125x | 500 / 996 ‰ |
Über 100 % hält der Governor den geschützten Strom und gibt die übrigen
auf — das ist gewollt, und es kostet: bei 150 % verfehlen sie fast jede
Periode. Genau bei 100 % verfehlt Triton nichts, der Governor verwirft
165 ‰ eines nachrangigen Stroms. Die erste Vermutung — er plane mit 110 %
Marge und sehe echte 100 % als 110 % — hat die Simulation derselben Last
widerlegt: Bis 105 % liefern feste 110 %, feste 100 % und eine gelernte Marge
exakt dieselbe Abdeckung, weil der Plan nur auf Look-ahead und Variantenwahl
wirkt und der Look-ahead an der Kante nicht vetoiert. Nächster Kandidat ist
die Lücke zwischen zwei Aufträgen bei pipelining_depth: 0: Der Governor
startet den nächsten erst nach der Antwort auf den vorigen, Triton direkt hat
bis zu acht offen. Die Messung dazu steht aus.
Lastspitzen: kein Gewinn, im dritten Profil ein Verlust
Nachlauf, ohne Fremdlast. Die Kette zeigte dieselbe Richtung (1,3x, 1,8x, −1,4x), ihr drittes Profil lief unter Browserlast.
| Profil (Grundlast → Spitze, Dauer/Abstand) | Detektor Triton | Detektor Vigilant | Faktor | längste Lücke T / V | alle Ströme T / V |
|---|---|---|---|---|---|
| 90 → 150 %, 200/2000 ms | 90 ‰ | 95 ‰ | −1,1x | 21 / 14 ms | 90 / 105 ‰ |
| 90 → 150 %, 500/2000 ms | 102 ‰ | 82 ‰ | 1,2x | 22 / 14 ms | 102 / 117 ‰ |
| 75 → 150 %, 1000/4000 ms | 11 ‰ | 41 ‰ | −3,7x | 22 / 12 ms | 11 / 70 ‰ |
Der Governor hält die längste Lücke kürzer (12–14 gegen 21–22 ms), verfehlt aber mehr Perioden, und bei langen Spitzen über niedriger Grundlast deutlich mehr. Zwei Dinge sind offen: die Ursache (eine Analyse läuft) und das Szenario selbst — hier heißt eine Spitze, dass dieselbe Kamera schneller liefert, als ihr Vertrag sagt. Realistischer ist eine zusätzliche Kamera oder eine Häufung von Anfragen nach einem Alarm (S7).
Nachtrag, Analyse (bursts-and-frontier).
Die Zahlen oben sind die Fenstersicht. Im Simulator mit denselben Strömen,
Verträgen und Aufnahmezeitpunkten verfehlen Governor und FIFO dort
gleichermaßen 59–95 ‰ der Detektorfenster und in der Verbrauchersicht keine
einzige Abtastung; eine halbe Millisekunde mehr Transport verschiebt die
Fenstersicht um 20 ‰. Der Unterschied 41 gegen 11 ‰ ist deshalb kein
belegter Unterschied in der Versorgung. load-ramp zeigt ab jetzt beide
Sichten; die Messung ist zu wiederholen.
Variantenwahl (Frontier): stark bei Überlast, eine Anomalie bei 90 %
Nachlauf, ohne Fremdlast. Ein Detektor allein, große und kleine Variante.
| Last (effektiv) | nur groß | nur klein | auto | auto ohne Dwell |
|---|---|---|---|---|
| 50 / 75 % | 0 ‰ | 0 ‰ | 0 ‰ | 0 ‰ |
| 90 % | 105 ‰ | 0 ‰ | 143 ‰ | 170 ‰ |
| 100 % (97 %) | 1 ‰ | 0 ‰ | 2 ‰ | 1 ‰ |
| 110 % (106 %) | 74 ‰ | 0 ‰ | 66 ‰ | 162 ‰ |
| 125 % (127 %) | 310 ‰ | 0 ‰ | 84 ‰ | 384 ‰ |
| 150 % (159 %) | 501 ‰ | 0 ‰ | 2 ‰ | 0 ‰ |
Bei 150 % hält die automatische Wahl den Strom, wo die große Variante die Hälfte verfehlt. Aber bei 90 % verfehlt schon die große Variante allein mehr als bei 100 %, und die automatische Wahl bleibt dort vollständig auf ihr, statt herunterzuschalten. Bei 110–125 % schaltet sie zu spät. Das hat sich in beiden Läufen gezeigt, in der Kette mit 126/162 ‰ bei 90 %. Die Hysterese (Dwell) hilft: ohne sie ist es bei 110–125 % schlechter. Eine Analyse läuft; die Vermutung ist Aliasing zwischen Periode und Laufzeit bei 90 % und eine Wahl, die auf die geplante Laufzeit statt auf verfehlte Perioden schaut.
Nachtrag, Analyse (bursts-and-frontier).
Beides trifft zu, mit einer genaueren Ursache. Der Vertrag (deadline =
1,5 P, max_age = 2 P) lässt zu, dass ein Frame seine Deadline hält und der
Verbraucher trotzdem eine Lücke hat: das vorige Ergebnis läuft schon P nach
dieser Aufnahme ab. Die Variantenwahl prüfte nur die Deadline und blieb
deshalb auf der großen Variante, auch wo deren Laufzeit an die Periode
reichte. Der Simulator trifft auto bei 110 und 125 % mit 71 und 84 ‰; seit
der Korrektur wählt sie die beste Variante, die vor Aufnahme + max_age − P
fertig wird, und verfehlt dort 0 ‰ wie die kleine. Die 1–2 ‰ bei 100 % sind
die zu gute Fenstersicht einer gesättigten Variante: im Simulator fehlt dort
bei der Hälfte der Abtastungen ein brauchbares Ergebnis. frontier zeigt ab
jetzt beide Sichten.
XSched und Präemption (NV-15)
Zwei Tritonprozesse: A mit Detektor, Pose, Tiefe (Priorität hoch), B mit dem VLM (niedrig). Abdeckung Triton / Vigilant, drei Läufe je Zeile.
| Aufbau | Detektor | Pose | Tiefe | VLM | Lauf |
|---|---|---|---|---|---|
| ohne XSched | 93 / 100 % | 100 / 100 % | 100 / 100 % | 100 / 0 % | Kette, sauber |
| XSched Level 2 | 100 / 100 % | 100 / 99–100 % | 100 / 100 % | 100 / 0 % | Kette, Lauf 1 verschmutzt |
| XSched TSG, Level 3 | 100 / 100 % | 100 / 100 % | 100 / 100 % | 100 / 0 % | Nachlauf, sauber |
| Level 2, Vigilant mit Lane, R = 14 ms (angegeben) | 95–99 / 100 % | 100 / 99 % | 100 / 100 % | 100 / 83–98 % | Kette |
| Level 2, Vigilant mit Lane, R = 4 ms | 100 / 100 % | 100 / 100 % | 100 / 100 % | 100 / 100 % | Nachlauf, sauber |
Mit Präemption löst Triton allein, was ohne sie nur der Governor konnte: Die geschützten Ströme liegen bei 100 %, und das VLM läuft trotzdem, mit einem Antwortalter p95 von rund 200 ms statt 111 ms ohne XSched.
Der Governor mit Lane und passendem R zieht gleich. Alle Ströme liegen bei 100 %. Die Detektorantworten sind frischer (p95 18–21 gegen 24–25 ms), Pose und Tiefe etwas älter (21–32 gegen 13–19 ms), das VLM etwas älter (218–290 gegen 195–200 ms). Mehr bringt er in diesem Aufbau nicht. Sein Vorteil liegt dort, wo Präemption fehlt, und bei Überlast, die Präemption nicht beseitigt, weil sie keine Rechenzeit schafft.
R ist nicht gemessen. vig calibrate verwarf alle vier Messreihen, weil
der Takt während jeder Reihe wanderte (Leistungslimit, Fremdlast); die
Schwelle wird dafür nicht gelockert. Die 4 ms sind eine Schätzung aus den
Läufen mit XSched: Das Antwortalter p95 des Detektors liegt dort rund 3,5 ms
über seiner Laufzeit. Mit den angegebenen 14 ms warnt vig doctor zu Recht,
dass Laufzeit plus R die Frist sprengt; das VLM kommt dann seltener und
später dran (83–98 %, p95 bis 870 ms). R gehört gemessen — mit festem Takt
oder, ohne Rechte dafür, online aus dem laufenden Betrieb (ADR-0038).
Die Zeile „TSG“ der Kette gilt nicht. Das Startskript setzte Level 2 auch
für TSG; TSG wirkt erst ab Level 3 (Review R06, behoben in 64c9d06). Die
Zeile oben stammt aus dem Nachlauf mit Level 3.
Was XSched kostet, steht erst seit dem 12.09. in Zahlen. Der Shim verlangsamt den geschützten Pfad selbst: derselbe Referenztest auf derselben Karte, nur mit Shim, braucht beim Detektor p50 32,5 statt 27,7 ms und p99 34,4 statt 28,7 ms — 17 bis 20 % mehr Laufzeit (Pilot mit Präemption). In den Tabellen oben ist davon nichts zu sehen, weil die Abdeckung dort ohnehin am Anschlag liegt; auf einer Last, die enger liegt, ist es der Preis der Präemption.
Was daraus folgt
| Befund | Stand | Nächster Schritt |
|---|---|---|
| Stationäre Überlast: 21–125x beim Detektor | hält | — |
| Datenpfad: +159–236 µs, alle Budgets | bestanden | Budgets je Plattform (ARM, arm-serve) |
| Kante bei 100 %: 165 ‰ Verlust eines nachrangigen Stroms | Schwäche, Ursache offen (nicht die Marge) | Messung mit Pipelining |
| Lastspitzen: kein Gewinn, einmal −3,7x | Fenstersicht misst dort Phase, Versorgung unbelegt (Analyse) | Neu messen mit Verbrauchersicht; Szenario S7 statt schnellerer Kamera |
| Variantenwahl: stark bei 150 %, falsch bei 90 %, spät bei 110–125 % | Ursache belegt, behoben im Simulator (Analyse) | frontier auf dem neuen Stand |
| Präemption: Triton + XSched ≈ Vigilant + Lane | Gleichstand, VLM erstmals 100 % unter dem Governor | R messen (ADR-0038 oder fester Takt) |
| Pilot (Aufgabenmetriken) | nicht gelaufen | erst nach den Pufferfehlern aus dem Review (R03, R07) |