Dog-Thread-Nutzung auf LAN-Adaptern aktivieren

Wenn Sie das Feature dog threads aktivieren, stellt der Treiber das eingehende Paket in die Warteschlange des Threads und der Thread verarbeitet die aufrufende IP, TCP und den Socket-Code.

Treiber rufen standardmäßig IP direkt auf, wodurch der Protokollstack auf Socketebene aufgerufen wird, während er auf Interruptebene ausgeführt wird. Dies minimiert die Länge des Instruktionspfads, erhöht jedoch die Unterbrechungshaltezeit. Auf einem SMP-System kann eine einzelne CPU zum Engpass für den Empfang von Paketen von einem schnellen Adapter werden. Der Thread kann auf anderen CPUs ausgeführt werden, die möglicherweise inaktiv sind. Die Aktivierung der Dog-Threads kann in einigen Fällen die Kapazität des Systems erhöhen, wenn die Rate der eingehenden Pakete hoch ist, sodass eingehende Pakete parallel von mehreren CPUs verarbeitet werden können.

Die Unterseite der Thread-Funktion ist, dass sie die Latenzzeit bei geringer Belastung erhöht und auch die Host-CPU-Auslastung erhöht, da ein Paket in die Warteschlange eines Threads gestellt und der Thread zugeteilt werden muss.

Anmerkung: Diese Funktion wird auf Einzelprozessoren nicht unterstützt. Sie würde nur die Pfadlänge erhöhen und die Leistung verringern.

Dies ist eine Funktion für die Eingangsseite (Empfang) von LAN-Adaptern. Sie kann auf Schnittstellenebene mit dem Befehl ifconfig (ifconfig Schnittstelle Thread oder ifconfig Schnittstelle Hostname Thread) konfiguriert werden.

Verwenden Sie zum Inaktivieren des Features den Befehl ifconfig interface -thread , wie im folgenden Beispiel gezeigt:
# ifconfig en0 thread

# ifconfig en0
en0: flags=5e080863,e0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD,PSEG,THREAD,CHAIN>
        inet 192.1.0.1 netmask 0xffffff00 broadcast 192.1.0.255

# ifconfig en0 -thread

# ifconfig en0
en0: flags=5e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD,PSEG,THREAD,CHAIN>
        inet 192.1.0.1 netmask 0xffffff00 broadcast 192.1.0.255

Der Befehl netstat -s zeigt außerdem einige Zähler an, um die Anzahl der Pakete anzuzeigen, die von Threads verarbeitet wurden, und ob die Threadwarteschlangen eingehende Pakete gelöscht haben. Es folgt ein Beispiel für den Befehl netstat -s :
# netstat -s| grep hread

        352 packets processed by threads
        0 packets dropped by threads

Richtlinien für die Verwendung von Hundethreads:

  • Es müssen mehr CPUs als Adapter installiert werden. Normalerweise werden mindestens zwei Mal mehr CPUs als Adapter empfohlen.
  • Systeme mit schnelleren CPUs profitieren weniger. Maschinen mit einer langsameren CPU-Geschwindigkeit kann am meisten geholfen werden.
  • Diese Funktion verbessert höchstwahrscheinlich die Leistung, wenn eine hohe Eingabepaketrate vorliegt. Es wird die Leistung bei MTU 1500 im Vergleich zu MTU 9000 (Jumbo-Frames) auf Gigabit verbessern, da die Paketrate in kleinen MTU-Netzen höher sein wird.

    Die Hundethreads laufen am besten, wenn sie mehr Arbeit in ihrer Warteschlange finden und nicht in den Ruhemodus zurückkehren müssen (auf Eingabe warten). Dadurch wird der Systemaufwand für das Aufwecken des Threads durch den Treiber und das Zuteilen des Threads durch das System reduziert.

  • Die Hundethreads können auch die Zeit reduzieren, die eine bestimmte CPU mit maskierten Interrupts verbringt. Dadurch kann eine CPU freigegeben werden, um typische Arbeit auf Benutzerebene schneller wiederaufzunehmen.
  • Die Dog-Threads können auch die Leistung um etwa 10 Prozent reduzieren, wenn die Paketrate nicht schnell genug ist, um die Ausführung des Threads zu ermöglichen. Die 10 Prozent sind eine durchschnittliche Menge an erhöhtem CPU-Aufwand, der für die Planung und Zuteilung der Threads erforderlich ist.