NamenIos
Lieutenant
- Registriert
- Dez. 2005
- Beiträge
- 620
Latenz in Tastaturen
Motivation
Immer häufiger kommt die Frage auf, ob USB Hubs die Tastatureingaben verzögern oder ob PS/2 USB überlegen ist. So wie der Input Lag beim Monitor scheinen Verzögerungen eine wichtige Rolle bei manchen Spielern einzunehmen. Leider gab es bisher keine mir bekannten Untersuchungen, ob es Verzögerungen gibt und wie groß sie sind. Auch wurde der Einfluss der Anschlussmöglichkeiten bisher nur auf der theoretischen Seite betrachtet. Um etwas Klarheit in das Thema zu bringen, wollte ich das ganze mal etwas näher zu untersuchen.
Vorüberlegung: Wie funktioniert eine Tastatur und was verursacht Latenzen?
Ein Tastendruck ist ein einfaches Schließen eines Tasters, dies muss der Tastaturcontroller auslesen, verarbeiten und über das USB oder PS/2 Protokoll an den Computer senden. Der Computer muss das Signal noch verarbeiten, hier gibt es theoretisch auch Unterschiede (PS/2 ist interruptbasiert). Für das komplexe Thema USB ist das Buch USB2.0 aus dem Franzis Verlag ein guter Einstieg. Frei im Internet gibt es auch noch Informationen auf der offiziellen USB Seite, siehe 1 und 2. Für PS/2 ist deutsche Übersetzung von Adam Chapweskes Artikel The PS/2 Keyboard Interface sehr gut.
Das Auslesen von 105 Tastern erfolgt spaltenweise über die in einer Matrix angeordneten Taster. Für genauere Information lege ich euch Keyboard Matrix Help von Dave Dribin nahe.
Der Keyboardcontroller muss diese Informationen verarbeiten, dazu gehört in der Regel eine Entprellung und das Aufbereiten der Daten für eine Übertragung. Das wäre unter anderem bei USB die Begrenzung von 6 Tasten und das Erstellen des Datenpakets und bei PS/2 das Vergleichen mit dem vorherigen Zustand um Veränderungen in den Sendebuffer zu schreiben.
Gegebenenfalls muss der USB-Treiber die Tastatureingaben noch verarbeiten.
Messaufbau
Da ich leider keinen parallelen Port mehr habe, musste ich meinen seriellen Port benutzen und die RTS Leitung missbrauchen. Mit dem -12V/+12V Pegel schalte ich einen NPN Transistor durch bzw. sperre ihn. Die Massereferenz bringt die Tastatur mit, so habe ich kein Problem mit negativer Logik. Für die Messung lege ich mit Hilfe von Messspitzen die Collector-Emitterstrecke über den Taster (bzw. einer Spalten und Reihe). So kann ich mit einem Programm die Tasten drücken.
Das Programm speichert den ersten Zeitpunkt (natürlich mit QueryPerformanceCounter), schaltet den Transistor durch und wartet auf eine Tasteneingabe. Darauf wird der zweite Zeitpunkt bestimmt und 64ms-320ms gewartet. Diese Wartezeit ist nötig, um realitätsnahe Ergebnisse zu erhalten, denn sobald ich eine feste Zeit warte liegen die Messwerte aufgrund der Pollingrate des Tastenscans und des USB-Protokolls viel näher zusammen. Diese Messungen führe ich 200-mal durch, das führt zu einer ausreichenden Messgenauigkeit bei moderater Messdauer.
Getestet Geräte
Meine verfügbaren Tastaturen, die ich aufschraube, sind leider sehr begrenzt. Daher müsst ihr euch vorerst mit einer reinen PS/2 Tastatur Marke Dell, einer USB/PS/2 G80-3000 (von Ende 2007), einer G-Series G-720 USB und dem Das Modell III zufriedengeben. Zusätzlich habe ich noch getestet, ob ein/zwei Hubs teils mit zwei gleichzeitigen Datenübertragungen und CPU Last sich negativ auswirken.
Die Ergebnisse
Ich kenne mich nicht wirklich gut mit Tabellenkalkulationen aus, und möchte mich nur für diesen Beitrag nicht darin einarbeiten. Wer bessere Tabellen machen möchte, dem stelle ich gerne die Messwerte zur Verfügung.
Ich lasse mal die Häufigkeitsverteilungen und Zahlen (ø=Durchschnittliche Dauer; σ=Standardabweichung) für sich sprechen:
Die weiteren USB Tastaturen habe ich aus Bequemlichkeit am Monitorhub getestet.
Update 29.07.: DIY USB Keyboard mit einer Taste:
Diese Verteilungen geben an wie häufig die Messung in einem bestimmten Intervall liegen. Mal am Beispiel der Dell Tastatur erklärt: Von 200 Messwerten lagen: erster
knapp 30 zwischen 22ms und 23ms, zweiter
gut 70 zwischen 23ms und 24ms usw.
Zu beachten ist auch der Intervall in dem die Latenz liegt.
Fazit
Wie man sieht, hat die Pollingrate des USB-Protokolls einen sehr großen Einfluss auf die Breite der Streuung der Verzögerung. Wenn die Pollingrate der Tastaturen auf 1ms gesetzt werden würde, wären wahrscheinlich alle USB Ergebnisse um 7ms zusammengeschoben. Allerdings scheint die Verarbeitungszeit des Controllers den größten Einfluss zu haben. Es wäre interessant weitere Tastaturen zu testen, die über einen passiven Adapter sowohl das PS/2 als auch das USB Protokoll unterstützen. Ich kann mir gut vorstellen, dass eine vorhersagbare Latenz wie sie die Dell Tastatur und mit Abstrichen auch die G-80 über PS/2 und die G-Series über USB haben weitaus genauer auszugleichen ist als eine breite Streuung der Latenz.
Um die Latenz an verschieden Rechnern zu testen, bräuchte man Referenzgeräte. Hier würde sich entweder eine verbreitete Tastatur anbieten oder ein Mikrocontroller, der beide Protokolle möglichst mit möglichst geringer Latenz anbietet. Interessant zu untersuchen wäre auch die minimale Zeit, in der die Reihenfolge zweier Tastendrücke unterschieden werden kann. Im September habe ich voraussichtlich etwas mehr Zeit, da werde ich mich unter Umständen dem Thema widmen, wenn mir keiner zuvor kommt. Mit der selben Messapparatur und einer kleinen Änderung im Programm könnte man auch die Latenz von Mausklicks messen.
Wer Lust hat diesen Artikel auf Englisch zu übersetzen kann das gerne machen, ansonsten werde ich mich irgendwann dransetzen. Wenn ihr den Artikel irgendwo anders Postet verlinkt bitte das Originalthema hier und macht mich per PM drauf aufmerksam.
Genauere Fragen zu den Diagrammen beantworte/ergänze ich gerne, ich habe erstmal ein paar Links und eine sehr grundlegende Erklärung hinzugefügt.
Motivation
Immer häufiger kommt die Frage auf, ob USB Hubs die Tastatureingaben verzögern oder ob PS/2 USB überlegen ist. So wie der Input Lag beim Monitor scheinen Verzögerungen eine wichtige Rolle bei manchen Spielern einzunehmen. Leider gab es bisher keine mir bekannten Untersuchungen, ob es Verzögerungen gibt und wie groß sie sind. Auch wurde der Einfluss der Anschlussmöglichkeiten bisher nur auf der theoretischen Seite betrachtet. Um etwas Klarheit in das Thema zu bringen, wollte ich das ganze mal etwas näher zu untersuchen.
Vorüberlegung: Wie funktioniert eine Tastatur und was verursacht Latenzen?
Ein Tastendruck ist ein einfaches Schließen eines Tasters, dies muss der Tastaturcontroller auslesen, verarbeiten und über das USB oder PS/2 Protokoll an den Computer senden. Der Computer muss das Signal noch verarbeiten, hier gibt es theoretisch auch Unterschiede (PS/2 ist interruptbasiert). Für das komplexe Thema USB ist das Buch USB2.0 aus dem Franzis Verlag ein guter Einstieg. Frei im Internet gibt es auch noch Informationen auf der offiziellen USB Seite, siehe 1 und 2. Für PS/2 ist deutsche Übersetzung von Adam Chapweskes Artikel The PS/2 Keyboard Interface sehr gut.
Das Auslesen von 105 Tastern erfolgt spaltenweise über die in einer Matrix angeordneten Taster. Für genauere Information lege ich euch Keyboard Matrix Help von Dave Dribin nahe.
Der Keyboardcontroller muss diese Informationen verarbeiten, dazu gehört in der Regel eine Entprellung und das Aufbereiten der Daten für eine Übertragung. Das wäre unter anderem bei USB die Begrenzung von 6 Tasten und das Erstellen des Datenpakets und bei PS/2 das Vergleichen mit dem vorherigen Zustand um Veränderungen in den Sendebuffer zu schreiben.
Gegebenenfalls muss der USB-Treiber die Tastatureingaben noch verarbeiten.
Messaufbau
Da ich leider keinen parallelen Port mehr habe, musste ich meinen seriellen Port benutzen und die RTS Leitung missbrauchen. Mit dem -12V/+12V Pegel schalte ich einen NPN Transistor durch bzw. sperre ihn. Die Massereferenz bringt die Tastatur mit, so habe ich kein Problem mit negativer Logik. Für die Messung lege ich mit Hilfe von Messspitzen die Collector-Emitterstrecke über den Taster (bzw. einer Spalten und Reihe). So kann ich mit einem Programm die Tasten drücken.
Das Programm speichert den ersten Zeitpunkt (natürlich mit QueryPerformanceCounter), schaltet den Transistor durch und wartet auf eine Tasteneingabe. Darauf wird der zweite Zeitpunkt bestimmt und 64ms-320ms gewartet. Diese Wartezeit ist nötig, um realitätsnahe Ergebnisse zu erhalten, denn sobald ich eine feste Zeit warte liegen die Messwerte aufgrund der Pollingrate des Tastenscans und des USB-Protokolls viel näher zusammen. Diese Messungen führe ich 200-mal durch, das führt zu einer ausreichenden Messgenauigkeit bei moderater Messdauer.
Getestet Geräte
Meine verfügbaren Tastaturen, die ich aufschraube, sind leider sehr begrenzt. Daher müsst ihr euch vorerst mit einer reinen PS/2 Tastatur Marke Dell, einer USB/PS/2 G80-3000 (von Ende 2007), einer G-Series G-720 USB und dem Das Modell III zufriedengeben. Zusätzlich habe ich noch getestet, ob ein/zwei Hubs teils mit zwei gleichzeitigen Datenübertragungen und CPU Last sich negativ auswirken.
Die Ergebnisse
Ich kenne mich nicht wirklich gut mit Tabellenkalkulationen aus, und möchte mich nur für diesen Beitrag nicht darin einarbeiten. Wer bessere Tabellen machen möchte, dem stelle ich gerne die Messwerte zur Verfügung.
Ich lasse mal die Häufigkeitsverteilungen und Zahlen (ø=Durchschnittliche Dauer; σ=Standardabweichung) für sich sprechen:

Die weiteren USB Tastaturen habe ich aus Bequemlichkeit am Monitorhub getestet.

Update 29.07.: DIY USB Keyboard mit einer Taste:

Diese Verteilungen geben an wie häufig die Messung in einem bestimmten Intervall liegen. Mal am Beispiel der Dell Tastatur erklärt: Von 200 Messwerten lagen: erster


Zu beachten ist auch der Intervall in dem die Latenz liegt.
Fazit
Wie man sieht, hat die Pollingrate des USB-Protokolls einen sehr großen Einfluss auf die Breite der Streuung der Verzögerung. Wenn die Pollingrate der Tastaturen auf 1ms gesetzt werden würde, wären wahrscheinlich alle USB Ergebnisse um 7ms zusammengeschoben. Allerdings scheint die Verarbeitungszeit des Controllers den größten Einfluss zu haben. Es wäre interessant weitere Tastaturen zu testen, die über einen passiven Adapter sowohl das PS/2 als auch das USB Protokoll unterstützen. Ich kann mir gut vorstellen, dass eine vorhersagbare Latenz wie sie die Dell Tastatur und mit Abstrichen auch die G-80 über PS/2 und die G-Series über USB haben weitaus genauer auszugleichen ist als eine breite Streuung der Latenz.
Um die Latenz an verschieden Rechnern zu testen, bräuchte man Referenzgeräte. Hier würde sich entweder eine verbreitete Tastatur anbieten oder ein Mikrocontroller, der beide Protokolle möglichst mit möglichst geringer Latenz anbietet. Interessant zu untersuchen wäre auch die minimale Zeit, in der die Reihenfolge zweier Tastendrücke unterschieden werden kann. Im September habe ich voraussichtlich etwas mehr Zeit, da werde ich mich unter Umständen dem Thema widmen, wenn mir keiner zuvor kommt. Mit der selben Messapparatur und einer kleinen Änderung im Programm könnte man auch die Latenz von Mausklicks messen.
Wer Lust hat diesen Artikel auf Englisch zu übersetzen kann das gerne machen, ansonsten werde ich mich irgendwann dransetzen. Wenn ihr den Artikel irgendwo anders Postet verlinkt bitte das Originalthema hier und macht mich per PM drauf aufmerksam.
Genauere Fragen zu den Diagrammen beantworte/ergänze ich gerne, ich habe erstmal ein paar Links und eine sehr grundlegende Erklärung hinzugefügt.
Zuletzt bearbeitet von einem Moderator:
(wiederhergestellt)