mmap () vs. Leseblöcke

Ich arbeite an einem Programm, das die Bearbeitung von Dateien, die möglicherweise 100GB oder mehr in der Größe. Die Dateien enthalten Sätze variabler Länge Datensätze. Ich habe eine erste Implementierung und läuft und bin nun auf der Suche zur Verbesserung der performance, besonders, das zu tun-I/O-effizienter, da die input-Datei gescannt, viele Male.

Gibt es eine Faustregel für die Verwendung von mmap() versus Lesen in Blöcken über C++'s fstream Bibliothek? Was ich möchte zu tun ist, Lesen großer Blöcke von der Festplatte in den Puffer -, Prozess-vollständige Datensätze aus dem Puffer, und dann Lesen Sie weiter.

Den mmap() code könnten sich sehr chaotisch, da mmap'd Blöcke müssen direkt auf der Seite angepasst-Grenzen (mein Verständnis), und die Datensätze könnten möglicherweise wie über page-Grenzen hinweg. Mit fstreams, kann ich nur versuchen an den Anfang einer Aufnahme und beginnen zu Lesen, wieder, da sind wir nicht beschränkt auf das Lesen der Blöcke, die sich auf Seite, die Größe Grenzen.

Wie kann ich entscheiden, zwischen diesen beiden Optionen an, ohne das eigentlich schreiben, bis eine vollständige Umsetzung zuerst? Irgendwelche Faustregeln (z.B. mmap() ist 2x schneller) oder einfache tests?

InformationsquelleAutor der Frage jbl | 2008-09-05

Schreibe einen Kommentar