Weist madvise (___, ___, MADV_DONTNEED) das Betriebssystem an, träge auf die Festplatte zu schreiben?

Angenommen, ich möchte sequentiell in eine möglicherweise sehr große Datei schreiben.

Wenn ich eine gigantische Region abbilde () und diese gesamte Region abbilde (MADV_SEQUENTIAL), kann ich relativ effizient in den Speicher schreiben. Das habe ich gut gemacht.

Um nun beim Schreiben verschiedene Betriebssystemressourcen freizugeben, führe ich gelegentlich eine munmap () für kleine Speicherbereiche aus, in die bereits geschrieben wurde. Ich mache mir Sorgen, dass munmap () und msync () meinen Thread blockieren und darauf warten, dass die Daten physisch auf die Festplatte übertragen werden. Ich kann meinen Schreiber überhaupt nicht bremsen, also muss ich einen anderen Weg finden.

Wäre es besser, madvise (MADV_DONTNEED) für den kleinen, bereits geschriebenen Speicherbereich zu verwenden? Ich möchte das Betriebssystem anweisen, diesen Speicher träge auf die Festplatte zu schreiben und meinen aufrufenden Thread nicht zu blockieren.

Die Manpage auf madvise () hat dies zu sagen, was ziemlich vieldeutig ist:

MADV_DONTNEED
Do  not expect access in the near future.  (For the time being, the 
application is finished with the given range, so the kernel can free
resources associated with it.)  Subsequent accesses of pages in this
range will succeed, but will result either in re-loading  of the memory
contents from the underlying mapped file (see mmap(2)) or
zero-fill-on-demand pages for mappings without an underlying file.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage