DIY: PC zum 25-Gigabit-Linux-Router umgebaut

Dieser Text ist eine Übersetzung. Das Original ist im Blog von Michael Stapelberg(öffnet im neuen Fenster) zu finden.
Init7 hat mit seinem FTTH-Glasfaserangebot Fiber7(öffnet im neuen Fenster) jetzt auch Glasfaserverbindungen mit 25 GBit/s (Fiber7-X2) beziehungsweise 10 GBit/s (Fiber7-X) im Angebot, falls man mehr als 1 GBit/s benötigt. Auch wenn dieses Angebot an meinem Standort aktuell noch nicht verfügbar ist (beziehungsweise sich aufgrund von Lieferverzögerungen deutlich verspätet(öffnet im neuen Fenster) ), wollte ich die Hardware bei mir bereits entsprechend vorbereiten.
Nach meiner letzten Enttäuschung(öffnet im neuen Fenster) mit dem MikroTik CCR2004 habe ich mich entschlossen, es mit einer angepassten PC-Zusammenstellung zu probieren.
Eine Alternative zu vielen spezialisierten Geräten, einschließlich Routern, ist die Nutzung eines PCs mit einer Erweiterungskarte. Die Aufgabe eines Internetrouters besteht darin, eine Netzwerkverbindung zu konfigurieren und Netzwerkpakete weiterzuleiten. Wir stellen uns jetzt also einen PC zusammen und bauen ein paar Netzwerk-Erweiterungskarten ein.
Für diesen selbst zusammengestellten PC-Internetrouter habe ich die folgenden Ziele festgelegt (von der höchsten zur niedrigsten Priorität sortiert):
1. Ausreichende Leistung, um 25 GBit/s auszunutzen, zum Beispiel mit zwei 10-GBit/s-Downloads
2. Leise: keine lauten Lüftergeräusche
3. Effizient: geringer Energiebedarf, möglichst wenig Hitzeentwicklung
4. Kostengünstig (also für einen High-End-Netzwerkaufbau ...)
Netzwerkanschlussplan
Der einfachste Internetrouter weist zwei Netzwerkverbindungen auf: einen Uplink ins Internet und das lokale Netzwerk. Ein Router ohne zusätzliche Karten kann gebaut werden, indem man ein Mainboard mit zwei Netzwerkanschlüssen verwendet.
Da es keine Mainboards mit SFP28-Slots (für 25-GBit/s-SFP28-Glasfasermodule) gibt, benötigen wir für unsere Zusammenstellung mindestens eine Netzwerkkarte. Eine SFP28-Netzwerkkarte mit zwei Anschlüssen reicht aus, wenn man bereits über einen SFP28-kompatiblen Netzwerk-Switch verfügt oder nur eine schnelle Verbindung benötigt.
Ich möchte einige schnelle Geräte (direkt und über Glasfaser) an meinen Router anschließen. Deshalb nutze ich zwei Netzwerkkarten: eine SFP28-Netzwerkkarte für den Uplink und eine 10G SFP+-Netzwerkkarte mit vier Anschlüssen für das lokale Netzwerk (LAN). Dadurch erhalten wir die folgenden Netzwerkanschlüsse und -verbindungen:
| Netzwerkkarte | max. Geschwindigkeit | Kabel | effektiv | Verbindung |
| Intel XXV710 | 25 GBit/s | Glasfaser | 25 GBit/s | Uplink über Fiber7-X2 |
| Intel XXV710 | 25 GBit/s | DAC | 10 GBit/s | Workstation |
| Intel XL710 | 10 GBit/s | RJ45 | 1 GBits/s | REST (RJ45 Gigabit) |
| Intel XL710 | 10 GBit/s | Glasfaser | 10 GBit/s | MikroTik 1 |
| Intel XL710 | 10 GBit/s | Glasfaser | 10 GBit/s | MikroTik 2 |
| Intel XL710 | 10 GBit/s | / | 10 GBit/s | (nicht verwendet) |
| Onboard-Version | 2,5 GBit/s | RJ45 | 1 GBit/s | (Management) |













Hardwareauswahl
Nachdem wir jetzt die Ziele und den Netzwerkbedarf definiert haben, wählen wir die eigentliche Hardware aus.
Netzwerkkarten
Mein Lieblingsgeschäft für Geräte für 10-GBit/s+-Netzwerke ist FS.COM(öffnet im neuen Fenster) . Es hat Intel-basierte Karten im Angebot:













- (347 CHF) PCIe 3.0 x8 Dual-Port 25G SFP28 Ethernet-Netzwerkkarte (Intel XXV710) FS.COM XXV710AM2-F2 #75603(öffnet im neuen Fenster)
- (329 CHF) PCIe 3.0 x8 Quad-Port 10G SFP+ Ethernet-Netzwerkkarte (Intel XL710-BM1) FS.COM FTXL710BM1-F4 #75602(öffnet im neuen Fenster)
Beide Karten sind mit dem i40eLinux-Kerneltreiber(öffnet im neuen Fenster) sofort einsatzbereit. Firmware-Blobs sind nicht erforderlich.
Eine gute Übersicht über die verschiedenen verfügbaren Intel-Karten ist auf der zweiten Seite ("Product View") im Benutzerhandbuch(öffnet im neuen Fenster) der Karte zu finden.
CPU, Chipsatz, Mainboard und Gehäuse
CPU und Chipsatz
Ich habe jetzt schon öfter gelesen, dass die aktuellen AMD-CPUs die CPUs von Intel in der Performance pro Watt übertreffen. Wir erreichen die Ziele 2 und 3 (weniger Lärm und geringerer Energiebedarf) mit niedrigeren Wattzahlen. Deshalb wähle ich eine AMD-CPU und das zugehörige Mainboard für diese Zusammenstellung.
Die aktuelle CPU-Generation von AMD heißt Zen 3 ("aktuell" zum Zeitpunkt der Veröffentlichung des Textes, jetzt ist es Ryzen 5000, Anm. d. Red.) und die aktuellen auf Zen 3 basierenden CPUs(öffnet im neuen Fenster) können in die Modelle 65W TDP (Thermal Design Power)(öffnet im neuen Fenster) und 105W TDP unterteilt werden. Derzeit gibt es für Endverbraucher nur ein 65W-Modell: den Ryzen 5 5600X (auch hier: mittlerweile sind es mehr , Anm. d. Red.).
Mainboards werden für/mit einem bestimmten sogenannten Chipsatz gefertigt. Zen 3-CPUs verwenden den AM4-Socket, für den es acht verschiedene Chipsätze(öffnet im neuen Fenster) gibt. Unsere Netzwerkkarten benötigen PCIe 3.0. Dadurch fallen fünf Chipsätze sofort aus der Auswahl - nur die Chipsätze A520, B550 und X570 bleiben übrig.
Ich wurde mehrfach darauf hingewiesen (vielen Dank dafür!), dass die Wikipedia-Tabelle nur PCIe-Lanes enthält, die über den Chipsatz bereitgestellt werden. Streng genommen unterstützt der ältere Chipsatz X470 (Release im März 2018) CPUs, die PCIe 3.0-Lanes bereitstellen. Beispielsweise sollte ROG Strix X470-F(öffnet im neuen Fenster) mit dem x8/x8-Modus ebenfalls funktionieren.













Mainboard: PCIe-Bandbreite
Ursprünglich habe ich versucht, das Mainboard ASUS PRIME X570-P zu nutzen. Dabei bin ich jedoch auf die beiden folgenden Probleme gestoßen.
Erstens: zu laut. X570-Mainboards benötigen einen störend lauten Chipsatzlüfter für ihren 15W TDP. Andere Chipsätze wie der B550 brauchen für ihren 5W TDP keinen Lüfter. Mit einem lauten Chipsatzlüfter lässt sich Ziel 2 (wenig Lärm) nicht erreichen. Nur die kürzlich auf den Markt gebrachte Variante X570S wird ohne Lüfter geliefert.
Zweitens: nicht genug PCIe-Bandbreite/-Slots. So werden die Slots in den technischen Spezifikationen von ASUS beschrieben:













Das heißt, das Board verfügt über zwei Slots (ein Slot via CPU, ein Slot via Chipsatz), die physisch breit genug sind, um eine x16-Karte in voller Länge aufzunehmen. Allerdings kann nur der erste Anschluss elektronisch als x16-Slot genutzt werden. Der andere Anschluss verfügt nur über PCIe-Lanes, die elektronisch für x4 angeschlossen sind, also "x16 (max. im x4-Modus)".
Leider brauchen unsere Netzwerkkarten einen elektronischen Anschluss für alle PCIe-x8-Lanes, die mit voller Geschwindigkeit laufen. Vielleicht bietet Intel/FS.COM irgendwann eine neue Generation Netzwerkkarten an, die PCIe 4.0 nutzen, da PCIe 4.0 x4 dieselben 7,877 GB/s Durchsatz wie PCIe 3.0 x8 erzielt. Bis dahin musste ich ein neues Mainboard finden.
Die Suche nach Mainboards über die PCIe-Fähigkeiten ist ziemlich anstrengend, da nicht alle Mainboard-Anbieter einheitlich Mainboard-Blockdiagramme oder PCIe-Baumdiagramme zur Verfügung stellen.
Stattdessen können wir explizit nach einem Feature suchen, das sich PCIe-Verzweigung (Bifurcation) nennt. Kurz gesagt, können wir mit der PCIe-Verzweigung die PCIe-Bandbreite der Ryzen-CPU von 1 PCIe 4.0 x16 in 1 PCIe 4.0 x8 + 1 PCIe 4.0 x8 aufteilen und so definitiv unsere Anforderung erfüllen, dass wir zwei x8-Slots mit voller Bandbreite benötigen.
Ich habe eine Liste mit (nur!) drei B550-Mainboards, die die PCIe-Verzweigung unterstützen, in einem Anandtech-Bericht(öffnet im neuen Fenster) gefunden. Zwei werden von Gigabyte, einer von ASRock hergestellt. Ich habe gelesen, dass das UEFI-Setup von Gigabyte ziemlich merkwürdig sein soll, deshalb habe ich mich für das Mainboard ASRock B550 Taichi entschieden.
Gehäuse
Als Gehäuse benötigte ich ein Midi-Gehäuse (groß genug für den ATX-Formfaktor des B550-Mainboards) mit vielen Optionen für große, sich langsam drehende Lüfter.
Ich bin über das Corsair 4000D Airflow gestolpert(öffnet im neuen Fenster) , das für 80 CHF (76 Euro) erhältlich ist und positive Rezensionen erhielt(öffnet im neuen Fenster) . Damit bin ich sehr zufrieden: Es gibt keine scharfen Kanten, das Gehäuse lässt sich schnell, einfach und sauber aufstellen und die vorderen und oberen Blenden bieten viel Platz für Kühlung durch große Lufteinlässe.













Im Inneren bietet das Gehäuse viel Platz und Optionen zum Verlegen von Kabeln auf der Rückseite.













Das sorgt wiederum für eine aufgeräumte Vorderseite.













Lüfter, Server und Grafikkarte
Lüfter
Ich bin seit vielen Jahren sehr zufrieden mit den Lüftern von Noctua(öffnet im neuen Fenster) . Bei dieser Zusammenstellung verwende ich nur Noctua-Lüfter, damit ich Ziel 2 (leise, keine lauten Lüftergeräusche) erreiche.













Diese Lüfter sind größer (140 mm), so dass sie sich langsamer drehen können und dennoch wirksam sind.
Die endgültige Lüfterkonfiguration sah schließlich so aus:
- 1 Noctua NF-A14 PWM 140 mm an der Vorderseite, um Luft aus dem Gehäuse zu befördern
- 1 Noctua NF-A14 PWM 140 mm an der Oberseite, um Luft in das Gehäuse zu befördern
- 1 Noctua NF-A12x25 PWM 120 mm an der Rückseite, um Luft in das Gehäuse zu befördern
- 1 Noctua NH-L12S CPU-Lüfter
Vermutlich ist das viel zu viel. Ich kann mir gut vorstellen, dass ich einen dieser Lüfter komplett ausschalten könnte, ohne dass sich eine Auswirkung bei den Temperaturen zeigt. Aber ich wollte auf der sicheren Seite sein und viel Kühlkapazität haben, da ich nicht weiß, wie heiß die Netzwerkkarten von Intel im Praxisbetrieb werden.
Lüfter-Controller
Im Lieferumfang des ASRock B550 Taichi ist ein Nuvoton NCT6683D-T(öffnet im neuen Fenster) -Lüfter-Controller enthalten.
Leider hat ASRock die Registrierung der Kunden-ID anscheinend auf 0 anstatt auf CUSTOMER_ID_ASROCK gesetzt. Deshalb muss der Linux-Treiber nct6683 mit der Option force geladen werden.
Sobald das Modul geladen ist, werden mit lm-sensors exakte PWM-Lüftergeschwindigkeiten aufgelistet. Die Temperaturwerte sind jedoch falsch gekennzeichnet und entsprechen nicht genau den Temperaturen, die mir auf dem UEFI-H/W-Monitor angezeigt werden:
nct6683-isa-0a20
Adapter: ISA adapter
fan1: 471 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
fan5: 0 RPM (min = 0 RPM)
fan6: 0 RPM (min = 0 RPM)
fan7: 0 RPM (min = 0 RPM)
Thermistor 14: +45.5 C (low = +0.0 C)
(high = +0.0 C, hyst = +0.0 C)
(crit = +0.0 C) sensor = thermistor
AMD TSI Addr 98h: +40.0 C (low = +0.0 C)
(high = +0.0 C, hyst = +0.0 C)
(crit = +0.0 C) sensor = AMD AMDSI
intrusion0: OK
beep_enable: disabled
Zumindest beim Linux-Treiber nct6683 gibt es keine Möglichkeit, die PWM-Lüftergeschwindigkeit zu ändern. Die entsprechenden Dateien an der hwmon- Schnittstelle sind als schreibgeschützt markiert.
So musste ich akzeptieren, dass ich diesen Lüfter-Controller nicht unter Linux konfigurieren konnte, und versuchte, im UEFI-Setup statische Einstellungen für die Lüftersteuerung zu konfigurieren.
Doch trotz identischer Lüftereinstellungen wurde einer meiner 140-mm-Lüfter dann ausgeschaltet. Ich habe keine Ahnung, warum - vielleicht ein gestörtes PWM-Signal oder einfach ein Bug im Lüfter-Controller?
Die Steuerung der Lüfter, so dass sie sich zuverlässig bei niedriger Geschwindigkeit drehen, ist entscheidend, um Ziel 2 (wenig Lärm) zu erreichen. Deshalb habe ich nach Lüfter-Controllern anderer Hersteller gesucht und Corsair Commander Pro(öffnet im neuen Fenster) gefunden, der laut einem Blogpost mit Linux kompatibel ist(öffnet im neuen Fenster) .
Server-Festplatte
Dieser Bestandteil der Zusammenstellung hat nichts mit dem Router zu tun, aber ich dachte mir, wenn ich einen schnellen Computer mit einer schnellen Netzwerkverbindung habe, könnte ich auch eine schnelle, große Festplatte hinzufügen und mich von meinem anderen Server-PC verabschieden.
Ich habe mich für die Samsung 970 EVO Plus M.2 SSD mit 2 TB Kapazität entschieden. Diese Festplatte liefert 3.500 MB/s sequenziellen Lesedurchsatz(öffnet im neuen Fenster) . Das ist mehr als die rund 3.000 MB/s, die ein 25-GBit/s-Link verarbeiten kann.
Grafikkarte
Ein wichtiger Bestandteil der Computerzusammenstellung besteht für mich darin, die Fehlerbehebung und Wartung möglichst einfach zu gestalten. In meiner aktuellen technischen Umgebung bedeutet das, einen HDMI-Monitor und eine USB-Tastatur anzuschließen, damit ich beispielsweise von einem anderen Gerät booten, Änderungen im UEFI-Setup vornehmen oder mir die Meldungen der Linux-Konsole ansehen kann.
Leider besitzt der Ryzen 5 5600X keine integrierte Grafikeinheit. Deshalb müssen wir Grafikkarten einbauen, um eine Grafikausgabe zu ermöglichen. Ich habe mich für die Zotac GeForce GT 710 Zone Edition entschieden, da es sich um die günstigste verfügbare Karte (60 CHF, 57 Euro) handelt, die passiv gekühlt wird.
Eine Alternative zur Nutzung einer Grafikkarte könnte eine PCIe IPMI-Karte wie die ASRock PAUL sein(öffnet im neuen Fenster) . Solche Karten sind jedoch anscheinend noch schwerer zu finden und deutlich teurer. Auf längere Sicht ist die beste Variante wahrscheinlich, die Ryzen 5 5600G mit integrierter Grafikkarte zu nutzen.
Alle Komponenten im Überblick
Komponentenliste
Ich liste im Folgenden zwei verschiedene Optionen auf. Option A ist meine Zusammenstellung (Router + Server), Option B ist jedoch deutlich günstiger, wenn man nur einen Router benötigt. Für beide Optionen werden dieselben Basiskomponenten verwendet:
| Preis | Typ | Artikel |
| 347 CHF | Netzwerkkarte | FS.COM Intel XXV710, 2 × 25 Gbit/s (#75603) |
| 329 CHF | Netzwerkkarte | FS.COM Intel XL710, 4 × 10 Gbit/s (#75602) |
| 314 CHF | CPU | Ryzen 5 5600X |
| 290 CHF | Mainboard | ASRock B550 Taichi |
| 92 CHF | Gehäuse | Corsair 4000D Airflow (Midi Tower) |
| 67 CHF | Lüfter-Controller | Corsair Commander Pro |
| 65 CHF | Gehäuselüfter | 2 x Noctua NF-A14 PWM (140mm) |
| 62 CHF | CPU-Lüfter | Noctua NH-L12S |
| 35 CHF | Gehäuselüfter | 1 x Noctua NF-A12x25 PWM (120mm) |
| 60 CHF | GPU | Zotac GeForce GT 710 Zone Edition (1GB) |
Basis insgesamt: 1.590 CHF (1.510 Euro)
Option A: Servererweiterung
Da ich noch einige Teile vorrätig hatte und meinen Router als Dateiserver (über einen großen RAM-Cache/eine schnelle Festplatte) nutzen wollte, habe ich die folgenden Teile verwendet:
| Preis | Typ | Artikel |
| 309 CHF | Festplatte | Samsung 970 EVO Plus 2000GB, M.2 2280 |
| 439 CHF | RAM | 64GB HyperX Predator RAM (4x, 16GB, DDR4-3600, DIMM 288) |
| 127 CHF | Netzteil | Corsair SF600 Platinum (600W) |
| 14 CHF | Verlängerung | Silverstone ATX 24-24Pin-Verlängerung (30cm) |
| 10 CHF | Verlängerung | Silverstone ATX-Verlängerung 8-8(4+4)Pin (30cm) |
Das Netzteil Corsair SF600 gehört eigentlich nicht zum Server, ich hatte es nur da. Stattdessen würde ich das Corsair RM650x 2018 (mit längeren Kabeln) empfehlen.
Server insgesamt: 2.770 CHF (2.640 Euro)
Option B: Alternative ohne Server (nur Router)
Wer nur einen Router benötigt, kann sich für eine günstigere Festplatte und billigeren RAM-Speicher entscheiden, zum Beispiel diese.
| Preis | Typ | Artikel |
| 112 CHF | Netzteil | Corsair RM650x *2018* |
| 33 CHF | Festplatte | Kingston A400 120GB M.2 SSD |
| 29 CHF | RAM | Crucial CT4G4DFS8266 4GB DDR4-2666 RAM |
Bei mir lag noch der CPU-Lüfter Noctua NH-L12S CPU herum, den ich wiederverwendet habe.
Noctua hat vor kurzem einen passiven CPU-Kühler auf den Markt gebracht , der eine interessante Alternative darstellen könnte.
UEFI-Setup für das ASRock-B550-Taichi-Mainboard
So aktivieren Sie die PCIe-Verzweigung für unser Setup mit zwei PCIe-3.0-x8-Karten:
Setzen Sie Advanced ᐳ AMD PBS ᐳ PCIe/GFX Lanes Configuration auf x8x8 .
So wird der PC nach einem Stromausfall immer eingeschaltet:
Setzen Sie Advanced ᐳ Onboard Devices Configuration ᐳ Restore On AC Power Loss auf Power On .
So booten Sie PXE (über UEFI) auf dem Ethernet-Anschluss auf dem Board (Management), deaktivieren jedoch die langsamen optionalen ROMs für den PXE-Boot auf den FS.COM-Netzwerkkarten:
- 1. Setzen Sie Boot ᐳ Boot From Onboard LAN auf Enabled .
- 2. Setzen Sie Boot ᐳ CSM (Compatibility Support Module) ᐳ Launch PXE OpROM Policy auf UEFI only .
Setup des Lüfter-Controllers
Der Lüfter-Controller Corsair Commander Pro(öffnet im neuen Fenster) wird unter Linux gut unterstützt. Nachdem die Linux-Kerneloption CONFIG_SENSORS_CORSAIR_CPRO aktiviert wurde, wird das Gerät im Untersystem hwmon angezeigt.
Ein Lüfter kann wie folgt auf volle Leistung eingestellt (100% PWM) oder komplett ausgeschaltet (0% PWM) werden:
# echo 255 ᐳ /sys/class/hwmon/hwmon3/pwm1 # echo 0 ᐳ /sys/class/hwmon/hwmon3/pwm1
Ich lasse meine Lüfter bei 13 Prozent PWM laufen, was etwa 226 U/min ausmacht:
# echo 33 ᐳ /sys/class/hwmon/hwmon3/pwm1 # cat /sys/class/hwmon/hwmon3/fan1_input 226
Praktischerweise speichert der Corsair Commander Pro die Einstellungen auch bei Stromausfall. Man muss also keinen permanenten Prozess zur Lüftersteuerung ausführen. Eine einmalige Einstellung sollte ausreichen.
Energiebedarf, Leistung, Tests
Energiebedarf
Der PC verbraucht ohne weiteres Tuning standardmäßig im Leerlauf (nur mit angeschlossenem Management-Netzwerk) etwa 48 Watt Strom. Jeder zusätzliche Netzwerk-Link erhöht den Energiebedarf um etwa 1 Watt.













Wenn ich alle Ryzen-Optionen(öffnet im neuen Fenster) in meinem Linux-Kernel aktiviere und zum stromsparenden CPU-Frequenzregler wechsle, verringert sich der Energiebedarf um rund 1 Watt.
Auf manchen Mainboards muss eventuell die Option "force" für "Global C-States" aktiviert werden, um Strom zu sparen(öffnet im neuen Fenster) . Das gilt jedoch nicht für das B550 Taichi.
Ich habe es mit Undervolting für den CPU ausprobiert, das hat jedoch nicht mal 1 Watt Unterschied beim Energiebedarf ausgemacht. Diese geringe Stromeinsparung ist es mir nicht wert, mein Setup möglicherweise unzuverlässig zu machen.
Ich habe diese Werte mit einem Homematic HM-ES-PMSw1-Pl-DN-R5(öffnet im neuen Fenster) gemessen, das ich zu Hause hatte.
Leistung
Ziel 1 besteht darin, 25 GBit/s auszunutzen, zum Beispiel mit zwei 10-GBit/s-Downloads. Und ich rede hier von großen Massenübertragungen, nicht von kleinen Datenpaketen.
Wem es eher um ein Szenario mit vielen kleinen Paketen geht, der sollte sich The calculations: 10Gbit/s wirespeed(öffnet im neuen Fenster) als gute Einführung sowie die Empfehlungen von Thomas Fragstein für Benchmark-Tools(öffnet im neuen Fenster) anschauen. Ich selbst habe solche Tests bisher nicht durchgeführt.
Um ein Gefühl für die Leistung beziehungsweise den Freiraum bei der Router-Zusammenstellung zu bekommen, habe ich drei verschiedene Tests durchgeführt.
Test A: 10-GBit/s-Bridging-Durchsatz
Für diesen Test habe ich zwei PCs an die XL710-Netzwerkkarte des Routers angeschlossen und mit iperf3(1)(öffnet im neuen Fenster) einen 10-GBit/s-TCP-Stream zwischen den beiden PCs erzeugt. Der Router muss in diesem Szenario die Pakete nicht modifizieren, sondern nur weiterleiten. Das sollte also das Szenario mit der geringsten Last sein.













Test B: 10-GBit/s-NAT-Durchsatz
Bei diesem Test wurden zwei PCs so verbunden, dass der Router die Netzwerkadressübersetzung (NAT)(öffnet im neuen Fenster) durchführt, die für Downloads aus dem Internet über IPv4 erforderlich ist. Dieses Szenario ist etwas komplexer, da der Router Pakete modifizieren muss. Aber wie wir unten sehen können, benötigt ein 10-GBit/s-NAT-Stream kaum mehr Ressourcen als ein 10-GBit/s-Bridging.













Test C: 4 × 10-GBit/s-TCP-Streams
Bei diesem Test wollte ich das Maximum aus der XL710-Netzwerkkarte herausholen. Deshalb habe ich vier PCs angeschlossen und einen iperf3(1)(öffnet im neuen Fenster) -Benchmarktest zwischen jedem PC und dem Router selbst gestartet, und zwar gleichzeitig.
Bei diesem Szenario wird die CPU zu rund 16 Prozent ausgelastet, es gibt also insgesamt vermutlich noch Luft nach oben, selbst wenn alle Anschlüsse maximal genutzt werden.













Man sollte unbedingt die Linux-Kerneloption CONFIG_IRQ_TIME_ACCOUNTING aktivieren, so dass IRQ-Handler in die CPU-Auslastungszahlen eingeschlossen werden,(öffnet im neuen Fenster) um exakte Messergebnisse zu erhalten.
Alternativen und DPDK-Test
Mögliche Alternativen
Der passiv gekühlte Superserver E302-9D wird mit zwei SFP+-Anschlüssen (10 GBit/s) ausgeliefert. Er umfasst sogar zwei PCIe-3.0-x8-fähige Slots. Leider scheint es zurzeit nicht möglich, diesen Computer zu kaufen, zumindest nicht in der Schweiz.
Weitere Vorschläge finden sich in den Antworten auf diesen Twitter-Thread(öffnet im neuen Fenster) . Die meisten Alternativen sind entweder nicht erhältlich, erfordern deutlich mehr Eigenarbeit (zum Beispiel ein eigenes Gehäuse) oder bieten keine Unterstützung für 25 GBit/s.
Router-Software: router7-Portierung
Ich habe 2018 meine eigene kleine Router-Software router7(öffnet im neuen Fenster) für zu Hause in Go geschrieben, die ich seither nutze.
Da ich keine Zeit habe, Support für andere Benutzer zu leisten, empfehle ich die Nutzung von router7 nur denjenigen weiter, die das Projekt wirklich spannend finden und damit leben können, dass es keinen Support gibt. Anderen ist vermutlich besser mit einer etablierten und unterstützten Router-Software geholfen. Bekannte Möglichkeiten sind OPNsense(öffnet im neuen Fenster) oder OpenWrt(öffnet im neuen Fenster) . Bei Wikipedia findet sich ebenfalls eine Liste mit Router- und Firewall-Distributionen.(öffnet im neuen Fenster)
Damit router7 für diese 25 GBit/s-Router-Zusammenstellung funktioniert, musste ich einige Anpassungen vornehmen.
Da wir den UEFI-Netzwerk-Boot anstelle des BIOS-Netzwerk-Boot verwenden, musste ich zuerst dafür sorgen, dass die PXE-Boot-Implementierung im Installationsprogramm von router7 mit dem UEFI PXE-Boot funktioniert(öffnet im neuen Fenster) .
Anschließend habe ich einige zusätzliche Kerneloptionen für Netzwerk- und Speichertreiber(öffnet im neuen Fenster) im Kernel von router7 aktiviert. Zum Code der Steuerungsebene von router7 habe ich eine Bridging-Konfiguration für Netzwerkgeräte hinzugefügt(öffnet im neuen Fenster) , die in meinem vorherigen Router-Setup mit zwei Anschlüssen nicht erforderlich war.
Bei der Entwicklung habe ich einige Linux-Programme statisch kompiliert oder mit allen Abhängigkeiten kopiert ( gokrazy-Prototyping(öffnet im neuen Fenster) ), damit sie unter router7 laufen, zum Beispiel sensors(1)(öffnet im neuen Fenster) , ethtool(8)(öffnet im neuen Fenster) sowie die Implementierungen ip(8)(öffnet im neuen Fenster) und bridge(8)(öffnet im neuen Fenster) von iproute2.
Anhand meiner Tests gehe ich davon aus, dass die von mir gewählte Hardware ausreichend Leistung bietet, um sie für die Verteilung eines 25-GBit/s-Upstream-Links auf mehrere 10-GBit/s-Geräte einzusetzen. Sicher weiß ich es erst, wenn die fiber7(öffnet im neuen Fenster) -Anschlusszentrale bei mir in der Nähe das entsprechende Upgrade für die Unterstützung von 25-GBit/s-Fiber7-X2-Verbindungen erhält.
Andere Zusammenstellungen
Für diejenigen, deren Anforderungen meine Zusammenstellung nicht exakt entspricht, können vielleicht andere als Inspiration dienen, zum Beispiel diese hier: Scott Dier's Intel NUC 9 Pro-Zusammenstellung(öffnet im neuen Fenster) .
DPDK-Test
Pim(öffnet im neuen Fenster) hat einen DPDK(öffnet im neuen Fenster) -basierten Lasttest namens T-Rex(öffnet im neuen Fenster) auf diesem Computer durchgeführt. Hier findet sich die Zusammenfassung zu diesem Test.
Beim DPDK schafft diese Hardware 4x10G bei 64b/66b-Encoding. 6x10G werden nicht erreicht, da bei 62 Mpps (Millionen Pakete pro Sekunde) mit vier Kernen (jeweils 15,5 Mpps pro Kern) Schluss ist.
25 GBit/s konnte ich nicht testen, da uns ein 25G-DAC-Kabel fehlte, aber bei Extrapolierung der Zahlen liefern drei CPUs als Quelle und Senke rund 24,6 Gbit pro Kern, was wahrscheinlich ausreicht, da ein Kern für das Betriebssystem und zwei Kerne für die Steuerungsebene übrig bleiben.
Wenn der Computer einen Ryzen mit zwölf Kernen hätte, könnten alle NICs genutzt werden und es wäre noch Platz übrig. Das werde ich also kaufen.













Michael Stapelberg(öffnet im neuen Fenster) ist Entwickler und hat unter anderem den Fenstermanager i3 für Linux, die Debian Code Search(öffnet im neuen Fenster) und das IRC-Netzwerk RobustIRC geschrieben. Außer mit Open-Source-Software beschäftigt er sich in seiner Freizeit mit Elektronik, schraubt an Servern und Tastaturen. Da er sich schon früh mit IPv6 und HiDPI beschäftigt hat, hat er auch Patches für zahlreiche Programme beigesteuert, zum Beispiel Chromium, apt, radvd und vsftpd.



