Niedrige Latenz für die serielle Kommunikation unter Linux

Ich bin die Implementierung eines Protokolls über serielle ports unter Linux. Das Protokoll basiert auf einem Anfrage-Antwort-Schema, so dass der Durchsatz ist begrenzt durch die Zeit, die es dauert, ein Paket zu senden, an ein Gerät und eine Antwort bekommen. Die Geräte sind meist arm-basierte und Linux ausführen >= 3.0. Ich bin die Probleme der Verringerung der Umlaufzeit unter 10ms (115200 baud, 8 Daten-bit, keine Parität, 7 byte pro Nachricht).

Was IO-Schnittstellen geben mir die niedrigste Latenz: select, poll, epoll oder polling von hand mit ioctl? Tut blocking oder non-blocking IO Auswirkungen der Latenz?

Ich habe versucht, die low_latency Flagge mit setserial. Aber es schien, hatte es keinen Effekt.

Gibt es irgendwelche anderen Dinge kann ich versuchen zu reduzieren die Latenz? Da ich die Steuerung aller Geräte, es wäre sogar möglich, um den kernel zu patchen, aber seine lieber nicht.

- - - - - Edit - - - - -

Den serial controller verwendet wird, ist ein 16550A.

Welche Art der seriellen Schnittstelle verwenden Sie? USB - /serielle Schnittstellen Art langsam.
Sie müssen prüfen, wo die 10 ms ausgegeben werden, denn wenn Sie verloren sind, von dem anderen Gerät, das Sie nicht optimieren können mehr als das.
Was sind die Größen von Anfrage-und Antwort-Nachrichten? Wenn beide mehr als 100 bytes ist, können Sie nicht bekommen, round-trip-Zeit <10ms (mit 115200).
115200 ist extrem langsam, so dass Sie garantiert große Latenz einfach verschieben die bytes über. Ihre beste Wette wird die Zahl der baud-zu so etwas wie 921600. Oder besser noch, wechseln Sie zu gigabit-ethernet.
beide 7 byte.

InformationsquelleAutor JustMaximumPower | 2012-10-29

Schreibe einen Kommentar