mmap zum Schreiben einer sequentiellen Protokolldatei für die Geschwindigkeit?

Ich möchte eine Protokolldatei im unstrukturierten Format (zeilenweise) mit @ schreibemmap (für Geschwindigkeit). Was ist das beste Verfahren? Öffne ich eine leere Datei,truncate bis 1 Seitengröße (leere Zeichenfolge schreiben, um die Größe der Datei zu ändern?), dannmmap - und wiederholen, wenn die mmap-Fläche voll ist?

Ich benutze normalerweisemmap zum Schreiben von Strukturen mit fester Größe, normalerweise nur eine Seite auf einmal. Dies ist jedoch für das Schreiben von Protokolldateien (zwischen 0,5 und 10 GB) mit mmap gedacht. Sie sind sich jedoch nicht sicher, was die beste Vorgehensweise ist, wenn der erste mmap-Bereich gefüllt ist. -munmap, Größe der Datei änderntruncate undmmap Nächste Seite

Während ich Protokolle in den Speicherbereich schreibe, würde ich die Größe verfolgen undmsync, wie gehe ich vor, wenn ich am Ende des zugeordneten Speicherbereichs angelangt bin?

Nehmen wir an, ich muss nie zurückgehen oder vorhandene Daten überschreiben, also schreibe ich nur neue Daten in die Datei.

Q1: Wenn ich am Ende des kartierten Bereichs angekommen bin, muss ichmunmap, ftruncate -Datei zum Ändern der Größe um eine andere Seitengröße undmmap die nächste Seite?

F2: Gibt es eine Standardmethode zum Vorausschreiben und Bereithalten der nächsten Seite im Speicher für das nächste Schreiben? Tun Sie dies auf einem anderen Thread, wenn wir uns dem Ende des zugeordneten Bereichs nähern?

Q3: Muss ichmadvise für sequentiellen Zugriff?

Dies ist für die Echtzeit-Datenverarbeitung mit der Anforderung, eine Protokolldatei zu führen - derzeit schreibe ich nur in eine Datei. Protokolldatei ist unstrukturiert, Textformat, zeilenbasiert.

Dies ist für Linux / C ++ / C, das optional auf einem Mac getestet wird (also keine Neuzuordnung [?]).

Alle Links / Verweise auf Best Practices sind willkommen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage