O madvise (___, ___, MADV_DONTNEED) instrui o sistema operacional a escrever de forma preguiçosa no disco?

Hipoteticamente, suponha que eu queira executar a gravação seqüencial em um arquivo potencialmente muito grande.

Se eu mmap () uma região gigantesca e madvise (MADV_SEQUENTIAL) em toda a região, então eu posso escrever para a memória de uma maneira relativamente eficiente. Isso eu comecei a trabalhar muito bem.

Agora, para liberar vários recursos do sistema operacional enquanto estou escrevendo, ocasionalmente executo um munmap () em pequenos trechos de memória que já foram gravados. Minha preocupação é que munmap () e msync () bloqueiem meu thread, esperando que os dados sejam fisicamente comprometidos com o disco. Eu não posso retardar meu escritor, então eu preciso encontrar outro caminho.

Seria melhor usar madvise (MADV_DONTNEED) no pequeno pedaço de memória já escrito? Eu quero dizer ao sistema operacional para escrever essa memória para o disco preguiçosamente e não para bloquear o meu segmento de chamada.

A manpage em madvise () tem isto a dizer, o que é bastante ambíguo:

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.

questionAnswers(2)

yourAnswerToTheQuestion