Welche Latenz sollten Teams für ein Desktop-Ausführungs-Gateway fordern?
Legen Sie Latenzziele für Desktop-Ausführungs-Gateways bei p50 und p95 fest, vergleichen Sie direkte und vermittelte HTTP- und SSH-Aufrufe und messen Sie die Bestätigungszeit getrennt.

Ein Desktop-Ausführungs-Gateway verdient seinen Platz nur, wenn seine Maschinenverzögerung unterhalb dessen bleibt, was bei interaktiver Arbeit auffällt, und seine Bestätigungsverzögerung separat ausgewiesen wird. Ich würde einen Rollout nicht anhand eines Durchschnitts, eines einzelnen Warmdurchlaufs oder eines Diagramms freigeben, das den Griff einer Person nach Touch ID mit der Ausführungszeit der Software vermischt. Solche Zahlen sehen vielleicht ordentlich aus, sagen einem Engineering-Team aber nicht, ob das Gateway einen Bearbeiten-Testen-Zyklus unterbricht.
Für gewöhnliche HTTP-Aufrufe und bereits verbundene SSH-Arbeit nutze ich als vorläufige Einführungshürde höchstens 25 ms zusätzlich bei p50 und 75 ms bei p95 auf den Macs der Zielentwickler. Für frische SSH-Verbindungen gilt ein separates, größeres Budget: höchstens 50 ms zusätzlich bei p50 und 150 ms bei p95. Das sind Ausgangsanforderungen, keine universellen Konstanten. Ein Team sollte sie an seiner direkten Baseline, Aufruffrequenz, seinem Netzwerk und Wahrnehmungstests ausrichten. Der folgende Test liefert die nötigen Belege, ohne einen langsamen Tail hinter einem guten Median zu verstecken.
Perzentile müssen dieselbe Operation beschreiben
Die Werte p50 und p95 sind nur aussagekräftig, wenn jede Probe dieselbe Grenze beschreibt. p50 ist der Median: Die Hälfte der beobachteten Aufrufe endete bei oder unter diesem Wert. p95 ist der Wert, bei oder unter dem 95 Prozent endeten. In einem Lauf mit 200 sortierten Proben ist p95 nach der Nearest-Rank-Definition der 190. Wert. So bleiben zehn langsamere Beobachtungen im Tail sichtbar, statt im Durchschnitt zu verschwinden.
Definieren Sie die Grenze als Zeit vom Start einer Operation durch den Aufrufer bis zum vollständigen Ergebnis beim Aufrufer. Das ist die Verzögerung, die ein Programmieragent erlebt. Sie umfasst lokale Prozessarbeit, Transport zum Ziel, Remote-Ausführung, Rückübertragung und jede Gateway-Arbeit auf diesem Pfad. Sie schließt die Einrichtung des Benchmarks aus und im unbeaufsichtigten Durchlauf auch die menschliche Bestätigung.
Teams vergleichen oft unterschiedliche Grenzen. Ein direktes HTTP-Diagramm kann etwa time_starttransfer von curl verwenden, während das Gateway-Diagramm die gesamte Wall-Time um einen Prozessaufruf misst. Das erste endet beim ersten Antwortbyte, das zweite erst, wenn das Ergebnis serialisiert und zurückgegeben wurde. Das Gateway verliert, bevor der Test beginnt. Wählen Sie für beide Pfade die vollständige Fertigstellung und behalten Sie Phasenzeiten als Diagnose-Spalten bei.
Dasselbe gilt für SSH. Eine neue TCP-Verbindung, SSH-Handshake, Authentifizierung, Remote-Befehl und Trennung bilden eine Operation. Ein Befehl über eine bestehende multiplexte Verbindung ist eine andere Operation. Berichten Sie sie in getrennten Zeilen. Eine Mischung erzeugt eine Verteilung, deren p50 vor allem Wiederverwendung beschreibt und deren p95 überwiegend den Verbindungsaufbau. Keine Grenzvorgabe kann eine vermischte Population reparieren.
Berichten Sie für jede Operationsklasse mindestens diese Spalten:
- direkte p50- und p95-Wall-Time
- vermittelte p50- und p95-Wall-Time
- zusätzliche p50 und p95, aus gepaarten Proben berechnet
- Probenanzahl, Fehler und Timeouts
- Host, Netzwerkbedingung, Gateway-Version und Bestätigungsmodus
Die gepaarte zusätzliche Latenz ist wichtiger als zwei Schlagzeilen-Perzentile voneinander abzuziehen. Berechnen Sie für Probe i unter derselben Testbedingung delta_i = brokered_i - direct_i und nehmen Sie anschließend p50 und p95 der Deltas. p95(brokered) - p95(direct) liefert nützlichen Kontext, ist aber nicht der p95-Overhead und kann sogar eine Korrelation zwischen Netzwerkausschlägen und Gateway-Arbeit verdecken.
Ein Benchmark-Vertrag verhindert bequeme Ergebnisse
Schreiben Sie den Benchmark-Vertrag vor dem Lauf, denn fast jede versehentliche Optimierung verändert die Frage. Erfassen Sie Mac-Modell und macOS-Version, Stromversorgung, thermischen Zustand, Netzwerkpfad, Region des Zielhosts, HTTP-Protokoll, SSH-Cipher-Aushandlung, Payload-Größen, Antwortgrößen, Timeout, Parallelität und Verbindungswiederverwendung. Die Hintergrundlast sollte einem Entwickler-Mac entsprechen. Ein makelloser Laptop mit geschlossenem Editor und Build-Prozess beantwortet eine Laborfrage.
Verwenden Sie ein lokales Ziel und ein realistisches Remote-Ziel. Das lokale Ziel legt den Maschinen-Overhead offen, weil die Netzwerkschwankung gering ist. Das Remote-Ziel zeigt, ob dieser Overhead neben realer Transportverzögerung noch ins Gewicht fällt. Ein Gateway, das 40 ms zu einer 3-ms-Loopback-Anfrage hinzufügt, fühlt sich völlig anders an als dieselbe Zugabe zu einem 300-ms-Remote-Aufruf. Beide Ergebnisse gehören dennoch in den Bericht.
Erstellen Sie Operationsklassen statt einer gemischten Suite. Ein sinnvoller Mindestumfang umfasst eine kleine HTTP-Antwort auf einer wiederverwendeten Verbindung, eine kleine HTTP-Antwort auf einer neuen Verbindung, eine frische SSH-Verbindung mit true und einen SSH-Befehl über eine bereits verfügbare Verbindung. Ergänzen Sie je eine repräsentative Anfrage und Antwort aus dem Programmier-Workflow des Teams. Nutzen Sie für Latenztests keine destruktive API und keinen Produktions-SSH-Host.
Führen Sie einen Warmup durch, der nie in die Probenmenge eingeht. Sammeln Sie anschließend mindestens 200 gemessene Aufrufe je Klasse und wechseln Sie zwischen direkter und vermittelter Reihenfolge ab. Wenn immer zuerst der direkte Aufruf läuft, wird eine spätere thermische Änderung, Netzwerkänderung, ein DNS-Cache oder Server-Cache zum Gateway-Overhead. Zufällige Reihenfolge ist ebenfalls möglich, striktes Alternieren lässt sich aber leichter prüfen.
Halten Sie die Parallelität im interaktiven Benchmark bei eins. Ein Agent, der auf ein Tool-Ergebnis wartet, arbeitet seriell. Führen Sie einen zweiten Lasttest aus, wenn mehrere Agenten das Gateway teilen werden, kennzeichnen Sie ihn aber als Kapazitätstest. Ein Test mit 20 parallelen Aufrufen kann Warteschlangengrenzen aufdecken, ersetzt aber kein Ergebnis zur Latenz einzelner Aufrufe.
Fehler bleiben im Bericht. Erfassen Sie einen Timeout als Fehler mit seiner abgelaufenen Timeout-Zeit und veröffentlichen Sie die Fehlerquote neben den Perzentilen. Fehler still zu entfernen belohnt einen Pfad, der schnell scheitert oder seine langsamsten Aufrufe verliert. Wenn einer der Pfade so oft scheitert, dass sein p95 instabil ist, diskutieren Sie keine Millisekunden, sondern beheben Sie zuerst die Zuverlässigkeit.
HTTP messen, ohne seine Semantik zu verändern
Verwenden Sie für direkte und vermittelte HTTP-Aufrufe dieselbe Methode, URL, Header, den gleichen Body, Timeout und dieselbe Antwortverarbeitung. Die Quelle der Zugangsdaten darf sich unterscheiden, weil ihre Abschottung der Zweck des Gateways ist. Der Server muss die Anfragen aber mit gleichwertiger Semantik sehen. Prüfen Sie vor der Timing-Erfassung, dass beide Varianten denselben Status, die ausgewählten Antwort-Header und denselben Body-Hash erhalten.
curl stellt über seine dokumentierten Write-out-Variablen hilfreiche Phasen-Uhren bereit. time_connect endet nach Abschluss der Netzwerkverbindung, time_appconnect schließt den TLS-Handshake ein, time_starttransfer reicht bis zum ersten Antwortbyte und time_total bis zur vollständigen Fertigstellung. Diese Werte helfen, eine Regression einzugrenzen. Die Wall-Time des Aufrufers bleibt aber die Vergleichsgrenze, weil ein Broker vor curl oder nach der Upstream-Antwort arbeiten kann.
Dieser direkte Probeaufruf gibt vier Felder in Sekunden aus, ohne einen Link hinzuzufügen oder Fortschrittsausgaben zu parsen:
curl -sS -o /dev/null -w '%{time_connect} %{time_appconnect} %{time_starttransfer} %{time_total}
' -H "$AUTH_HEADER" "$ENDPOINT"
Für die gepaarte Messung legen Sie den vollständigen direkten Aufruf in DIRECT_CMD und den vollständigen Gateway-Aufruf in BROKER_CMD. Der folgende Runner wechselt ihre Reihenfolge ab, verwendet eine monotone Uhr, bewahrt Fehler und gibt für jede Beobachtung ein JSON-Objekt aus. Er behandelt jeden Befehl bewusst als Argumentvektor, damit Shell-Operatoren und Erweiterungen nicht in den Benchmark geraten.
import json
import os
import shlex
import subprocess
import time
samples = int(os.environ.get("SAMPLES", "200"))
timeout = float(os.environ.get("TIMEOUT", "10"))
commands = {
"direct": shlex.split(os.environ["DIRECT_CMD"]),
"brokered": shlex.split(os.environ["BROKER_CMD"]),
}
for n in range(10):
label = "direct" if n % 2 == 0 else "brokered"
subprocess.run(commands[label], stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL, timeout=timeout)
for n in range(samples):
order = ("direct", "brokered") if n % 2 == 0 else ("brokered", "direct")
for label in order:
started = time.monotonic_ns()
try:
result = subprocess.run(commands[label], capture_output=True,
timeout=timeout)
ok = result.returncode == 0
code = result.returncode
except subprocess.TimeoutExpired:
ok = False
code = None
elapsed_ms = (time.monotonic_ns() - started) / 1_000_000
print(json.dumps({"pair": n, "path": label, "ms": elapsed_ms,
"ok": ok, "code": code}, separators=(",", ":")))
Speichern Sie die Ausgabe in einer JSON-Lines-Datei. Vergleichen Sie vor der Latenzberechnung Erfolgs-Codes und Antwort-Hashes außerhalb der gemessenen Schleife. Eine vermittelte Anfrage, die weniger Daten zurückgibt, wirkt schneller. Eine direkte Anfrage, die Weiterleitungen folgt, während der Broker es nicht tut, misst eine andere Arbeit.
Die Verbindungswiederverwendung braucht explizite Kontrolle. Wenn das Agentenprotokoll und das Gateway eine Upstream-HTTP-Verbindung halten, vergleichen Sie das mit einem direkten Client, der ebenfalls eine Verbindung hält. Einen neuen curl-Prozess für jede direkte Probe zu starten, kann die Wiederverwendung verhindern und den vermittelten Pfad besser aussehen lassen. Bei einem prozessbasierten Test erzwingen Sie entweder auf beiden Seiten neue Verbindungen oder bauen zwei kleine persistente Clients. Veröffentlichen Sie, wofür Sie sich entschieden haben.
SSH braucht Messungen für frische und wiederverwendete Verbindungen
Bei einem kurzen Remote-Befehl dominiert oft der SSH-Aufbau. Ein einzelnes SSH-Perzentil sagt daher wenig aus. Das OpenSSH-Client-Handbuch dokumentiert Verbindungsfreigabe mit ControlMaster und ControlPersist. Bei aktivierter Freigabe können spätere Sitzungen eine bestehende Netzwerkverbindung nutzen, statt Transportaufbau und Authentifizierung zu wiederholen. Das ist eine gültige Produktionsoptimierung, aber nur, wenn beide Pfade dieselbe Möglichkeit dazu erhalten.
Für die Klasse frischer Verbindungen deaktivieren Sie die Freigabe, führen einen harmlosen Befehl wie true aus und trennen die Verbindung wieder. Ein direkter Befehl kann auf einem dedizierten Testhost so aussehen:
ssh -F /dev/null -o BatchMode=yes -o ControlMaster=no -o ConnectTimeout=10 "$TEST_HOST" true
Nutzen Sie für den gepaarten vermittelten Aufruf die normale SSH-Aktion des Gateways mit demselben Host, Benutzer und Remote-Befehl. Zwingen Sie das Gateway nicht in ein künstliches Setup, das der Agent nie verwenden würde. Lassen Sie stattdessen den direkten Pfad dem dokumentierten Verbindungsverhalten des Gateways entsprechen oder erklären Sie den Architekturunterschied im Ergebnis.
Für die wiederverwendete Klasse bauen Sie die Verbindung vor dem Warmup auf und führen während der Probenahme nur den Remote-Befehl true aus. Verifizieren Sie die Wiederverwendung, statt sie anzunehmen. Ausführliche OpenSSH-Diagnosen können zeigen, ob der Client einen Control-Socket kontaktiert. Das Gateway sollte genügend Diagnosezeiten oder Logs bereitstellen, um die Wiederverwendung des Transports zu belegen. Wenn sie nicht nachweisbar ist, nennen Sie die Klasse „unbekannter Verbindungsstatus“ und vergleichen Sie sie nicht mit einem nachweislich wiederverwendeten Pfad.
Wiederholen Sie den Test dann mit einer echten, nicht destruktiven Aufgabe, etwa dem Lesen einer kleinen festen Datei oder einer Statusabfrage bei einem Testdienst. true isoliert Verbindungs- und Ausführungsmechanik, deckt aber keine Ausgabeübertragung, Dekodierung oder Ergebnisgrenzen ab. Halten Sie den Dateiinhalt konstant und hashen Sie die zurückgegebenen Bytes.
Auch die SSH-Authentifizierung verändert den Vergleich. Ein Agent sollte keinen privaten Schlüssel erhalten, nur damit eine direkte Baseline bequem wird. Führen Sie den direkten Pfad in einem isolierten Harness mit gleichwertigem Netzwerkzugang aus und behandeln Sie seine Offenlegung von Zugangsdaten als Benchmark-Fixture, nicht als empfohlenes Design. Latenz zeigt die Kosten der Vermittlung. Sie entscheidet nicht, ob es akzeptabel ist, einem autonomen Prozess einen Schlüssel zu geben.
Das Gateway um seine eigene Arbeit herum instrumentieren
Eine externe Stoppuhr belegt das sichtbare Ergebnis für den Nutzer, interne Zeitstempel erklären es. Fügen Sie monotone Zeitstempel bei Eingang, abgeschlossener Anfragevalidierung, abgeschlossener Autorisierungsentscheidung, abgeschlossener Zugangsdatenoperation, Upstream-Versand, erstem Upstream-Byte, Upstream-Abschluss, Audit-Commit und Ergebnisauslieferung hinzu. Erfassen Sie Dauern oder eine gemeinsame Trace-ID, aber keine Geheimnisse oder Anfrage-Bodies.
Diese Zeitstempel teilen die zusätzliche Maschinenverzögerung in Bereiche auf, auf die ein Team reagieren kann:
- lokales Parsen und Serialisieren des Protokolls
- Autorisierungsabfrage und mögliche Wartezeit in der Warteschlange
- Vault- oder Zugangsdatenoperation
- Einrichtung des Upstream-Clients und Beschaffung einer Verbindung
- Audit-Persistenz und Rückgabe des Ergebnisses
Vergleichen Sie keine Wall-Clock-Zeitstempel aus getrennten Prozessen, wenn das Messdesign Uhrunterschiede nicht behandelt. Auf einem Mac ist eine monotone Uhr in jedem Prozess für Dauern stabil, ihre Ursprünge stimmen aber möglicherweise zwischen Laufzeiten nicht überein. Am sichersten meldet jede Komponente ihre eigene Dauer und die Datensätze werden über eine undurchsichtige Test-ID zusammengeführt.
Audit-Arbeit gehört innerhalb der gemessenen Grenze, wenn das Gateway zusagt, dass eine Aktion vor der Erfolgsmeldung erfasst wird. Den Schreibvorgang nach die Antwort zu verschieben, kann einen Benchmark gewinnen, indem die Zusage geschwächt wird. Batching kann legitim sein, der veröffentlichte Dauerhaftigkeitspunkt muss jedoch der Produktion entsprechen. Der Test sollte das Produkt messen, das Menschen verwenden werden, mit aktiviertem normalen Journal und den üblichen Sicherheitskontrollen.
Erstellen Sie ein Profil erst, nachdem Phasendaten einen verdächtigen Bereich zeigen. Steigt p50 mit der Antwortgröße, prüfen Sie Kopien und Serialisierung. Steigt p95 bei gleichbleibendem p50, prüfen Sie Locks, Wartezeiten, Audit-Flushes, fehlende Connection-Pool-Treffer und Betriebssystem-Scheduling. Ein CPU-Profil eines unauffälligen Median-Aufrufs erklärt selten einen Stillstand im Tail.
Schützen Sie auch den Benchmark vor Beobachtungskosten. Detailliertes Logging ins Terminal kann blockierendes I/O hinzufügen. Schreiben Sie kompakte Datensätze in eine Datei oder einen In-Memory-Puffer, messen Sie einmal mit aktivierten Diagnoseereignissen und bestätigen Sie, dass der Unterschied vernachlässigbar ist. Halten Sie den Diagnosemodus bei direkten und vermittelten Läufen nach Möglichkeit gleich.
Menschliche Bestätigung ist ein separates Service-Level
Die Bestätigungszeit beginnt, wenn die Genehmigungskarte sichtbar wird, und endet, wenn die Entscheidung den blockierten Aufruf erreicht. Sie ist keine Maschinenlatenz des Gateways. Wenn sie mit automatischen Aufrufen kombiniert wird, bestimmen Handposition, Aufmerksamkeit, Bildschirmzustand und Unterbrechungen den p95-Wert. Das kann eine wichtige Workflow-Kennzahl sein, beantwortet aber die Frage, ob die Genehmigung zur Arbeit passt, nicht ob der Ausführungspfad effizient ist.
Berichten Sie für geschützte Aktionen drei Verteilungen. Erfassen Sie erst die Maschinenzeit des Gateways vor dem Prompt. Erfassen Sie dann die sichtbare Zeit vom Prompt bis zur Entscheidung. Erfassen Sie anschließend die Maschinenzeit nach der Entscheidung bis zur Ergebnisauslieferung. Die Ende-zu-Ende-Zahl kann daneben stehen, sofern sie niemand zur Diagnose von Transport-Overhead verwendet.
Automatisieren Sie keine Klicks und nennen Sie das menschliche Latenz. Automatisierung kann Darstellung und Entscheidungsmechanik messen, was in die Maschinenbereiche gehört. Eine Studie mit Menschen braucht zustimmende Teilnehmende, eine definierte Aufgabe und Ereigniszeitstempel, die keine sensiblen Eingaben erfassen. Berichten Sie die Zahl der Teilnehmenden und ob sie den Prompt erwarteten. Eine erwartete Touch-ID-Bestätigung während eines Skripttests geht schneller als eine unerwartete Freigabe während echter Programmierarbeit.
Auch Bestätigungsmodi brauchen getrennte Zeilen. Eine Aktion, die für eine bereits autorisierte Sitzung erlaubt ist, ein erster Aufruf zur Autorisierung des Prozesses und eine Bestätigung pro Aufruf haben absichtlich unterschiedliche Pfade. Werden sie gemischt, hängt das Ergebnis von ihrer zufälligen Häufigkeit in der Stichprobe ab.
Ein sinnvolles Workflow-Budget beschreibt die Unterbrechung, statt so zu tun, als müsse jede Freigabe unter 100 ms bleiben. Fordern Sie beispielsweise, dass die Karte innerhalb von 150 ms nach Eintreffen des Aufrufs im Gateway bei p95 erscheint. Messen Sie dann die menschliche Entscheidungszeit zunächst ohne Bestehens- oder Nichtbestehensziel, bis das Team reale Nutzung beobachtet hat. Setzen Sie später ein Ziel anhand von Abbrüchen, Fehlfreigaben und Unterbrechungen der Aufgabe. Eine schnelle Freigabe ist schlecht, wenn die Karte die Identität oder Aktionsdetails vorenthält, die für eine fundierte Entscheidung nötig sind.
Deltas berechnen, bevor das Diagramm entsteht
Der Ergebnisrechner sollte Beobachtungen paaren, unvollständige Paare aus der Latenzverteilung ausschließen und diese unvollständigen Paare als Fehler ausweisen. So wird ein erfolgreicher direkter Aufruf nicht mit dem nächsten vermittelten Aufruf verglichen, nachdem sein tatsächlicher Partner einen Timeout hatte. Nutzen Sie die Paar-Nummer des Runners als Join-Feld.
Verwenden Sie überall dieselbe Perzentildefinition. Die Nearest-Rank-Methode sortiert Werte und wählt den Rang ceil(p * n), wobei die Ränge bei eins beginnen. Bibliotheken bieten interpolierte Perzentile, die einen nie beobachteten Wert zurückgeben können. Interpolation ist für manche Analysen legitim, aber unterschiedliche Methoden in Notebook und Dashboard erzeugen nahe einer Grenze unnötige Diskussionen. Nennen Sie die Methode im Bericht.
Dieser kleine Rechner verarbeitet die JSON Lines des vorherigen Runners. Er gibt Anzahlen sowie Nearest-Rank-p50 und -p95 für direkte Zeit, vermittelte Zeit und gepaarte zusätzliche Zeit aus:
import json
import math
import sys
rows = [json.loads(line) for line in sys.stdin if line.strip()]
by_pair = {}
failures = {"direct": 0, "brokered": 0}
for row in rows:
if not row["ok"]:
failures[row["path"]] += 1
continue
by_pair.setdefault(row["pair"], {})[row["path"]] = row["ms"]
direct = []
brokered = []
deltas = []
for pair in sorted(by_pair):
values = by_pair[pair]
if "direct" not in values or "brokered" not in values:
continue
direct.append(values["direct"])
brokered.append(values["brokered"])
deltas.append(values["brokered"] - values["direct"])
def percentile(values, fraction):
ordered = sorted(values)
rank = max(1, math.ceil(fraction * len(ordered)))
return ordered[rank - 1]
result = {"complete_pairs": len(deltas), "failures": failures}
for name, values in (("direct", direct), ("brokered", brokered),
("added", deltas)):
result[name] = {
"p50_ms": percentile(values, 0.50),
"p95_ms": percentile(values, 0.95),
"max_ms": max(values),
}
print(json.dumps(result, separators=(",", ":")))
Die Ausgabeform ist bewusst schlicht: complete_pairs, Fehlerzahlen für jeden Pfad und ein Block je Verteilung mit p50_ms, p95_ms und max_ms. Ergänzen Sie Konfidenzintervalle, wenn das Team sie bereits nutzt, lassen Sie aber kein Intervall die Prüfung des Roh-Tails ersetzen. Ein Perzentil kann sich zwischen Läufen ändern, weil sich das System änderte oder weil die Stichprobe schwankte. Die Rohzeilen zeigen, welche Erklärung passt.
Negative Deltas sind gültig. Sie können auftreten, wenn der Broker eine Verbindung wiederverwendet, die der direkte Befehl erneut öffnet, oder wenn gewöhnliches Netzwerkrauschen dem vermittelten Mitglied eines Paars zugutekommt. Klemmen Sie sie nicht auf null. Beheben Sie stattdessen ein ungleiches Verbindungssetup oder lassen Sie die gepaarte Verteilung ihre Varianz behalten. Das Klemmen verzerrt jedes Perzentil nach oben und erschwert die Prüfung der Berechnung.
Bewahren Sie in den Daten die volle Genauigkeit und runden Sie nur Darstellungswerte, vorzugsweise auf eine Dezimalmillisekunde. Die Grenzprüfung sollte den ungerundeten Wert verwenden. Ein ausgewiesener Wert von 75,0 ms kann knapp über der 75-ms-Grenze liegen, wenn vor dem Vergleich formatiert wird.
Tail-Latenz zeigt, wo Vertrauen schwindet
Interaktive Programmierarbeit leidet stärker unter unregelmäßiger Verzögerung als unter einem stabilen kleinen Aufschlag. An zusätzliche 15 ms bei jedem Tool-Aufruf kann sich ein Entwickler anpassen. Eine zufällige Pause von 800 ms lässt einen Agenten defekt wirken, besonders wenn mehrere Aufrufe nacheinander erfolgen. Deshalb ist p95 eine Einführungsvorgabe und kein dekoratives Diagramm.
Prüfen Sie die Rohbeobachtungen im Tail. Kennzeichnen Sie, ob sie mit einem fehlenden HTTP-Verbindungstreffer, SSH-Handshake, Vault-Entsperren, Audit-Flush, App-Aufwachen, CPU-Druck oder Netzwerkausschlag zusammenfielen. Löschen Sie keinen Ausreißer, nur weil Sie ihn erklären können. Wenn die Produktion diese Bedingung enthalten wird, gehört sie in die Verteilung. Entfernen Sie nur einen nachgewiesenen Testfehler, bewahren Sie die Originaldaten auf und veröffentlichen Sie die Ausschlussregel.
p99 kann während der Entwicklung helfen, ist bei kleinen Stichproben aber verrauscht. Bei 200 Aufrufen beruht p99 ungefähr auf den zwei langsamsten Beobachtungen. Für die Einführung fordere ich p50 und p95 und prüfe dann Maximum und Rohzeilen im Tail auf Fehlermuster. Ein längerer Lauf über Nacht kann p99-Arbeit unterstützen, nachdem die interaktive Hürde bestanden ist.
Warme und kalte Zustände müssen sichtbar bleiben. Messen Sie App-Start oder Vault-Entsperren als eigene Operation, wenn Nutzer damit konfrontiert sind, mischen Sie es aber nicht in regelmäßige Aufrufe. Berichten Sie ebenso die Wiederherstellung nach Mac-Ruhezustand und Aufwachen separat. Eine ständig laufende Desktop-App kann nach dem Warmup hervorragend aussehen und die erste Aktion nach der Mittagspause trotzdem schlecht behandeln.
Auch die Kosten einer Sequenz gehören zur Entscheidung. Wenn eine Programmieraufgabe zwölf serielle Aufrufe macht, summieren sich zusätzliche Verzögerungen. Das Wiedergeben einer aufgezeichneten, bereinigten Aktionssequenz kann Kosten sichtbar machen, die Einzelanfragen nicht zeigen, etwa Pool-Churn oder ein Journal, das mit wachsender Sitzung langsamer wird. Behalten Sie die Verteilungen einzelner Operationen bei und ergänzen Sie die Differenz der Aufgabenfertigstellung als sekundäres Maß.
Die Hürde aus Interaktionskosten ableiten
Das Gateway besteht, wenn die zusätzliche Maschinenverzögerung absolut klein und im Verhältnis zum direkten Pfad gering ist. Für einen aktuellen Desktop unter repräsentativer Last beginne ich mit vier Grenzen:
- HTTP mit Wiederverwendung: 25 ms bei p50 und 75 ms bei p95
- HTTP mit neuer Verbindung: 30 ms bei p50 und 100 ms bei p95
- SSH mit wiederverwendeter Verbindung: 25 ms bei p50 und 75 ms bei p95
- SSH mit frischer Verbindung: 50 ms bei p50 und 150 ms bei p95
Wenden Sie die relative Prüfung an, wenn der direkte p95 mindestens 100 ms beträgt. Bei einem 3-ms-Loopback-Aufruf erlaubt eine 20-Prozent-Regel weniger als eine Millisekunde und misst vor allem Rauschen. Bei einem langsamen Remote-Aufruf kann eine reine Absolutgrenze eine Implementierung erlauben, die einen großen Anteil der direkten Zeit hinzufügt. Die beiden Prüfungen decken unterschiedliche Bereiche ab.
Fordern Sie eine Fehlerquote, die höchstens um eine kleine, erklärte Toleranz über der direkten liegt, und untersuchen Sie jeden Gateway-verursachten Timeout automatisch. Ich würde Zuverlässigkeit nicht gegen einen Median-Gewinn von 10 ms eintauschen. Fordern Sie außerdem korrekte Ergebnisgleichwertigkeit und die beabsichtigte Audit-Dauerhaftigkeit. Ein schneller Pfad, der die Antwort verändert oder später protokolliert, hat einen anderen und schwerwiegenderen Test nicht bestanden.
Führen Sie die Prüfung auf der langsamsten unterstützten Mac-Klasse aus, die das Team wirklich nutzt, nicht nur auf der neuesten Maschine im Teststand. Wiederholen Sie sie am Strom und unter repräsentativer Last aus Editor und Build. Für Remote-Ziele verlangen Sie drei Läufe an unterschiedlichen Tagen oder in verschiedenen Netzwerkzeiträumen. Das ist keine statistische Zeremonie, sondern verhindert, dass ein günstiges Netzwerkfenster zum Produktversprechen wird.
Teams können die vorläufigen Werte mit einem verblindeten Wahrnehmungstest anpassen. Fügen Sie einem Mock-Gateway feste Verzögerungen hinzu, spielen Sie eine typische Agentenaufgabe ab und bitten Sie Entwickler, die Unterbrechung zu bewerten, ohne ihnen die Verzögerung zu nennen. Wählen Sie die kleinste Verzögerung, die zuverlässig Beschwerden auslöst, und setzen Sie die p95-Grenze mit Sicherheitsabstand darunter. Behalten Sie die 150-ms-Grenze für frisches SSH nur bei, wenn der direkte Handshake bereits dominiert und sich die vollständige Aufgabe dennoch unmittelbar anfühlt.
Lehnen Sie den Rollout ab, wenn eine häufige Operationsklasse ihre p95-Grenze verfehlt, auch wenn das kombinierte Diagramm besteht. Ein gewichteter Gesamtwert lässt häufige schnelle HTTP-Aufrufe langsame SSH-Aktionen verdecken. Geben Sie nach Operationsklasse frei und prüfen Sie anschließend die aufgezeichnete Aufgabenfolge, damit sich mehrere akzeptable Aufschläge nicht zu einer unakzeptablen Pause summieren.
Einführung reversibel und evidenzbasiert gestalten
Die Einführung sollte mit einer Canary-Gruppe und einer dokumentierten Rollback-Bedingung beginnen. Frieren Sie Benchmark-Skript, Fixtures, Gateway-Konfiguration und Ergebnisrechner in der Versionsverwaltung ein. Speichern Sie Rohbeobachtungen statt Screenshots. Jede Person, die die Entscheidung prüft, sollte die Perzentile neu berechnen und jeden Fehler sehen können.
Führen Sie für Sallyport denselben Harness über seine HTTP- und SSH-Kanäle aus, wobei Vault, Sitzungsautorisierung, Pro-Aufruf-Einstellung und Audit-Verhalten genau so konfiguriert sind, wie es die geplante Bereitstellung verlangt. Das verschlüsselte Hash-verkettete Audit-Log lässt sich offline mit sp audit verify prüfen. Führen Sie das nach dem Benchmark aus, damit Latenzbericht und Integritätsprüfung dieselben Aufrufe beschreiben.
Gehen Sie erst weiter, wenn jede Operationsklasse auf repräsentativen Macs besteht, Ergebnis-Hashes übereinstimmen, die Audit-Prüfung erfolgreich ist und Entwickler die vollständige Aufgabenwiedergabe akzeptieren. Behalten Sie während der Canary-Phase einen direkten Ausweichpfad, erfassen Sie aber jede Nutzung mit ihrem Grund. Wenn Menschen das Gateway umgehen, weil sich p95 unregelmäßig anfühlt, hat der Benchmark den Workflow verfehlt. Verbessern Sie die Messung, bevor Sie den Rollout ausweiten.
FAQ
Welche p50-Latenz ist für ein Desktop-Ausführungs-Gateway akzeptabel?
Für wiederverwendete HTTP- oder SSH-Verbindungen ist ein Startwert von höchstens 25 ms zusätzlicher Latenz bei p50 sinnvoll. Messen Sie die gepaarte Differenz gegenüber direkten Aufrufen auf den Macs, die Entwickler tatsächlich verwenden. Ein Gateway darf sich keinen günstigen Netzwerkdurchlauf anrechnen.
Welche p95-Latenz sollte ein Ausführungs-Gateway erreichen?
Ein praktikabler Startwert sind höchstens 75 ms zusätzliche Latenz bei p95 für wiederverwendete HTTP- und SSH-Aufrufe, 100 ms für eine neue HTTP-Verbindung und 150 ms für eine frische SSH-Verbindung. Bewerten Sie jede Operationsklasse getrennt und verschärfen Sie die Grenze, wenn ein verblindeter Interaktionstest schon kleinere Verzögerungen als störend zeigt.
Sollte die Bestätigungszeit in die Gateway-Latenz einfließen?
Nehmen Sie die Bestätigungszeit aus dem Perzentil der Maschinenlatenz heraus. Erfassen Sie die Zeit vor dem Prompt, vom sichtbaren Prompt bis zur menschlichen Entscheidung und nach der Entscheidung getrennt. Die Ende-zu-Ende-Zeit können Sie zusätzlich als Workflow-Maß ausweisen.
Wie viele Messwerte braucht ein p95-Benchmark?
Nutzen Sie nach dem Warmup mindestens 200 gemessene Aufrufe pro Operationsklasse. Damit liefert p95 genügend Beobachtungen, während sich die zehn langsamsten Aufrufe noch leicht auf Verbindungsfehler, Warteschlangen oder Testfehler prüfen lassen.
Sollten direkte und vermittelte Aufrufe in getrennten Batches laufen?
Nein. Wechseln Sie bei gepaarten Proben die Reihenfolge ab, damit thermische Änderungen, Server-Caches und Netzwerkschwankungen keinen Pfad bevorzugen. Bewahren Sie die Paar-ID auf und berechnen Sie das Perzentil der Differenzen je Paar.
Wie sollte die Wiederverwendung von SSH-Verbindungen Latenztests beeinflussen?
Messen Sie frische und wiederverwendete SSH-Verbindungen als unterschiedliche Klassen. OpenSSH-Verbindungsfreigabe spart Transportaufbau und Authentifizierung. Wenn wiederverwendete Befehle mit frischen Handshakes gemischt werden, sind Median und Tail kaum noch aussagekräftig.
Reicht die durchschnittliche Latenz für eine Einführungsentscheidung?
Nein. Ein Durchschnitt verdeckt unregelmäßige Hänger, durch die ein Agent defekt wirkt. Fordern Sie p50 und p95, veröffentlichen Sie Fehler und Timeouts und prüfen Sie Maximum sowie die Rohdaten im Tail.
Kann ein lokaler Benchmark einen Remote-Test ersetzen?
Nutzen Sie beides. Ein Loopback-Ziel macht Maschinen-Overhead deutlich, ein realistisches Remote-Ziel zeigt seine Bedeutung neben Netzwerklatenz. Keiner der beiden Tests beschreibt interaktive Programmierarbeit für sich allein.
Sollte Audit-Logging während eines Latenz-Benchmarks deaktiviert werden?
Nein, wenn die Produktion eine Aktion vor der Erfolgsmeldung protokolliert. Messen Sie das normale Dauerhaftigkeitsverhalten. Audit-Arbeit erst nach der Antwort zu erledigen, verändert die Zusage und liefert ein vorteilhaftes, aber irrelevantes Ergebnis.
Wann sollte ein Team einen Desktop-Gateway-Rollout ablehnen?
Lehnen Sie den Rollout ab oder pausieren Sie ihn, wenn eine häufige Operationsklasse ihre p95-Grenze verfehlt, die Ergebnissemantik ändert, unerklärliche Fehler hinzufügt oder das vorgesehene Audit-Ergebnis nicht belegen kann. Ein kombiniertes Diagramm darf schnelle Aufrufe nicht einen langsamen Pfad verdecken lassen.