Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 13. Nov 2018 21:10

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: memcpy <-> write
BeitragVerfasst: 15. Apr 2008 0:42 
Hallo,

ich muss viele kleinere Stücke (jedes Teil ist ca. 8 bis 20 Byte groß) per "write" auf ein Socket schreiben.

Dabei stellt sich mir die Frage, ab wann es sich lohnt "viele kleine Teile" mit memcpy zu einem großen Stück in einen Buffer zu kopieren um es im Anschluß mit einem einzelnen "write" wegzuschreiben, oder ob es an sich keine Rolle spielt und man auch bedenkenlos sehr viele einzelne "write" Aufrufe mit kleinen Stückchen haben kann?

Wie teuer ist "memcpy" im Verhaeltnis zu einem "write" ?

Und: Steigt die Laufzeit/Kosten von memcpy und write linear mit der Datenmenge, die kopiert bzw. geschrieben wird? Oder verhalten sich die Funktionen evtl. sogar Konstant? O(1) ? O(n) ? O(n^2) ?

Ich hab per google dazu leider wenig hilfreiches gefunden.

Hat jemand Erfahrungen mit dem Thema?

Vielen Dank


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 15. Apr 2008 10:52 
Offline
Benutzeravatar

Registriert: 11. Feb 2006 19:10
Beiträge: 3569
Erste Fragen: Welches Protokoll? TCP, UDP oder was anderes? Wie groß ist die kleinste MTU auf dem Weg zum Ziel? Wenn du dir Gedanken über Performance machst, musst du unbedingt verhindern, dass deine Pakete wieder fragmentiert werden, weil sie größer als die kleinste MTU auf dem Pfad sind. Das ist ein viel engerer Flaschenhals als lokal *einmal* memcpy zu machen.

Janka

_________________
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 16. Apr 2008 10:50 
Offline
Pro-Linux
Benutzeravatar

Registriert: 15. Aug 1999 16:59
Beiträge: 3236
Wohnort: Bruchsal
Hi!

memcpy ist ein Vielfaches schneller als write, denn es wird in ein paar Maschinenbefehlen erledigt, während write ein Systemaufruf mit einem Overhead von hunderten von Befehlen ist.

Beispielsweise erfordert es 5 32-Bit-Befehle, um 20 Bytes zu kopieren, mit SSE-Erweiterungen sogar noch weniger.

Aber auch das memcpy kann man sich sparen, wenn man writev verwendet. Man muss aber den Overhead, die entsprechende Datenstrukur mit Daten zu füllen, berücksichtigen.

Grüße,
hjb

_________________
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de