Forum: PC Hard- und Software Netzwerkkarte mit Puffer


von Carlos (Gast)


Lesenswert?

Gibt es Netzwerkkarten mit einem Empfangspuffer, der vielleicht wie ein 
FiFo funktioniert und mehrere Pakete zwischenspeichern kann?

von Reinhard S. (rezz)


Lesenswert?

Der Sinn davon? Latenz erhöhen? Dürfte vermutlich per Software einfacher 
gehen.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Carlos schrieb:
> Gibt es Netzwerkkarten mit einem Empfangspuffer

Gibt es auch welche ohne?
Da du in PC Hard and Soft fragst gehe ich mal davon aus das du nicht 
irgend so eine µC Spielzeug meinst sondern eher ausgewachsene 
Netzwerkkarten.

Schau dir doch einfach mal die Beschreibungen der Hersteller der Chips 
an. Z.B.:
http://www.intel.com/content/www/us/en/embedded/products/networking/ethernet-x550-datasheet.html
Dort z.B. mal nach "Packet Buffer" und "Queues" suchen

von Timmo H. (masterfx)


Lesenswert?

Das machen viele Intel und Mellanox Ethernet PHYs (z.B. i350). Dabei 
nutzen sie aber keinen internen Speicher sondern via DMA den RAM des PCs 
(DMA Coalescing). Das reduziert die Interrupt-Last (Interrupt 
Moderation) erhöht aber die Latenz.

von Rolf M. (rmagnus)


Lesenswert?

Timmo H. schrieb:
> Das machen viele Intel und Mellanox Ethernet PHYs (z.B. i350).

Na die PHYs eher nicht, sondern die Controller.

von Carlos (Gast)


Lesenswert?

Vielen Dank für Eure Antworten.

Reinhard S. schrieb:
> Der Sinn davon?

Ich will zwischen zwei Computern Daten per UDP austauschen. Dabei soll 
ein PC kontinuierlich im 5kHz-Takt Daten an einen Empfangsrechner 
senden. Es könnte ja vorkommen, dass der Empfangsrechner gerade noch am 
Auslesen eines Datenpakets beschäftigt ist und das neue Paket dann 
verloren gehen würde.

Irgend W. schrieb:
> Gibt es auch welche ohne?

Das weis ich nicht.

Irgend W. schrieb:
> Dort z.B. mal nach "Packet Buffer" und "Queues" suchen

Das werde ich mal machen. Ich wusste nicht, nach welchen Stichworten ich 
schauen muss.

von MiWi (Gast)


Lesenswert?

Carlos schrieb:

>
> Ich will zwischen zwei Computern Daten per UDP austauschen. Dabei soll
> ein PC kontinuierlich im 5kHz-Takt Daten an einen Empfangsrechner
> senden. Es könnte ja vorkommen, dass der Empfangsrechner gerade noch am
> Auslesen eines Datenpakets beschäftigt ist und das neue Paket dann
> verloren gehen würde.
>

Was für Computer sind das?
welchen Umfang haben die Daten?
Welche Rechenlast verursacht die Auswertung?
Muß es UDP sein und wieviel Bandbreite steht der Anwendung am Netzwerk 
zur Verfügung?


Selbst wenn Du Puffer hast - wenn Dein Auswertungssystem nicht in der 
Lage ist diese Datenpackerl binnen 0,2ms zu verarbeiten helfen Dir all 
die Puffer nicht das zeitliche Dilemma zu lösen, denn dann laufen halt 
die Puffer voll, der Stau wird quasi länger....

iaW: Wenn da Probleme sind dann hilft Dir nur mehr Rechenleistung, egal 
ob das durch bessere Software oder schnellere Prozessoren geleistet 
wird.

Viel Erfolg

von oszi40 (Gast)


Lesenswert?

MiWi schrieb:
> Wenn da Probleme sind dann hilft Dir nur mehr Rechenleistung,

Das sollte man noch komplexer sehen. Man sollte den Flaschenhals finden. 
Selbst wenn die Netzwerkkarte pfleilschnell ist, kann auch die Datenbank 
oder das Excel gähnend langsam funktionieren weil z.B. RAM fehlt oder 
andere Prozesse bremsen ...

von (prx) A. K. (prx)


Lesenswert?

Carlos schrieb:
> Gibt es Netzwerkkarten mit einem Empfangspuffer, der vielleicht wie ein
> FiFo funktioniert und mehrere Pakete zwischenspeichern kann?

Das tun sie alle, ob auf dem Adapter oder im RAM. Die Operationen 
zwischen Adapter und Treiber werden durch Programmaktivitäten auf 
Anwendungsebene nicht behindert. Auch der Network-Stack des 
Betriebssystems läuft unabhängig davon.

Carlos schrieb:
> Es könnte ja vorkommen, dass der Empfangsrechner gerade noch am
> Auslesen eines Datenpakets beschäftigt ist und das neue Paket dann
> verloren gehen würde.

Netzwerkadapter und Betriebssysteme arbeiten nicht so primitiv, wie du 
dir das vorstellst. Mach dir diesbezüglich keine Sorgen.

: Bearbeitet durch User
von Carlos (Gast)


Lesenswert?

MiWi schrieb:
> Was für Computer sind das?

Es ist ein etwas älterer PC, der mehrere analoge Messkarten eingebaut 
hat, die leider nicht mehr in einen neuen PC reinpassen. Genaue 
Bezeichnung muss ich an der Arbeit raussuchen, das weis ich grad nicht 
genau, der Rechner ist irgendwie aus den Jahren 2005/2007.

Der Empfangsrechner ist ein "moderner" PC. Der ältere PC arbeitet im 
5kHz-Takt und liest dabei die Werte von den Messkarten aus. Ich möchte 
diese Werte dann an den anderen Rechner weiterleiten über Netzwerk. Die 
anfallende Datenmenge ist 64x 16bit - also 128 8bit-Zeichen im 
UDP-Diagramm.

Die beiden Rechner sollen direkt miteinander verbunden werden und nicht 
über ein großes Netzwerk, wo z.B. auch Computer aus den Büros mit 
dranhängen. Ich habe deshalb in den Empfangscomputer auch eine zweite 
Netzwerkkarte eingebaut. Das Versenden der Daten funktioniert bis jetzt 
problemlos, ich hatte nur Angst, wenn vielleicht der Empfangsrechner mal 
zu langsam sein könnte, dass er dann ein Datenpaket verpasst.

von scoota (Gast)


Lesenswert?

Hallo Carlos,

man kann das doch mal überschlägig ausrechnen:

Du willst mit 5 kHz oder alle 200 ns ein UDP-Paket versenden.

Ein UDP-Paket wird in einem Ethernet-Frame verpackt. Dieser darf brutto 
bis zu 1500 Bytes lang sein, das sind 12000 einzelne Bits.

Bei Fast Ethernet (100 MBit) dauert ein einzelnes Bit 0,01 ns, der 
Brutto-Frame ist also ca. 120 ns lang.

Jedes UDP-Paket wird also während 60% der verfügbaren Übertragungszeit 
das Medium für sich beanspruchen. Das "riecht" bei Ethernet schon sehr 
nach Sättigung und wird wohl höchstens noch funktionieren, wenn Deine 
Applikation die Ethernetverbindung exclusiv nutzt.

Bei Gigabit-Ethernet wären es nur noch 6%. Das klingt schon 
realisierbarer.

von Carlos (Gast)


Lesenswert?

A. K. schrieb:
> Netzwerkadapter und Betriebssysteme arbeiten nicht so primitiv, wie du
> dir das vorstellst. Mach dir diesbezüglich keine Sorgen

Ok, ich könnte das vielleicht einfach mal mit Rampen austesten und das 
System so für mehrere Stunden laufen lassen, ob es dann überhaupt zu 
Aussetzern kommt. Ich hatte halt diesbezüglich Angst.

von Frank K. (fchk)


Lesenswert?

Carlos schrieb:

> Die beiden Rechner sollen direkt miteinander verbunden werden und nicht
> über ein großes Netzwerk, wo z.B. auch Computer aus den Büros mit
> dranhängen. Ich habe deshalb in den Empfangscomputer auch eine zweite
> Netzwerkkarte eingebaut. Das Versenden der Daten funktioniert bis jetzt
> problemlos, ich hatte nur Angst, wenn vielleicht der Empfangsrechner mal
> zu langsam sein könnte, dass er dann ein Datenpaket verpasst.

Tips:
1. Gigabit-Ethernet-Karten auf beiden Seiten reinstecken
2. "Jumbo Frames", d.h. große Pakete aktivieren, die dann bis zu 9k groß 
sein können (normal sind 1500 Bytes)
3. In Deiner Software die Daten so weit sammeln, dass Du möglichst große 
und dafür möglichst wenig Pakete sendest. Deswegen auch die Jumbo 
Frames.

Wenn Du einen Switch verwendest, muss der natürlich auch Jumbo Frames 
können.  Ansonsten einfach direkt ein Netzwerkkabel verwenden und beide 
Karten fest auf 1G einstellen (nicht auto).

Damit holst DU das Maximum aus der Übertragungsstrecke raus.

fchk

von Carlos (Gast)


Lesenswert?

scoota schrieb:
> Du willst mit 5 kHz oder alle 200 ns

so schnell bin ich dann auch nicht :-) - ich glaub, es sind 200.000 ns

scoota schrieb:
> Dieser darf brutto
> bis zu 1500 Bytes

stimmt, und ich nutze davon ja grad mal 128 dann. Ich habe sogar 
Gigabit-Netzwerkkarten verbaut.

von Reinhard S. (rezz)


Lesenswert?

scoota schrieb:
> Jedes UDP-Paket wird also während 60% der verfügbaren Übertragungszeit
> das Medium für sich beanspruchen. Das "riecht" bei Ethernet schon sehr
> nach Sättigung und wird wohl höchstens noch funktionieren, wenn Deine
> Applikation die Ethernetverbindung exclusiv nutzt.

Ehrlich? Ich hätte mit Sättigungs-Symptomen frühstens ab 80% gerechnet.

von Carlos (Gast)


Lesenswert?

Frank K. schrieb:
> 3. In Deiner Software die Daten so weit sammeln, dass Du möglichst große
> und dafür möglichst wenig Pakete sendest. Deswegen auch die Jumbo
> Frames.

cool. Ich könnte ja auch z.B. über mehrere Zyklen Daten dann sammeln und 
z.B. nur bei jedem 10. Taktzyklus dann ein Datenpaket an den Zielrechner 
schicken, um den Traffik zu verringern.

von (prx) A. K. (prx)


Lesenswert?

Wenn man Probleme kriegen will, die man andernfalls nicht hätte, nimmt 
man Jumbo Frames.

von scoota (Gast)


Lesenswert?

Carlos schrieb:

>so schnell bin ich dann auch nicht :-) - ich glaub, es sind 200.000 ns

Oops. Gleich um 3 Zehnerpotenzen daneben. Hatte hier nur einen einfachen 
Taschenrechner und bin noch nicht lange wach...

Aber somit extrem günstig für Dein Problem :-)

Beitrag #6091402 wurde vom Autor gelöscht.
von (prx) A. K. (prx)


Lesenswert?

Je mehr Daten man in einen Frame packt, desto mehr Daten sind weg, wenn 
er nicht intakt ankommt. Das ist bei sauberer Physik zwar 
unwahrscheinlich, aber rechnen sollte man damit schon.

: Bearbeitet durch User
von Johannes S. (Gast)


Lesenswert?

Die Jumbos sind seit vielen Jahren Standard und laufen in zigtausenden 
Applikationen 24*7 mit Datenraten am Ethernet Limit, Stichwort GigE 
Vision. Man muss eben passende Komponenten wählen die auch die Jumbos 
weiterleiten können oder Punkt zu Punkt verbinden.

von Rolf M. (rmagnus)


Lesenswert?

Gibt es denn bei dir konkret ein Problem mit dem Packetloss? Ich sehe da 
eher weniger ein Problem. Dass generell auch mal Pakete ausfallen 
können, ist unabhängig von der Last natürlich immer zu beachten. UDP 
erkennt sowas nicht und macht keine Retransmits. Wenn also auf jeden 
Fall alle Daten sicher ankommen müssen, muss man sich da entweder selbst 
was stricken oder auf TCP umsteigen, das sich automatisch darum kümmert. 
Das kümmert sich auch automatisch darum, die Daten in Pakete zu 
zerteilen und wieder zusammenzusetzen.

: Bearbeitet durch User
von Hopperla (Gast)


Lesenswert?

Rolf M. schrieb:
> Das kümmert sich auch automatisch darum, die Daten in Pakete zu
> zerteilen und wieder zusammenzusetzen.

... und da beginnt so richtig die Arbeit für den Empfänger. Der
weiss nämlich erst mal nicht wann ein Paket vollständig ist.

Ich habe gehört dass TCP ein Stream ist, ohne Ende, das muss
sich der "Benutzer" antun.

von (prx) A. K. (prx)


Lesenswert?

Johannes S. schrieb:
> ... oder Punkt zu Punkt verbinden.

Eben.

Es gab eine Zeit, in der Jumbos ein Thema waren. Und es mag sorgfältig 
abgekoppelte Netze geben, in den das auch heute noch sinnvoll ist. Wenn 
man allerdings heute normale Netze baut, dann lohnt das i.d.R. nicht.

Es gab zwei Motive dafür: Die paar Prozent mehr, die man aus dem Netz 
holt und die Rechnerlast. Letzteres wird in den dafür üblichen 
Anwendungen bereits vom Adapter besser erledigt, als Jumbo Frames das je 
könnten. Ethernets kommunizieren seit langem gerne mit 64kB Frames 
zwischen Treiber und Adapter, in beiden Richtungen.

Aber da die Durchsatzfrage sich in Luft aufgelöst hat, ist das hier kein 
Thema.

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

Hopperla schrieb:
> Rolf M. schrieb:
>> Das kümmert sich auch automatisch darum, die Daten in Pakete zu
>> zerteilen und wieder zusammenzusetzen.
>
> ... und da beginnt so richtig die Arbeit für den Empfänger. Der
> weiss nämlich erst mal nicht wann ein Paket vollständig ist.

Ähm, wenn jedes Paket gleich groß ist, würde ich nicht von "so richtig 
Arbeit" sprechen. Du nimmst dann einfach Häppchen von so vielen Bytes 
und verarbeitest die.

> Ich habe gehört dass TCP ein Stream ist, ohne Ende, das muss
> sich der "Benutzer" antun.

Bei UDP muss er sich antun, zu erkennen, ob jedes Paket auch angekommen 
ist, ob sie in der richtigen Reihenfolge angekommen sind u.s.w. Dazu 
muss er sich erstmal Paketheader ausdenken, die der Sender befüllen muss 
und anhand derer der Empfänger erkennt, ob es passt. Dann muss dieser 
eine entsprechende Antwort-Nachricht erzeugen, mit der er dem Sender 
zurückmeldet, ob alles angekommen ist oder was fehlt, damit dieser ggf. 
die Daten nochmal senden kann. Und das möglichst so, dass der Sender 
nicht immer sofort aufhören und warten muss, bis die Antwort vom 
Empfänger kommt.
Das ist 100 mal so viel Arbeit wie das Aufteilen der Datenblöcke bei 
Verwendung von TCP.

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.