Txqueuelen: Unterschied zwischen den Versionen
K Textersetzung - „ TCP“ durch „ TCP“ |
Keine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
''txqueuelen'' –(Transmit Queue Length) Länge der Sendewarteschlange | |||
== Beschreibung == | == Beschreibung == | ||
Wie stelle ich unter Linux die Länge der Sendewarteschlange (txqueuelen) der Netzwerkkarte ein? Wie stelle ich sie für ein Netzwerk mit hoher Latenz und/oder hoher Geschwindigkeit ein, um Massenübertragungen vor störendem interaktivem Datenverkehr wie SSH zu schützen? | |||
Sie können die Länge der Sendewarteschlange des Geräts mit dem Befehl /sbin/ifconfig wie folgt einstellen: | |||
# | # Kleiner Wert für langsamere Geräte mit hoher Latenz wie Modemverbindungen und ISDN. | ||
# | # Ein hoher Wert wird für Server empfohlen, die über Hochgeschwindigkeits-Internetverbindungen verbunden sind und große Datenübertragungen durchführen. | ||
== | == Erhöhen der `txqueuelen` == | ||
Erhöhen Sie den Parameter `txqueuelen` pro Schnittstelle auf einen Wert zwischen 1000 und 20000: | |||
ifconfig ${interface} txqueuelen ${size} | ifconfig ${interface} txqueuelen ${size} | ||
ifconfig eth1 txqueuelen 10000 | ifconfig eth1 txqueuelen 10000 | ||
ifconfig eth0 txqueuelen 5000 | ifconfig eth0 txqueuelen 5000 | ||
=== | === „txqueuelen“ dauerhaft festlegen === | ||
Bearbeiten Sie die Datei /etc/rc.local und geben Sie Folgendes ein: | |||
<code>vi /etc/rc.local</code> | <code>vi /etc/rc.local</code> | ||
Fügen Sie pro Schnittstelle die folgende Einstellung an: | |||
/sbin/ifconfig eth1 txqueuelen 10000 | /sbin/ifconfig eth1 txqueuelen 10000 | ||
/sbin/ifconfig eth0 txqueuelen 10000 | /sbin/ifconfig eth0 txqueuelen 10000 | ||
Vivek Gite | Vivek Gite ist ein erfahrener IT-Berater mit über 25 Jahren Erfahrung, der sich auf Linux und Open-Source-Lösungen spezialisiert hat. Er schreibt über Linux, macOS, Unix, IT, Programmierung, Informationssicherheit und Open Source. Verfolgen Sie seine Arbeit über den RSS-Feed. | ||
== | == Kommentare == | ||
* Yevgen | * Yevgen 22. Okt. 2009 um 9:56 Uhr Du kannst auch diesen Befehl verwenden: ip link set eth1 txqueuelen 10000 ↩ ∞ | ||
* iwbcman | * iwbcman 10. Jan. 2011 um 17:09 Danke für die Veröffentlichung dieser Anleitung zur Einstellung von „txqueuelen“. Es sollte jedoch beachtet werden, dass eine Erhöhung des „txqueuelen“-Werts mit Sicherheit zu einer Übersättigung der Puffer Ihrer Netzwerkschnittstelle führt, was übermäßigen Jitter und Timeouts bei der DNS-Auflösung verursachen kann. Der Standardwert von 1000 für „txqueuelen“ unter Linux ist bereits viel zu hoch, und eine Reduzierung dieses Wertes auf einen deutlich kleineren Wert verringert die Wahrscheinlichkeit, dass die Puffer Ihrer Netzwerkschnittstelle überlastet werden. Ich persönlich habe mit dem Wert 200 gute Erfahrungen gemacht. Grundsätzlich muss [[TCP]] in der Lage sein, Pakete schnell zu verwerfen, damit der Server erkennt, dass eine Netzwerküberlastung vorliegt. Die Größe des Werts bestimmt, in welchem Umfang Pufferung stattfindet (wobei die Anzahl der Pakete der Anzahl der Sekunden entspricht, in denen Daten gepuffert werden). Ist dieser Wert zu hoch, versagt der Rückkopplungsmechanismus, der die Grundlage für die Algorithmen zur Vermeidung von Netzwerküberlastung in [[TCP]] bildet, was bedeutet, dass Pakete nicht verworfen werden und somit keine Überlastung signalisiert wird. Wenn der Server die Überlastung aufgrund übermäßiger Pufferung nicht erkennt, erfolgt die unvermeidliche erneute Übertragung von Paketen erst, wenn das Problem bereits zu gravierend geworden ist – wodurch enorme Latenzen entstehen, die der Anzahl der Sekunden entsprechen, die gemäß dem in `txqueuelen` festgelegten Wert gepuffert wurden. Je kleiner also der Wert von `txqueuelen` ist, desto besser sind die Chancen, dass die Algorithmen zur Vermeidung von Überlastung in [[TCP]] ihre Aufgabe erfüllen können – was zu höheren Übertragungsgeschwindigkeiten führt – und desto unwahrscheinlicher ist es, dass die Puffer überfüllt werden, was zu enormen Timeouts führt, wenn die erneute Übertragung unvermeidlich eintritt. Suchen Sie nach „Jim Gettys“ und „Bufferbloat“, um eine bessere Erklärung zu erhalten. ↩ ∞ | ||
* Maroon | * Maroon 13. Jan. 2011 um 14:01 Uhr Sehr geehrter Herr, was wird in Bezug auf die Proxy-Server (Squid) empfohlen? Soll die Länge der TX-Warteschlange erhöht werden? Oder das Gegenteil? In Anbetracht der Tatsache, dass wir Server-Hardware verwenden … Bitte um Rat ↩ ∞ | ||
** NANO | ** NANO 28. Nov. 2012 um 2:02 Uhr Blowfish: Die Länge des Wortes wird bis hin zum Status „name“ selbst gehasht … Außerhalb des Algorithmus sind die Wörter erkennbar, aber bei Wörtern wie „PHISH“ und „FISH“ wäre die Entscheidung beim Menschen. ↩ ∞ | ||
* Dave Täht | * Dave Täht 13. Februar 2011 um 2:39 Eine kleinere Länge macht Ihren [[TCP]]-Stack reaktionsschneller. [[TCP]] übernimmt bereits einen Großteil der Pufferung für Sie. Unverwaltete FIFO-Puffer, die größer sind als beispielsweise 32, sind schlecht. Sie können zwar größere Puffer verwenden, sollten dann aber eine Art qdisc einsetzen, um Ihre Datenströme auszugleichen. Ich kann mir derzeit keinen triftigen Grund für FIFO-Pufferung in irgendeinem Umfang vorstellen. Versuche auch, ECN und SACK zu aktivieren. Der vorherige Poster – der ansonsten zwar völlig Recht hatte – hat es versäumt, ethtool zu verwenden, um deine DMA-Sende-Warteschlangen zu verkleinern. Siehe auch: <nowiki>http://www.bufferbloat.net/projects/bloat/wiki/Linux_Tips</nowiki> ↩ ∞ | ||
* MK2 | * MK2 21. April 2011 um 23:15 Uhr Ich finde, eine etwas sauberere Methode, dies dauerhaft zu machen, ist, die Datei /etc/network/interfaces mit vi zu öffnen und die folgende Zeile unterhalb der Schnittstelle hinzuzufügen, die du ändern möchtest: up ifconfig $IFACE txqueuelen 10000 Das „up“ sorgt dafür, dass jeder nachfolgende Befehl ausgeführt wird, wenn die Schnittstelle hochgefahren wird. Auf diese Weise befindet sich die Zeile an derselben Stelle wie der Rest der Schnittstellenkonfiguration. ↩ ∞ | ||
* ddale | * ddale 21. Juli 2011 um 14:41 Wenn ich TxQueueLen per SNMP abfragen möchte, welcher Wert wird dann zurückgegeben – die Anzahl der Pakete in der Warteschlange? Oder die Anzahl der von der Warteschlange belegten Bytes? ↩ ∞ | ||
* nima0102 | * nima0102 17. September 2011 um 12:11 Uhr Hallo, vielen Dank für Ihre gute Anleitung. Könnten Sie mir bitte weitere Informationen zu den Gründen für „PACKET DROP“ geben? Wenn die Netzwerkkarte ein beschädigtes Paket empfängt, erhöht sich dann der Wert? Oder zählt das System beschädigte Pakete gar nicht mit? Vielen Dank im Voraus ↩ ∞ | ||
* Maciej | * Maciej 19. September 2011 um 8:38 Uhr Ich schließe mich dem Kommentar von iwbcman an. Informieren Sie sich über die Folgen einer blindlings vorgenommenen Einstellung von „txqueuelen“ auf hohe Werte. ↩ ∞ | ||
* Agostino | * Agostino 20. September 2011 um 16:38 Uhr Ich bin mir nicht sicher, aber denken Sie daran, dass das Gerät immer von einer CPU gesteuert wird. Bei langsameren Geräten mit hoher Latenz (Modemverbindungen, ISDN) ist es sinnvoll, `txqueuelen` auf kleine Werte zu setzen, um zu verhindern, dass schnelle Massenübertragungen den interaktiven Datenverkehr stören. Daher ist eine sorgfältige Feinabstimmung erforderlich, um sicherzustellen, dass die Größe der Warteschlangen für Ihre Netzwerkverbindung optimal ist. Der Standardwert von 100 ist für Fernverbindungen mit hohem Durchsatz unzureichend. Außerdem muss die Empfängerseite berücksichtigt werden; wir haben eine ähnliche Warteschlange für eingehende Pakete. Diese Warteschlange wächst an, wenn eine Schnittstelle Pakete schneller empfängt, als der Kernel sie verarbeiten kann. Ist diese Warteschlange zu klein (Standardwert ist 1000), gehen Pakete eher auf der Empfängerseite als im Netzwerk verloren. Ich habe immer mehr Tests durchgeführt und persönlich erziele ich auf einem Stress-Server mit Quad-Core-Prozessor und Gigabit-Ethernet in einer Entfernung von etwa 4650 Meilen von mir die bessere Leistung und die geringste CPU-Auslastung mit diesen beiden Einstellungen: `ifconfig eth0 txqueuelen 2000` und `echo 2000 > /proc/sys/net/core/netdev_max_backlog`. Tschüss. ↩ ∞ | ||
* vv | * vv 2. April 2012 um 22:40 Uhr Wenn ich versuche, `ifconfig ${interface} txqueuelen ${size}`, `ifconfig eth1 txqueuelen 10000` und `ifconfig eth0 txqueuelen 5000` auszuführen, erhalte ich folgende Meldung: SIOCSIFTXQLEN: Kein solches Gerät Meine Frage: Reicht es aus, die Zeilen /sbin/ifconfig eth1 txqueuelen 10000 /sbin/ifconfig eth0 txqueuelen 10000 in rc.local einzufügen, um den Wert zu erhöhen? ↩ ∞ | ||
* Rajesh Chaudhary | * Rajesh Chaudhary 18. März 2015 um 9:16 Uhr Auf diese Weise können Sie den Wert von `txqueuelen` nur vorübergehend ändern. `/etc/rc.local` wird beim Systemstart ausgeführt, aber wenn Sie Ihre Schnittstelle neu starten, wird der Wert von `txqueuelen` wieder auf den Standardwert zurückgesetzt. Hier ist die dauerhafte Lösung für das Problem. Im folgenden Beispiel setze ich `txqueuelen` dauerhaft auf 5000. Dieser Wert bleibt auch nach einem Neustart des Servers oder einem Neustart/Reset der Schnittstelle unverändert. Bearbeiten Sie die Datei `/etc/sysconfig/network-script/ifup` und fügen Sie Ihren Befehl „ifconfig eth2 txqueuelen 5000“ am Anfang der Datei ein, direkt über der Zeile „unset WINDOW # defined by screen, conflicts with our usage“ ↩ ∞ | ||
* Diego | * Diego 10. Okt. 2016 um 15:37 Uhr # cat <> /etc/rules.d/71-net-txqueuelen.rules SUBSYSTEM==”net”, ACTION==”add”, KERNEL==”eth*”, ATTR{tx_queue_len}=”10000″ EOF | ||
Version vom 11. Juli 2026, 08:47 Uhr
txqueuelen –(Transmit Queue Length) Länge der Sendewarteschlange
Beschreibung
Wie stelle ich unter Linux die Länge der Sendewarteschlange (txqueuelen) der Netzwerkkarte ein? Wie stelle ich sie für ein Netzwerk mit hoher Latenz und/oder hoher Geschwindigkeit ein, um Massenübertragungen vor störendem interaktivem Datenverkehr wie SSH zu schützen?
Sie können die Länge der Sendewarteschlange des Geräts mit dem Befehl /sbin/ifconfig wie folgt einstellen:
- Kleiner Wert für langsamere Geräte mit hoher Latenz wie Modemverbindungen und ISDN.
- Ein hoher Wert wird für Server empfohlen, die über Hochgeschwindigkeits-Internetverbindungen verbunden sind und große Datenübertragungen durchführen.
Erhöhen der `txqueuelen`
Erhöhen Sie den Parameter `txqueuelen` pro Schnittstelle auf einen Wert zwischen 1000 und 20000:
ifconfig ${interface} txqueuelen ${size}
ifconfig eth1 txqueuelen 10000
ifconfig eth0 txqueuelen 5000
„txqueuelen“ dauerhaft festlegen
Bearbeiten Sie die Datei /etc/rc.local und geben Sie Folgendes ein:
vi /etc/rc.local
Fügen Sie pro Schnittstelle die folgende Einstellung an:
/sbin/ifconfig eth1 txqueuelen 10000 /sbin/ifconfig eth0 txqueuelen 10000
Vivek Gite ist ein erfahrener IT-Berater mit über 25 Jahren Erfahrung, der sich auf Linux und Open-Source-Lösungen spezialisiert hat. Er schreibt über Linux, macOS, Unix, IT, Programmierung, Informationssicherheit und Open Source. Verfolgen Sie seine Arbeit über den RSS-Feed.
Kommentare
- Yevgen 22. Okt. 2009 um 9:56 Uhr Du kannst auch diesen Befehl verwenden: ip link set eth1 txqueuelen 10000 ↩ ∞
- iwbcman 10. Jan. 2011 um 17:09 Danke für die Veröffentlichung dieser Anleitung zur Einstellung von „txqueuelen“. Es sollte jedoch beachtet werden, dass eine Erhöhung des „txqueuelen“-Werts mit Sicherheit zu einer Übersättigung der Puffer Ihrer Netzwerkschnittstelle führt, was übermäßigen Jitter und Timeouts bei der DNS-Auflösung verursachen kann. Der Standardwert von 1000 für „txqueuelen“ unter Linux ist bereits viel zu hoch, und eine Reduzierung dieses Wertes auf einen deutlich kleineren Wert verringert die Wahrscheinlichkeit, dass die Puffer Ihrer Netzwerkschnittstelle überlastet werden. Ich persönlich habe mit dem Wert 200 gute Erfahrungen gemacht. Grundsätzlich muss TCP in der Lage sein, Pakete schnell zu verwerfen, damit der Server erkennt, dass eine Netzwerküberlastung vorliegt. Die Größe des Werts bestimmt, in welchem Umfang Pufferung stattfindet (wobei die Anzahl der Pakete der Anzahl der Sekunden entspricht, in denen Daten gepuffert werden). Ist dieser Wert zu hoch, versagt der Rückkopplungsmechanismus, der die Grundlage für die Algorithmen zur Vermeidung von Netzwerküberlastung in TCP bildet, was bedeutet, dass Pakete nicht verworfen werden und somit keine Überlastung signalisiert wird. Wenn der Server die Überlastung aufgrund übermäßiger Pufferung nicht erkennt, erfolgt die unvermeidliche erneute Übertragung von Paketen erst, wenn das Problem bereits zu gravierend geworden ist – wodurch enorme Latenzen entstehen, die der Anzahl der Sekunden entsprechen, die gemäß dem in `txqueuelen` festgelegten Wert gepuffert wurden. Je kleiner also der Wert von `txqueuelen` ist, desto besser sind die Chancen, dass die Algorithmen zur Vermeidung von Überlastung in TCP ihre Aufgabe erfüllen können – was zu höheren Übertragungsgeschwindigkeiten führt – und desto unwahrscheinlicher ist es, dass die Puffer überfüllt werden, was zu enormen Timeouts führt, wenn die erneute Übertragung unvermeidlich eintritt. Suchen Sie nach „Jim Gettys“ und „Bufferbloat“, um eine bessere Erklärung zu erhalten. ↩ ∞
- Maroon 13. Jan. 2011 um 14:01 Uhr Sehr geehrter Herr, was wird in Bezug auf die Proxy-Server (Squid) empfohlen? Soll die Länge der TX-Warteschlange erhöht werden? Oder das Gegenteil? In Anbetracht der Tatsache, dass wir Server-Hardware verwenden … Bitte um Rat ↩ ∞
- NANO 28. Nov. 2012 um 2:02 Uhr Blowfish: Die Länge des Wortes wird bis hin zum Status „name“ selbst gehasht … Außerhalb des Algorithmus sind die Wörter erkennbar, aber bei Wörtern wie „PHISH“ und „FISH“ wäre die Entscheidung beim Menschen. ↩ ∞
- Dave Täht 13. Februar 2011 um 2:39 Eine kleinere Länge macht Ihren TCP-Stack reaktionsschneller. TCP übernimmt bereits einen Großteil der Pufferung für Sie. Unverwaltete FIFO-Puffer, die größer sind als beispielsweise 32, sind schlecht. Sie können zwar größere Puffer verwenden, sollten dann aber eine Art qdisc einsetzen, um Ihre Datenströme auszugleichen. Ich kann mir derzeit keinen triftigen Grund für FIFO-Pufferung in irgendeinem Umfang vorstellen. Versuche auch, ECN und SACK zu aktivieren. Der vorherige Poster – der ansonsten zwar völlig Recht hatte – hat es versäumt, ethtool zu verwenden, um deine DMA-Sende-Warteschlangen zu verkleinern. Siehe auch: http://www.bufferbloat.net/projects/bloat/wiki/Linux_Tips ↩ ∞
- MK2 21. April 2011 um 23:15 Uhr Ich finde, eine etwas sauberere Methode, dies dauerhaft zu machen, ist, die Datei /etc/network/interfaces mit vi zu öffnen und die folgende Zeile unterhalb der Schnittstelle hinzuzufügen, die du ändern möchtest: up ifconfig $IFACE txqueuelen 10000 Das „up“ sorgt dafür, dass jeder nachfolgende Befehl ausgeführt wird, wenn die Schnittstelle hochgefahren wird. Auf diese Weise befindet sich die Zeile an derselben Stelle wie der Rest der Schnittstellenkonfiguration. ↩ ∞
- ddale 21. Juli 2011 um 14:41 Wenn ich TxQueueLen per SNMP abfragen möchte, welcher Wert wird dann zurückgegeben – die Anzahl der Pakete in der Warteschlange? Oder die Anzahl der von der Warteschlange belegten Bytes? ↩ ∞
- nima0102 17. September 2011 um 12:11 Uhr Hallo, vielen Dank für Ihre gute Anleitung. Könnten Sie mir bitte weitere Informationen zu den Gründen für „PACKET DROP“ geben? Wenn die Netzwerkkarte ein beschädigtes Paket empfängt, erhöht sich dann der Wert? Oder zählt das System beschädigte Pakete gar nicht mit? Vielen Dank im Voraus ↩ ∞
- Maciej 19. September 2011 um 8:38 Uhr Ich schließe mich dem Kommentar von iwbcman an. Informieren Sie sich über die Folgen einer blindlings vorgenommenen Einstellung von „txqueuelen“ auf hohe Werte. ↩ ∞
- Agostino 20. September 2011 um 16:38 Uhr Ich bin mir nicht sicher, aber denken Sie daran, dass das Gerät immer von einer CPU gesteuert wird. Bei langsameren Geräten mit hoher Latenz (Modemverbindungen, ISDN) ist es sinnvoll, `txqueuelen` auf kleine Werte zu setzen, um zu verhindern, dass schnelle Massenübertragungen den interaktiven Datenverkehr stören. Daher ist eine sorgfältige Feinabstimmung erforderlich, um sicherzustellen, dass die Größe der Warteschlangen für Ihre Netzwerkverbindung optimal ist. Der Standardwert von 100 ist für Fernverbindungen mit hohem Durchsatz unzureichend. Außerdem muss die Empfängerseite berücksichtigt werden; wir haben eine ähnliche Warteschlange für eingehende Pakete. Diese Warteschlange wächst an, wenn eine Schnittstelle Pakete schneller empfängt, als der Kernel sie verarbeiten kann. Ist diese Warteschlange zu klein (Standardwert ist 1000), gehen Pakete eher auf der Empfängerseite als im Netzwerk verloren. Ich habe immer mehr Tests durchgeführt und persönlich erziele ich auf einem Stress-Server mit Quad-Core-Prozessor und Gigabit-Ethernet in einer Entfernung von etwa 4650 Meilen von mir die bessere Leistung und die geringste CPU-Auslastung mit diesen beiden Einstellungen: `ifconfig eth0 txqueuelen 2000` und `echo 2000 > /proc/sys/net/core/netdev_max_backlog`. Tschüss. ↩ ∞
- vv 2. April 2012 um 22:40 Uhr Wenn ich versuche, `ifconfig ${interface} txqueuelen ${size}`, `ifconfig eth1 txqueuelen 10000` und `ifconfig eth0 txqueuelen 5000` auszuführen, erhalte ich folgende Meldung: SIOCSIFTXQLEN: Kein solches Gerät Meine Frage: Reicht es aus, die Zeilen /sbin/ifconfig eth1 txqueuelen 10000 /sbin/ifconfig eth0 txqueuelen 10000 in rc.local einzufügen, um den Wert zu erhöhen? ↩ ∞
- Rajesh Chaudhary 18. März 2015 um 9:16 Uhr Auf diese Weise können Sie den Wert von `txqueuelen` nur vorübergehend ändern. `/etc/rc.local` wird beim Systemstart ausgeführt, aber wenn Sie Ihre Schnittstelle neu starten, wird der Wert von `txqueuelen` wieder auf den Standardwert zurückgesetzt. Hier ist die dauerhafte Lösung für das Problem. Im folgenden Beispiel setze ich `txqueuelen` dauerhaft auf 5000. Dieser Wert bleibt auch nach einem Neustart des Servers oder einem Neustart/Reset der Schnittstelle unverändert. Bearbeiten Sie die Datei `/etc/sysconfig/network-script/ifup` und fügen Sie Ihren Befehl „ifconfig eth2 txqueuelen 5000“ am Anfang der Datei ein, direkt über der Zeile „unset WINDOW # defined by screen, conflicts with our usage“ ↩ ∞
- Diego 10. Okt. 2016 um 15:37 Uhr # cat <> /etc/rules.d/71-net-txqueuelen.rules SUBSYSTEM==”net”, ACTION==”add”, KERNEL==”eth*”, ATTR{tx_queue_len}=”10000″ EOF