[Guide] 40Gbit im Heimnetz Peer 2 Peer (Unraid)

stinger2k

Experte
Thread Starter
Mitglied seit
08.10.2017
Beiträge
32

Mellanox Peer-to-Peer Einrichtung

Unraid <-> Windows


Vorwort:

Dieser Guide richtet sich an die Leute die Daten sehr schnell im Heimnetz hin- und herschaufeln, oder wie ich einfach einen kleinen Server als NAS am laufen haben oder auch mit Parsec z.B. von einem leistungsfähigerem PC mit nativer Auflösung und High-Refresh-Rate sowie geringer Latenz streamen wollen.


Mein Szenario lag hierbei, dass ich zwei PCs habe mit jeweils einer Grafikkarte zum zocken (in meinem Fall in PC1 eine RX6900XT und in PC2 eine RTX3090).
In jedem PC habe ich natürlich mehrere SSDs verbaut worauf z.B. auch meine Games liegen welche ich zurzeit gerne zocke, und ab und an mal auch mit Parsec zum gleichzeitigen Arbeiten vom einem zum anderen PC streamen möchte oder mal schnelle Benchmarks zum Vergleich ausführe.

Daher dachte ich mir wenn ich die SSDs in den Server bekomme und dann evtl. auch noch eine NVMe SSD als Cache dazu packe, könnte ich annähernd mit nativer Zugriffsleistung auf die Laufwerke, meine PCs erstens von einer NVMe befreien (spielt ne Rolle wenn man zu wenige PCIe-Lanes zur Verfügung hat um im zweiten oder dritten PCIe-Slot noch Karten betreiben möchte, da bei vielen Consumer-Boards die Lane-Verteilung dann entweder einen Slot deaktiviert oder eben auf eine niedrigere PCIe-Gen schaltet und daher Performance verloren geht.

Soviel zum Einsatzzweck, nun zu meiner Einkaufsliste für dieses Vorhaben. Ich schaute mich in der Bucht um und fand Mellanox Connect-x3 VPI Karten:

1643907582536.png

Der QFSP+ Zusatz lieferte mir auch gleich die passenden Kabel dazu:

1643907588392.png

Achtung: wenn ihr 56GB/s nutzen wollt dann solltet ihr darauf achten ein Kabel mit der Bezeichnung MC2207130 (56Gbps) nehmen anstatt dem hier gezeigten MC2206130 (40Gbps).

Man findet oft Angebote mit dem Zusatz MCX354A-„QCBT“ oder MCX354A-„FCBT“ - gemeint ist damit, das im Ethernet-Modus die Karten mit 40GbE (FCBT-Variante) bzw./oder nur einem Viertel der Übertragungsrate also 10GbE (QCBT-Variante) arbeiten. Kaufen kann man beide Varianten da wir später noch durch crossflashen“ der Firmware auch aus einer QCBT-Karte eine vollwertige FCBT Karte machen.



Das wars dann auch schon mit der Einkaufsliste, da diese Hardware aus dem (outdated) Server-Bereich kommt, gibt es davon zurzeit relativ viele Angebote.

Nach dem Einbau der Komponenten und der Verkabelung kommen wir nun zum Einrichtungsvorgang.
Was wir dazu alles benötigen hier nachfolgend:

Firmware:

https://www.mellanox.com/support/firmware/connectx3en

Flashsoftware für die Kommandozeile:
https://www.mellanox.com/products/adapter-software/firmware-tools

Windows Treiber und Tools:
https://www.mellanox.com/products/adapter-software/ethernet/windows/winof-2

Unraid Mellanox-Firmware-Tools: (in den Community Apps die Mellanox-Firmware-Tools herunterladen)

1643907643314.png


Firmware-flash:
(auch um 10GbE Connect-x3 Karten auf Full Bandwith 40GbE zu nutzen)

Flashvorgang unter Windows:
(die Ausgabe von mst status bezeichnet den Controller den wir in flint angeben müssen)
Code:
mst status
flint -d mt4099_pci_cr0 -i "firmwaredatei.bin' -allow_psid_change burn

Flashvorgang unter Linux:
(hier sehen wir nach welche PCI-Id der Controller bekommen hat den wir wieder in mstflint angeben müssen)

Code:
lspci
mstflint -d 01:00.0 'firmwaredatei.bin' -allow_psid_change burn


Jetzt beide Karten in den Ethernet Modus setzen:

unter Linux:
Code:
mstconfig -d 01:00.0 s LINK_TYPE_P1=ETH
mstconfig -d 01:00.0 s LINK_TYPE_P2=ETH (nur bei den Dual-Port Karten)


unter Windows :
entweder im Gerätemanager unter Port Config oder in der Kommandozeile wie folgt:
Code:
mlxconfig -d mt4099_pciconf0 s LINK_TYPE_P1=ETH
mlxconfig -d mt4099_pciconf0 s LINK_TYPE_P2=ETH (nur bei den Dual-Port Karten)

Server-Schnittstelle konfigurieren wie folgt: (ohne Gateway-Adresse)

1643907657955.png

Windows Schnittstellen wie folgt: (ohne Gateway- und DNS-Server Adressen)

1643907670979.png

Für ein Peer-to-Peer Netzwerk (ohne Switch dazwischen) in der Windows Hosts-Datei die „beiden“ IP-Adressen hinzufügen:


´C:\Windows\System32\drivers\etc\hosts´
Code:
10.10.10.1 server

10.10.10.2 client

Nun sollte alles laufen und beide Geräte erreichbar sein und das Netzwerk mit 40 Gb/s laufen.

Damit läuft mal der grundlegende Verkehr zwischen den Peers, möchte man nun noch die Connect-x3 Karte nutzen und damit auch Internet über die Leitung des anderen Peers routen, müssen wir im Linux Server noch die Firewallregeln dafür festlegen und IPv4-Forwarding aktivieren.

Dazu gehen wir wie folgt vor…

(Voraussetzung dafür ist das
Code:
iptables
installiert ist – in Unraid ist dieses Paket schon standardmäßig für die Firewallregeln mit dabei, muss also nicht nachinstalliert werden.)


Also zuerst sehen wir mal nach wie die Schnittstelle heißt mit dem Befehl:
(wir suchen hier nach der IP-Adresse auf einer der Schnittstellen die wir vorher vergeben haben)
Code:
ifconfig
1643907687884.png

Nun wissen wir das die Schnittstelle br3 (falls Bridging aktiviert ist) heißt bzw. eth3 (wenn kein Bridging aktiviert ist)
Dies muss nachfolgend beachtet, und die farbig markierten Stellen mit dem Namen eurer Schnittstelle ausgetauscht werden.

Firewallregeln per iptables ergänzen: (192.168.0.0/24 steht hier für das Subnetz eures LAN-Netzwerks)

Code:
iptables -w -t nat -A POSTROUTING -s 192.168.0.0/24 -o br3 -j MASQUERADE && echo "iptables -w -t nat -A POSTROUTING -s 192.168.0.0/24 -o br3 -j MASQUERADE" >> /boot/config/go
iptables -w -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT  && echo "iptables -w -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT" >> /boot/config/go
iptables -w -t filter -A FORWARD -i br3 -j ACCEPT  && echo "iptables -w -t filter -A FORWARD -i br3 -j ACCEPT" >> /boot/config/go
danach noch schnell speichern mit:
Code:
iptables-save

wir öffnen nun mit vim oder nano die Datei
Code:
/etc/sysctl.conf
und entfernen das #-Zeichen vor der Zeile mit dem Inhalt:
Code:
net.ipv4.ip_forward=1
abspeichern und danach mit
Code:
sysctl -p
aktivieren.

Am (Windows/Linux/whatever)-Client vergeben wir nun zusätzlich noch die IP-Adresse des Servers(Unraid) als Gateway und die Adresse des Routers als DNS-Server:

1643907706845.png

Nach einem Reboot des Windows-Clients sollte nun auch das Internet laufen und ihr könnt die Schnittstelle am Mainboard anderwärtig verwenden.

Wollt ihr auch aus eurem bestehenden Subnetz heraus auf den Adressbereich der Mellanox Karten zugreifen, müsst ihr hierzu eine statische Route im Router anlegen wie folgt:

1643907730901.png


Falls ihr aus einer VM am Unraid-Server eure Karte im PC nicht pingen könnt dann ist es auch hier notwendig mit Routen in erwähnter Form zu arbeiten und die Firewall Regel unter erweiterte Einstellungen -> Eingehende Regeln wie folgend zu aktivieren:

1643907741581.png

Falls erforderlich (wenn kein ping möglich ist zum Client-PC) dann noch hier wie folgt für -

- Linux Clients statische Route:
Code:
ip route add 10.10.10.0/24 via 192.168.1.100
(Diesen Befehl könnt ihr danach in die Datei /etc/rc.local eingeben und abspeichern um bei einem Neustart die Route wieder aktiv zu halten.)[/SIZE]

- Windows Clients statische Route:
Code:
route ADD -p 10.10.10.0 MASK 255.255.255.0 10.10.10.1

und damit sind wir fertig! 👍

Wenn euch diese Anleitung gefallen hat, oder ihr auch über andere Projekte in diesem Bereich erfahren wollt, lasst es mich wissen ;)


Nachfolgend noch ein paar Eindrücke zur erfolgreichen Umsetzung:


1643907759833.png
1643907763451.png

iSCSI Laufwerk (Samsung NVMe 980 Pro per Passtrough)

1643907797990.png

SMB-Share als Netzlaufwerk eingebunden: (Samsung 840 Evo per SATA mit aktiviertem Cache)


1643907815096.png

 

Anhänge

  • Mellanox Peer2Peer Anleitung.pdf
    1,1 MB · Aufrufe: 202
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Sehr interessant - vielen Dank.

Mit den Mellanox-Firmware-Tools bei Unraid können die Karten mit der aktuellen Firmware versorgt werden?
 
Ja stimmt nur die Adressierung - Linux spezifisch - ist hier anders zu definieren als in Windows.
 
Prima, danke für den Tipp - schaue ich mir an.
Die Tools habe ich noch gar nicht gekannt.
 
Firewallregeln per iptables ergänzen: (192.168.0.0/24 steht hier für das Subnetz eures LAN-Netzwerks)

Code:
iptables -w -t nat -A POSTROUTING -s 192.168.0.0/24 -o br3 -j MASQUERADE
iptables -w -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -w -t filter -A FORWARD -i br3 -j ACCEPT
danach noch schnell speichern mit:
Code:
iptables-save

wir öffnen nun mit vim oder nano die Datei
Code:
/etc/sysctl.conf
und entfernen das #-Zeichen vor der Zeile mit dem Inhalt:
Code:
net.ipv4.ip_forward=1
abspeichern und danach mit
Code:
sysctl -p
aktivieren.
....unraid läuft im RAM...diese EInstellungen werden so also den Reboot nicht überleben, oder habe ich da was übersehen?
 
Danke ja stimmt, habe die Zeilen ergänzt um diese auch in
Code:
/boot/config/go
einzutragen damit die Rules den Neustart überleben.
 
Zuletzt bearbeitet:
Falls es noch jemanden interressiert:

Unraid als DHCP/DNS-Server nutzen


Code:
mkdir /boot/packages && cd /boot/packages
Code:
iprange_start="10.10.10.10"
iprange_stop="10.10.10.100"
netmask=255.255.255.0

printf "\n#loading dnsmasq\ninstallpkg /boot/packages/*.txz\n" >> /boot/config/go
printf "domain-needed\nbogus-priv\nlocal=/lan/\nexpand-hosts\ndomain=lan\ndhcp-range=$iprange_start,$iprange_stop,$netmask,72h\ndhcp-option=option:router,$router\ndhcp-option=option:domain-search,lan\ndhcp-leasefile=/boot/packages/dnsmasq/dnsmasq.leases\ndhcp-authoritative\nlocal-ttl=60\n" >> /boot/packages/dnsmasq.conf
cp /boot/packages/dnsmasq.conf /etc/ && printf "cp /boot/packages/dnsmasq.conf /etc/\n" >> /boot/config/go
printf "\n127.0.0.1       localhost\n$router       Server\n" >> /boot/packages/dnsmasq/hosts && cp /boot/packages/dnsmasq/hosts /etc/
printf "\n/usr/sbin/dnsmasq" >> /boot/config/go
 
Zuletzt bearbeitet:
Hallo ich habe mal eine Anfänger-Frage bzw. einen Hilferuf.

Ich habe mir 2 mal die ConnectX-3 mit 40Gbit geholt, geflasht als FCBT. Die eine Karte werkelt bereits in meinem Unraid Server und taucht als eth1/eth2 auf. Soweit so gut.
Die andere Karte sollte in meinem Desktop PC.
Leider wird sie überhaupt nicht erkannt.

Ryzen 9 3950X auf einem MSI X570-A Pro Mainboard.
Im Bios habe ich schon diverse Einstellungen versucht den PCIE_1 Slot von x16 auf x8/x8, x8/x4/x4 und x4/x4/x4/x4,
Die PCIE_1 Gen auf Gen4,Gen3, gleiches bei PCH_GEN auf Gen4, Gen3.

Laut Specs kann mein Board PCIE4.0 x16 und PCIE4.0 x4 was sich bei 20 Lanes für den CPU wiederspiegeln würde..

Ich brauche ein Board wo ich eine aktuelle Gaming-Grafikkarte und die Mellanoxkarte vernünftig betreiben kann. Falls jemand so etwas mit ähnlichen CPU im Einsatz hat schreibt es mir bitte.

PCIE 4.0 ist ja wesentlich schneller als PCIE 3.0. Gibt es vielleicht einen Adapter/Multiplexer von 4.0 x4 auf 3.0 x8/x16?

Danke im Vorraus
 
Mal die Karte in die Linux-Kiste gesetzt und/oder die andere in den Desktop? Ich würde mal tippen, dass die eine einfach hin ist.
 
Die andere Karte sollte in meinem Desktop PC. Leider wird sie überhaupt nicht erkannt.

@HeftiSchlumpf :
Wenn die CX354 nicht mal als ein Gerät am PCIe-Bus sichtbar ist, tippe ich, wie @besterino im Posting oberhalb, auf Hardware-Schaden (bzw. überprüfe bitte nochmal korrekten Sitz der Steckverbindung am Slot) , ansonsten könnte es bei manchen typischen "Desktop-OS" aus Redmond/USA auch am fehlenden Treiber-Support liegen.

Ich verwende u.a. ein "ASUS Pro WS X570-Ace" AM4-Mainboard, dieses verfügt über 3 mechanische PCIe 4.0x16 slots (elektrisch ist lt. Hersteller-Webseite sogar ein x8/x8/x8 Betrieb möglich) ... leider mit billigen Chipsatz-Lüfter onboard (gibt auch Mod-Anleitungen im Netz zum umrüsten auf Passiv-Kühlkörper), in Betrieb mit einer älteren PCIe 3.0x16 GraKa und einer MCX311A-XCAT (10 GBit SFP+, PCIe 3.0x4) als NIC.

P.S:
Ein H12SSL-xx mit älterer Epyc-CPU (z.B. 7282, 7302) könnte u.U. auch eine Lösung für das PCIe-Steckplatz Problem sein, reichlich Platz und Lanes für viele Adapter (z.B. PCIe x16 <-> 4x M.2) um den 40GBit QSFP+ NIC auszulasten :-).
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh