Optimale Buffergröße für send()
-
Tag zusammen,
ich habe mir die Tage einen kleinen Webserver in C++ geschrieben, der soweit wunderprächtig funktioniert. An einer Stelle bin ich mir aber noch nicht ganz so schlüssig, was wohl am sinnvollsten ist.
Es geht um eine bestimmte Buffergröße. Ich wollte vermeiden, dass Dateien, die ein Browser anfordert, vollständig vom Server in den RAM geladen werden. Das könnte bei großen Dateien brutal werden. Daher lese ich direkt aus einem File-Stream und schicke die Daten auch sofort weg.
Meine Frage ist nun: Wie groß sollte man diesen Lese- und auch gleichzeitig Sende-Buffer machen? Bei mir sind's momentan 10 KiB, d.h. die werden in einem Rutsch gelesen und auch verschickt (bzw. in die Systemqueue geschoben). Hatte auch mal 1 KiB, 5, 100 usw. im Einsatz, wobei sich das bei allen in der Geschwindigkeit bemerkbar gemacht hat. Welche Größe ist also ein guter Ansatz? Oder gibt's bestimmte Verfahren, die das irgendwie optimal ausschöpfen?
-
Ausprobieren.
Ansonsten: Hast du schon sendfile() gesehen?
-
Du könntest dir auch überlegen ein paar Megabyte für einen LRU Cache zu reservieren.
D.h. dass du die zuletzt benutzten Dateien komplett im Ram hältst.
Für Dateien die eine gewisse Größe überschreiten dann eben sendfile.
Nur so als Anregung...
-
Ponto:
Das kannte ich bisher nicht. Ich glaube, das ist genau das, was ich suche, super.Sovok:
Darüber hatte ich auch nachgedacht, und es gibt dafür sogar eine Direktive im Config-File, die aussagt, ab wievielen Bytes eine Datei voll geladen werden soll, statt "gestreamed". Nur ist die bisher ungenutzt. Verlockend ist die Idee aber allemal. Mal schauen, ob ich das noch einbaue.Vielen Dank für eure Antworten!