GBit LAN: CPU-limitiert?

W

WLibero

Gast
Hallo,

ich habe 2 PCs, die per Crosskabel miteinander verbunden sind:

PC #1: s. Sig, Netzwerk: 1 GBit/s onboard
PC #2: Athlon 700 MHz, 512 MB RAM, NIC: 1 GBit/s PCI

Die PCI-Karte für PC #2 (D-Link DGE-530T) habe ich mir extra gekauft, weil die vorherige mit 100 MBit/s der Flaschenhals war.

Mein Problem ist jetzt, dass die erwartete Geschwindigkeit von bis zu 100 MB/s bei weitem nicht erreicht wird. Ich komme auf ein Maximum von 28 MB/s. Gemessen wurde die pure LAN-Geschwindigkeit (Nutzdaten TCP/IP). Es musste also keine Datei von der Platte gelesen bzw auf die Platte geschrieben werden. Dieser Flaschenhals ist also ausgeschlossen.

Wie sich herausgestellt hat, ist die CPU von PC #2 die Bremse. Sie ist meist zu 100% nur mit der Datenübetragung beschäftigt. Dass PC #2 bzgl. CPU nicht der schnellste ist, ist mir schon klar! Das macht eigentlich auch nichts, da er (historisch bedingt) nur noch für Backups übers Netz verwendet wird.

Was ich nicht verstehe:
Warum wird die CPU für die reine Datenübertragung dermassen stark gefordert obwohl das doch weitgehend im DMA-Betrieb stattfinden sollte? Dadurch wird die CPU eben doch zum Flaschenhals.


Ich habe mit dem Process Explorer die CPU-Auslastung beobachtet: (ungefähre Werte)

PC #1:
Hardware Interrupts: 2%
DPC (deferred procedure calls): 10%
Testanwendung: 1%​


PC #2:
Hardware Interrupts: 6%
DPC (deferred procedure calls): 42%
System 24%
Testanwendung: 17%​


Dass PC #2 prozentual natürlich mehr ausgelastet ist, ist klar. Dass aber eine so hohe CPU-Last herrscht, überrascht mich doch sehr. Ist das normal? Woran kann das liegen? Der Treiber ist richtig installiert und aktuell. Habe auch schon versucht, an den Einstellungen des Treibers, die im Gerätemanager zur Verfügung stehen, zu drehen. Natürlich ohne Erfolg. Firewall ist übrigens testhalber aus. Habe auch schon per Systemmonitor die Netzwerkadapter überwacht und auf Paketfehler gecheckt. Daran liegt es jedenfalls nicht. BS ist auf beiden XP/SP2.

Über Aufklärung würde ich mich freuen.

Danke!
 
Hallo,

das du mit Gigabit Ethernet 100MByte/s bekommst ist auf jeden fall schonmal unrealistisch... du kannst ja mal messen wie schnell du bei 100MBit/s bist, das wirst du unter normalen Bedingungen nicht x10 erreichen.

So und nun ein bisschen zur Theorie:

Du hast dir ja ein PCI-Karte geholt. Da es sich wohl um einen "normalen" PCI Bus handeln wird, hat er eine Taktrate von 33Mhz und überträgt 32Bit pro Takt. Das sind theoretische 1056 MBit/s (132 MByte/s). Soweit so gut, nur werden in jedem zweiten Takt Adressen übertragen, daher hast du auf dem ganzen PCI-Bus effektiv 528 MBit/s (66MByte/s). Wenn du jetzt noch ein Gerät am PCI-Bus hast (z.B. IDE/SATA Controller) und beide sich die Leitung teilen kommst du auf 33MByte/s womit dein Verlust "nur" noch 5MByte/s entspricht.

Dazu kommt dann natürlich noch das "Schnüren" der Datenpakete etc. Und je nachdem wie "gut" deine Netzwerkkarte ist, wird davon eben ein gewisser Teil auch von der CPU übernommen... Den Unterschied kann man recht gut sehen, wenn man mal vergleicht wie hoch die CPU Last ist, wenn du Daten über eine Onboard NIC schickst und wie hoch sie liegt, wenn du einen Seperate NIC verwendest ...

Hoffe mal, dass dir das ein bisschen klar macht, wo die Gschwindigkeit bleibt.


- booZy
 
Hallo,

erst mal danke für die Antwort!

Dass ich nicht ganz an die 100 MB/s komme, habe ich schon vermutet. Ich rechne halt über den Daumen durch 10, also eigentlich durch 8 (da 8 Bit = 1 Byte) und der Rest geht für Overhead drauf (Ethernet, TCP/IP etc). Aber egal, 28 MB waren sowieso weit davon entfernt, daher hab ichs nicht so genau genommen.

Das mit dem PCI-Bus hatte ich auch schon irgendwie vermutet - wollte es aber anscheinend nicht wahrhaben. :)

Deine Erklärung ist natürlich einleuchtend. Der Hauptgrund ist aber die hohe CPU-Auslastung. Wenn schon der PCI-Bus die Bremse ist, dann müsste ja das Warten auf den Bus die hohe Last erzeugen. Kann ich mir schwer vorstellen, kann aber natürlich sein.

Wenn die CPU-lastige Komprimierung bremst, dann versuche ich, falls möglich, das mal auszustellen und werde mich wieder melden.

Danke nochmal.
 
Also optimierbar war nichts mehr.


Interessant ist aber:
Werden die Daten in die andere Richtung geschickt, komme ich auf 39 MB/s, bei 40% CPU-Auslastung beim Empfänger (PC #1) und 100% CPU-Auslastung beim Sender (PC #2).

Die 40% sind immer noch ne ganze Menge! Wenn man berücksichtigt, dass es ein Dual Core ist und der Treiber höchstwahrscheinlich nicht auf Dual Core optimiert ist, ist das eine 80%ige Auslastung. Wundert mich.
 
Hallo.
Hatte ein ähnliches problem wie du.Hatte auch immer unterschiede von welchem PC ich kopierte.
Bis ich bemerkte das es immer besser ist :
Der PC von dem die Daten kommen , von dem aus sollte man auch den kopiervorgang starten.
Machte bei mir den unterschied con 200MBit aus(300-400MBits zu 600MBits)
Da aber deine HDDs warscheinlich eh zu langsam sind(wie bei mir) ist das eigentlich der Flaschenhals!
Habe die hohen Werte nur durch einsatz von RAM-Drive erreicht.

Mir gehts aber so ähnlich wie Dir , bin auch ein wenig enttäuscht . Allerdings geht es doch ca 3-4 mal schneller zu kopieren wie mit 100MBit.
 
Hi MoZ,

ich habs mit einem Netzwerk-Testprogramm getestet, also ohne HD-Zugriff. Von woher das Kopieren gestartet wird, ist eigentlich egal. Der Sender sendet immer und der Empfänger empfängt immer. Die praktische Notwendigkeit bestimmt, wer Sender und wer Empfänger ist. Ob du von einem Rechner eine Datei "rüberschiebst", oder vom anderen Rechner "rüberziehst", ist für dich als Anwender ein Unterschied aber nicht für die darunterliegenden Dienste (und fürs System)

Mich ärgerts deshalb, weil die Platten im Optimalfall ja schneller könnten. Aber gut, 28 MB/s ist nicht wirklich schlecht und vom durchschnittlien Plattendurchsatz auch nicht so weit entfernt.

Was mich mehr stört ist die hohe CPU-Auslastung des Empfängers. Hier gefragt habe ich v.a. deshalb, weil ich nicht wußte, warum das so ist. Ehrlich gesagt, weiß ich immer noch nicht, warum die CPU da so extrem belastet wird. Muss ja nicht jedes Byte einzeln untersuchen...
 
Ich hab mal gehört das die Festplatte da auch eine große Rolle spielt und das sie angeblich der Flaschenhals bei Gbit Lan sein soll, ist da was drann?
 
klar spielt die hdd ne rolle so wie der pci bus.
ne normale hdd schafft nun ma nur max. 60mb/s und da kann man schonmal nich die vollen 1gbit erreichen.

bei mir is das auch so das mein alter x2 3800+ bei ca. 40% cpu auslastung war beim kopieren und der sempron 2800+ auf 100%. ich komm auch nur auf ca. 38mb/s aber bei 100mbit kommt man eben nur so auf ca. 11mb/s und da ist das schon ne nette steigerung auf 1gbit netzwerk.
 
Ja mei.... wenn nix von der Platte gelesen wird, kann sie nicht der Flaschenhals sein. Noch ein paar mal schreib ichs net. Auch ohne von der Platte zu lesen (oder zu schreiben) komme ich auf max. 28 MB/s weil dann 100% CPU-Auslastung herrscht. Diese 28 MB/s schaffen auch nicht mehr ganz so aktuelle Platten problemlos. Wenn ich auf mehr als 28 MB/s käme, dann wären irgendwann die Platten der bremsende Faktor. Ist ja aber nicht der Fall.

Ich wäre ja froh über 60MB/s reine LAN-Speed aber das schaffe ich gar nicht, weil die CPU zu langsam ist. Meine Kernfrage war und ist, warum die CPU dabei überhaupt so belastet wird. Eine plausible Erklärung (außer die Sache mit der CPU-seitigen Datenkomprimiereung) habe ich bisher aber noch nicht gefunden.
 
na die daten gehen nu auch mal über die cpu und da ja die theoretische bandbreite um das 10fache steigt steigt auch die rechenlast um das 10fache. je nach cpu und wie potent die is is das sicherlich bissl unterschiedlich. aber die daten müssen ja nunmal verarbeitet werden und kommen nich wahllos von der nic auf die hdd.
es könnte durchaus sein das ne bessere nic die cpu entlastet so wie das bei nem hardware raid is (extra controller karte). bei nem software raid übernimmt ja auch die cpu die arbeit um die daten zu organisieren und was auch immer und somit steigt da auch die last und die transferrate ist dementsprechend niedriger als wie bei nem richtigen hardware raid.
 
na die daten gehen nu auch mal über die cpu

Schon mal von DMA-Betrieb gehört? Was meinst du, was die CPU mit den Daten macht? Jedes Bit einzeln ausblasen und anmalen?

und da ja die theoretische bandbreite um das 10fache steigt steigt auch die rechenlast um das 10fache. je nach cpu und wie potent die is is das sicherlich bissl unterschiedlich. aber die daten müssen ja nunmal verarbeitet werden und kommen nich wahllos von der nic auf die hdd.

Sie kommen überhaupt nicht auf die HDD, aber das hab ich erst 17 Mal gesagt.

es könnte durchaus sein das ne bessere nic die cpu entlastet so wie das bei nem hardware raid is (extra controller karte). bei nem software raid übernimmt ja auch die cpu die arbeit um die daten zu organisieren und was auch immer und somit steigt da auch die last und die transferrate ist dementsprechend niedriger als wie bei nem richtigen hardware raid.

Das kann schon sein. Die Frage ist aber weiterhin unbeantwortet. "Irgendwas wird die CPU damit schon machen", ist für mich etwas unkonkret.

Wenn ich 60 MB/s von der Platte lese (das hat jetzt nichts mit LAN zu tun!), habe ich 4% CPU-Auslastung. Wie erklärst du dir das? Ich erkläre es mir mit UDMA-Betrieb, weil die CPU eben nicht die Daten verarbeiten muss, wie es noch beim PIO-Betrieb der Fall war. Ich weiß nicht, warum es beim Datentransfer übers LAN anders ist. Das ist meine Frage.
 
wie sie kommen nich auf die hdd? holst du deine daten aus der luft oder wie oder schreibst sie in die luft?

wenn du genau wissen willst wie der ganze kram funktioniert musste dir wohl oder übel nen ganzen sack fachliteratur besorgen und dich da durchkämpfen.
das wird dir hier keiner so richtig erklären können.

bei gibt netzwerk is nun mal die cpu last höher als bei 100er. das is nich nur bei dir so!
 
wie sie kommen nich auf die hdd? holst du deine daten aus der luft oder wie oder schreibst sie in die luft?

Was meinst du wo alle Daten hinkommen, bevor sie auf die Platte geschrieben werden? Da gibts Sende-/Empfangspuffer im RAM. Wenn die empfangenen Daten nicht auf der Platte gespeichert werden, dann wird die Platte auch nicht belastet. Die verschickten Daten sind halt auch irgendwelche Dummy-Daten, die net von der Platte stammen.

wenn du genau wissen willst wie der ganze kram funktioniert musste dir wohl oder übel nen ganzen sack fachliteratur besorgen und dich da durchkämpfen.
das wird dir hier keiner so richtig erklären können.

Na ja, aber gemeinsam wundern kann man sich schon. :D Mal ehrlich, fragst du dich nicht, warum bei Datenübertragung von/zu Platte kaum CPU-Last da ist aber bei Datenübertragung übers Netz schon? Ich schätze mal, das liegt am Netzwerktreiber. Was auch immer der da macht, aber das wird mir der Hersteller auch net verraten. Die Sache mit der softwareseitigen Komprimierung, die schon mal in diesem Thread genannt wurde, kann ein Grund sein, aber "nix gwies was mer net" (=nichts genaues weiß man nicht) :) Vielleicht werden die Daten aber auch softwaremäßig durch die Schichten (OSI-Modell) herumgeschaufelt, und das dauert dann. Weiß ich net. Denkbar isses. Werde vielleciht mal im Usenet in ner Netzwerk-Spezi-Gruppe fragen.

bei gibt netzwerk is nun mal die cpu last höher als bei 100er. das is nich nur bei dir so!

"gibt"? Wer gibt was? Versteh ich leider net.
 
jackass999 schrieb:
wie sie kommen nich auf die hdd? holst du deine daten aus der luft oder wie oder schreibst sie in die luft?

Hat er schon ein paar mal geschrieben das er die Daten direkt aus dem RAM holt.

Die Auslastung der CPU kann ich dir momentan nur mit der berechnung der Checksumme erklären, aber ich werde nochmal jemanden anderen fragen, weil ich dachte bisher eben immer das die HDD, der PCI BUS etc. das Limitierende sind.


- booZy
 
Der Registry System Wizard sagt, oder behauptet:
>Wenn Sie einen Netzwerkadapter (NIC) besitzen, der über einen eigenen Prozessor verfügt, können Sie diesen durch den folgenden Wert aktivieren. Standardmäßig ist dieser Wert deaktiviert, durch das Aktivieren des Prozessors können Sie die Systemleistung steigern.<

Den Nic-Prozessor aktiviert man (XP) in der Registry unter:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DisableTaskOffload "False"
 
@olympiakos:
Das hat mir schon mal sehr weitergeholfen! Mit dem Begriff konnte ich weiteres ergoogeln und mich jetzt schlau machen. Es geht um die "TOE" (task offload engine). Alles weitere siehe Wiki etc pp. (http://en.wikipedia.org/wiki/TCP_Offload_Engine)
Getestet hab ichs noch nicht. Registry-Eintrag muss allerdings ein DWORD sein (also 0 und nicht False), aber macht ja nix. :) http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/regentry/94176.mspx?mfr=true

@luky37:
Nein, noch nicht unter Linux getestet. Das Benchmarkprogramm ist allerdings selbergeschrieben (nein, daran liegt es nicht! :D ) und wird kaum unter Linux laufen. Müsste ich mir erst eines suchen. Mache ich evtl noch. Danke für den Tipp!
 
Also ich denke das der 700MHZ Prozi einfach der GBIT aufgabe nicht gewachsen ist.
Mein q6600 hat auch eine gewisse Auslastung und mein 4000+ noch mehr.

Wie war deine Netzwerkkarte nochmals angebunden , PCI hat ja nur einen Datendurchsatz von
30MB/Sek uns vielleicht rechnet sich deshalb dein Prozi einen ab.
 
Zuletzt bearbeitet:
Geht das auch bei XP ?

Wenn du es probiert hast kannst uns bitte melden ob es was gebracht hat ?

Danke
 
Zurück
Oben