PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Performance beim Dateizugriff



Marcomaniac
19-05-2008, 11:20
Hallo Leute!

Ich sitze gerade an einem Projekt bei dem ich die Aufgabe habe, die Performance zu erhöhen. Funktioniert gut bisher.

Teil dieses (C++)-Programms ist ein integrierter Webserver, der je nach Frequentierung auf maximal zirka 100 Dateien (HTML-Dokumente, kleine Grafiken) zugreift, die im Betrieb nicht weiter verändert werden.

Ich frage mich, ob es unter Linux Sinn macht, die Dateien alle in einer internen Hash-Tabelle abzulegen und von dort aus an die Clients weiter zu reichen, anstatt jedes mal die entsprechende Datei zu öffnen und an den Client durchzureichen.

Ich weiß, dass Linux Dateien, auf die oft zugegriffen wird, ohnehin im RAM zwischenspeichert... Ich hab jedoch zu wenig Ahnung von den Linux-Interna, um sagen zu können, ob die selbst gepflegte Hash-Tabelle von Dateien tatsächlich "brauchbaren" Performance-Gewinn bringen könnte!

Vielleicht kann mir jemand was dazu sagen?

1000 Dank!!

Marco

PS: Läuft auf "Standard"-PC-Hardware

jan61
19-05-2008, 21:15
Moin,

schau Dir mal mmap() an, damit mappst Du Dateien in den RAM.

Jan

Marcomaniac
20-05-2008, 13:54
...vielen Dank für den Hinweis!
Hab es nun mal schnell gemessen: Es ist unter Linux (2.6.24) tatsächlich 2-3x so schnell die Dateien mittels mmap in den Speicher zu mappen und dann "von dort aus" an einen Socket zu senden, als die Datei-Inhalte in einer eigenen (schnellen) Hash-Tabelle zu speichern und von dort aus weiterzuverarbeiten!

Yonibear
24-05-2008, 12:27
Wenn du die Dateien unverändert sendest, kannst du übrigens auch den Aufruf sendfile() verwenden. Damit kannst du auch noch etwas Overhead sparen, auch wenn es wahrscheinlich nicht ganz so viel ausmacht wie der Umstieg auf mmap().