Entwickler-Ecke

Internet / Netzwerk - Indy TCP Geschwindigkeit


DoktorHonig - Mo 16.01.06 22:25
Titel: Indy TCP Geschwindigkeit
Hallöchen!

Ich hab da ein kleines Problem mit den Indy-Komponenten.
Ich wollt nämlich mal nen Benchmark schreiben, der einfach nur Zufallsdaten überträgt. Diese "kopier mal was übers Netz" Lösungen sind ja nix, da die Festplatte bremsen könnte.
Jetzt hab ich mal die Indy-Komponenten hergenommen, und schick mal wild drauf los. Der Server macht im Prinzip das hier:


Delphi-Quelltext
1:
2:
3:
while AContext.Connection.Connected do begin
  AContext.Binding.Send(Data,0,BlockSize);
end;


Der Client das hier:

Delphi-Quelltext
1:
2:
3:
4:
for i:=0 to BlockCount-1 do begin
  ClieSock.Socket.ReadBytes(Data,BlockSize,false);
  traffic:=traffic+BlockSize;
end;


Bin nicht happig auf den Quellcode, aber ganze programme reinpasten verwirrt nur.
Naja, funktioniert auch so weit, der Client holt einen Haufen Daten, und trennt die Verbindung danach wieder.
Jetzt hab ich mal mitgemessen, für 128 MB braucht das Ding ca. 15 Sekunden, kommt also ca. auf 65 MBit. Nuja, das wär ja nicht so schlecht, für ne 7 Euro Netzwerkkarte (habs nur mit meinem Rechner als Server UND Client getestet), aber das Loopback Device liefert genau die gleichen Werte. Und das wundert mich jetzt schon.. ich hätt da folgende Vorschläge:

1) Mein Programm ist so lahm. Glaub ich gern, weil ichs grad erst geschrieben hab, und noch nichts getunt hab. Aber so viel Code ist in der Schleife ja nicht drin.
2) Indy ist so "lahm". Wär blöd, möcht das jetzt nicht noch mit Winsock nachprogrammiern.
3) Windows passt bei 100 MBit NICs die Geschwindigkeit vom Loopback Device an. Wüsst zwar keinen Grund dafür, aber naja, möglich wärs.

Ich bin ja für Punkt 1, weil die CPU auslastung 100% ist, der Client hat ca. zwei Drittel, der Server ein Drittel. Die Frage ist jetzt, ob ich so mies programmiere, oder ob meine Hardware schlicht nicht zu mehr als 70 MBit fähig ist.

CPU: Celeron Tualatin 1300 MHz, i815 Mainboard, 384 MB Ram.

Hm, ich versuchs jetzt mal zwischen 2 Rechnern zu testen. Da teilt sich wenigstens die CPU-Last auf. Würd mich aber trotzdem über Antworten freuen.

EDIT: (P4)Celeron 2400 mit Onboardchipsatz schafft über die NIC 55MBit, übers Loopback 75 MBit. (Der is aber auch nicht wesentlich schneller als der fetzige Tualatin)


Narses - Mo 16.01.06 23:07

Moin!

Verabschiede dich von dem Gedanken, dass dir die Ethernetbandbreite netto zur Verfügung steht. Allein die Framepräambel... :|

Mit 75mbit netto im loopback kannste mal unter Win ziemlich laut "juhu" schreien, würde ich sagen. :mrgreen:

cu
Narses


DoktorHonig - Mo 16.01.06 23:21

Naja, hab ich ja geschrieben, dass das für die billig-NIC ganz ok ist, auch für den Onboardchip.
Aber es gibt ja schließlich Gigabit-NICs. Und wie sollte mein Prog mit denen dann >100MBit schaffen, wenns schon mit Loopback nicht geht? Auch wenn nur 120MBit rausschaun, wrd ich schon wissen, dass die NIC limitiert.
Der Loopback-Wert stört mich wesentlich mehr als der Wert der Netzwerkkarte.


Narses - Mo 16.01.06 23:43

Moin!

Dann mach dich doch mal schlau, ob sich die NICs im loopback-mode tatsächlich selbst unterhalten oder das vom Protokollstack gefangen wird. Sieht IMHO so aus, als würden die sich selbst was senden. Wenn der Protokollstack fangen würde, solltest du tatsächlich mehr als 100mbit lokal messen können. Fazit: mit einer gbit-NIC sollte der Wert im loopback-mode dann auch höher liegen (aber auch hier: verabschiede dich von den netto-Werten!).

Aber, mal nebenbei gesagt, wenn du nicht gerade Laborbedingungen vorliegen hast (und die hast du in der Praxis quasi nie!), dann kannste dein Programm, die Indies, den lieben Gott, etc. optimieren, bis zu schwarz wirst, ein schlechtes oder "volles" Kabel bzw. blöden Switch oder eine WAN-Strecke dazwischen kannst du eh nicht wegoptimieren. Fazit: mach dir da mal nicht soo viele Gedanken drüber und schreib einfach dein Prog. :wink:

cu
Narses


DoktorHonig - Di 17.01.06 00:06

Jo, danke schon mal...

Es sollt halt ein Benchmark sein. Und zwar einer, der die Netzwerkverbindung zu nem andern Rechner testet, und nicht die CPU.

Die Netto Bandbreite wollt ich eh nicht erreichen, wenn Loopback 150 MBit geschafft hätte, wär ich ja schon zufrieden gewesen.

Könnts auch sein, dass Loopback generell langsamer ist, da alles in Software ist? Ne Gigabit-NIC macht ja viel in Hardware. Vielleicht ist Loopback einfach von MS-Seite her so unoptimiert, einfach weil das keiner so wirklich, außer zum Testen, braucht.

Ich werd mal schaun, dass ich jemanden finde, der das mit Gigabit testet.