¿Madvise (___, ___, MADV_DONTNEED) le indica al sistema operativo que escriba perezosamente en el disco?

Hipotéticamente, suponga que quiero realizar una escritura secuencial en un archivo potencialmente muy grande.

Si yo mmap () una región gigantesca y madvise (MADV_SEQUENTIAL) en toda la región, entonces puedo escribir en la memoria de una manera relativamente eficiente. Esto me ha llegado a funcionar bien.

Ahora, para liberar varios recursos del sistema operativo mientras escribo, ocasionalmente realizo un munmap () en pequeños fragmentos de memoria en los que ya se ha escrito. Mi preocupación es que munmap () y msync () bloquearán mi hilo, a la espera de que los datos se comprometan físicamente en el disco. No puedo desacelerar a mi escritor en absoluto, así que necesito encontrar otra manera.

¿Sería mejor usar madvise (MADV_DONTNEED) en el pequeño fragmento de memoria ya escrito? Quiero decirle al sistema operativo que escriba la memoria en el disco perezosamente, y que no bloquee el hilo de llamada.

La página del manual en madvise () tiene esto que decir, que es bastante ambiguo:

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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta