Forum: Mikrocontroller und Digitale Elektronik Ein schneller Interconnect für Cluster (2 Nodes nur)


von Mutluit M. (mutluit)


Lesenswert?

Hi,
welche Methode ist am besten geeignet um 2 Kleinstcomputer (wie z.B. Pi 
& Co) miteinenander direkt zu verbinden (also nicht Ethernet), um die 
schnellste Verbindung (Datenrate) zu haben?

Natürlich erwartet man in diesem Fall dass die Datenrate mehr sein muss 
als wenn man die Boards über ihre NICs verbindet.

Wäre die SPI-Schnittstelle die geeignetste Methode für so ein Vorhaben?

Ich dachte mir, dass man die 2 Boards direkt über Kabel verbindet und 
ein Kerneltreiber schreibt für die Kommunikation.
Oder gibt es spezielle Bausteine um so was noch besser zu realisieren?

Was bräuchte man zusätzlich wenn man 3 Nodes (anstatt 2) in Serie 
verbinden wollte, also in einer Art Ring-Netz? Oder gibt es hierfür 
bessere Alternativen?

Bin für alle Ideen dankbar.

Thx

von Hans (Gast)


Lesenswert?

Schneller wie über den NIC wirst du ohne PCIe Lanes nicht werden...

Das was du bei der Latenz rausholst wirst du bei der Bandbreite 
verlieren.

73

von S. R. (svenska)


Lesenswert?

Mutluit M. schrieb:
> Natürlich erwartet man in diesem Fall dass die Datenrate
> mehr sein muss als wenn man die Boards über ihre NICs verbindet.

Nun, mit GBit-Ethernet sind um die 100 MB/s machbar, wenn die NICs 
schnell genug mit dem SoC verbunden sind. Beim RPi ist wegen dem 
USB-Anschluss dazwischen vielleicht die Hälfte machbar.

Alle anderne Anschlüsse (abgesehen vom USB-Anschluss) sind langsamer.

Mutluit M. schrieb:
> Wäre die SPI-Schnittstelle die geeignetste Methode für so ein Vorhaben?

Je nach Kabellänge sind damit 2 MB/s drin.

von Andre (Gast)


Lesenswert?

Am schnellsten wird es wohl werden, wenn du den LAN9514 USB Hub raus 
wirfst und beide SOCs über eine USB Bridge zusammen klemmst.
Alternativ könnte man noch das CSI2 (Camera) Interface anschauen, dafür 
Treiber zu schreiben soll aber sehr schwer sein.

Was soll das denn am Ende werden? Ein Rechen-Cluster? Denke auch an den 
Software Overhead für so einen Cluster. Selbst wenn du einen super 
schnellen Link zwischen den beiden CPUs hast, verlierst du viel Leistung 
durch die Aufteilung der Tasks.

von S. R. (svenska)


Lesenswert?

Andre schrieb:
> Alternativ könnte man noch das CSI2 (Camera) Interface anschauen,
> dafür Treiber zu schreiben soll aber sehr schwer sein.

Zumal damit nur die Empfangsrichtung geklärt wäre, nicht die 
Senderichtung.

von Mutluit M. (mutluit)


Lesenswert?

S. R. schrieb:
> Mutluit M. schrieb:
>> Natürlich erwartet man in diesem Fall dass die Datenrate
>> mehr sein muss als wenn man die Boards über ihre NICs verbindet.
>
> Nun, mit GBit-Ethernet sind um die 100 MB/s machbar, wenn die NICs
> schnell genug mit dem SoC verbunden sind. Beim RPi ist wegen dem
> USB-Anschluss dazwischen vielleicht die Hälfte machbar.
>
> Alle anderne Anschlüsse (abgesehen vom USB-Anschluss) sind langsamer.

Ich habe Pi zwar als Beispiel genannt, aber eigentlich meinte ich eher 
Boards mit echtem GbE-NIC wie den Rock Pi 4 mit dem RK3399, oder etwas 
billigere Boards mit RK3328.

Wie wird Native-GbE eigentlich angeschlossen? Ich meine welche 
Schnittstelle auf dem Board wird dafür benutzt? Oder hat so eine CPU
direkte Unterstützung (Pins) für Eth?


>> Mutluit M. schrieb:
>> Wäre die SPI-Schnittstelle die geeignetste Methode für so ein Vorhaben?
>
> Je nach Kabellänge sind damit 2 MB/s drin.

D.h. zusammenfassend: SPI ist Grössenordnungen langsamer als Eth.
Schnellere Schnittstellen sind USB, SATA bzw. Parallel-SCSI.

Danke allen für die Infos, jetzt kann ich in bestimmte Richtungen 
recherchieren.

von Mutluit M. (mutluit)


Lesenswert?

Andre schrieb:
> Am schnellsten wird es wohl werden, wenn du den LAN9514 USB Hub raus
> wirfst und beide SOCs über eine USB Bridge zusammen klemmst.
> Alternativ könnte man noch das CSI2 (Camera) Interface anschauen, dafür
> Treiber zu schreiben soll aber sehr schwer sein.
>
> Was soll das denn am Ende werden? Ein Rechen-Cluster? Denke auch an den
> Software Overhead für so einen Cluster. Selbst wenn du einen super
> schnellen Link zwischen den beiden CPUs hast, verlierst du viel Leistung
> durch die Aufteilung der Tasks.

Es geht um einen schnellen Interconnect zwischen den Boards, ohne die 
bestehenden Anschlüsse dafür zu benutzen. Es sollte im Idealfall 
schneller als Eth sein, relativ einfach zu realisieren, und kostenmässig 
sehr wenig betragen.
Also, vlt. ein billiges Expansion-Board herstellen für Bildung solch 
eines Clusters, evtl. um auch Boards verschiedener Hersteller 
miteinander zu verbinden.
Also, erstmal nur eine Idee bzgl. der Machbarkeit.

von Stefan F. (Gast)


Lesenswert?

Einfach und schnell wäre eine parallele Übertragung mit Busmaster-DMA 
Controller, falls vorhanden.

von S. R. (svenska)


Lesenswert?

Mutluit M. schrieb:
> Wie wird Native-GbE eigentlich angeschlossen?

In der Regel "native", was auch immer das bedeutet. :-)

> Ich meine welche Schnittstelle auf dem Board wird dafür benutzt?

Das hängt vom jeweiligen Board ab. Du hast ja nichts konkretes 
spezifiziert und meine Annahme war falsch, also solltest du bevorzugt 
selbst ins jeweilige Datenblatt schauen. :-)

> Oder hat so eine CPU direkte Unterstützung (Pins) für Eth?

Die meisten SoCs haben direkte Unterstützung für ein MII oder 
RMII-Interface, wo man direkt den Ethernet-PHY anklemmen kann. Das 
eigentliche Ethernet-Signal kommt nur selten aus den Pins raus, weil 
elektrisch inkompatibel und so.

Andere SoCs unterstützen schlicht einen PCIe-Bus (oft 1x, manchmal 4x) 
und klemmen den NIC darüber an. Findet man vermutlich eher im 
Serverbereich, genauso wie schnelles SATA oder so.

Mutluit M. schrieb:
> Schnellere Schnittstellen sind USB, SATA bzw. Parallel-SCSI.

Die meisten SoCs haben USB-Unterstützung, aber GbE ist schneller als mit 
USB2. Manche SoCs haben SATA-Unterstützung, aber eine SATA-Schnittstelle 
sagt nicht viel über die Geschwindigkeit der Datenübertragung aus. Eine 
SCSI-Schnittstelle ist mir an ARM-SoCs bisher nicht untergekommen.

Ich empfehle dir ja GbE. Im Gegensatz zu den Alternativen ist das 
wenigstens für "geringe Latenz" (v.a. bei den Industrievarianten), "hohe 
Bandbreite" und "beliebige Daten" optimiert.

Nachtrag: Gigabit-Ethernet mit IP unterstützt ohne weiteren Aufwand auch 
"Bus", "Adressierung", "Broadcast", "längere Strecken", "billig" und 
"elektromagnetisch verträglich".

Aber mach nur, viel Spaß.

von Mutluit M. (mutluit)


Lesenswert?

Der RK3399 SoC hat auch PCIe 2.1 (4 full-duplex lanes with 20Gbps).
http://opensource.rock-chips.com/wiki_RK3399

Wäre das nicht die schnellste Verbindung zwischen 2 solcher Boards?
Was bräuchte man um über PCIe ein schnelles Interconnect zwischen 2 
solchen Boards zu realisieren?

von Mutluit M. (mutluit)


Lesenswert?

Stefanus F. schrieb:
> Einfach und schnell wäre eine parallele Übertragung mit Busmaster-DMA
> Controller, falls vorhanden.

Die SoCs RK3328 und RK3399 scheinen DMA zu haben.
http://opensource.rock-chips.com/images/9/97/Rockchip_RK3328TRM_V1.1-Part1-20170321.pdf

Angenommen die Boards takten mit 1.4 GHz, welche 
Geschwindigkeitsgrössenordnungen wären damit erreichbar zwischen 2 
solchen Boards? Und welche Peripherie braucht man um so ein Interconnect 
zu bilden? Reichen nur Kabelverbindungen aus?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.