Ich arbeite an Kontrollsystem Zeug, wo der NIC-Interrupt als Auslöser verwendet wird. Dies funktioniert sehr gut für Zykluszeiten von mehr als 3 Mikrosekunden. Nun möchte ich einige Leistungstests durchführen und die Übertragungszeit bzw. die kürzeste Zeit zwischen zwei Interrupts messen.RealTek 8168 (r8169 Linux-Treiber) - Rx-Deskriptor Ring Verwirrung
Der Absender sendet 60-Byte-Pakete so schnell wie möglich. Der Empfänger sollte einen Interrupt pro Paket generieren. Ich teste mit 256 Paketen die Größe des Rx-Deskriptor-Rings. Die Paketdaten werden während des Tests nicht behandelt. Nur der Interrupt ist interessant.
Das Problem ist, dass der Empfang zwischen zwei Unterbrechungen sehr schnell bis zu weniger als 1 Mikrosekunde ist, aber nur für etwa 70 Unterbrechungen/Deskriptoren. Dann setzt die NIC das RDU-Bit (Rx Descriptor Unavailable) und stoppt den Empfang, bevor das Ende des Rings erreicht wird. Die verwirrende Sache ist, wenn ich die Größe des Rx-Deskriptorrings auf bis zu 2048 (z.B.) vergrößere, dann steigt auch die Anzahl der Unterbrechungen (um 800). Ich verstehe dieses Verhalten nicht. Ich dachte, er sollte nach 70 Unterbrechungen wieder aufhören.
Es scheint ein Zeitproblem zu sein, aber warum? Ich übersehe etwas, aber was? Kann mir jemand helfen?
Vielen Dank im Voraus!
Danke, Sie haben Recht! Ich erkannte, dass das PCIe-System zu langsam ist, die Latenz ist zu hoch. Der Empfang der Pakete ist zu schnell, daher ist der Deskriptorring voll, bevor der Besitz geändert werden kann. – Billy
Das ist toll! @ Billy – Adi06411