Czy madvise (___, ___, MADV_DONTNEED) instruuje system operacyjny, aby leniwie zapisywał na dysk?

Hipotetycznie załóżmy, że chcę wykonać zapis sekwencyjny do potencjalnie bardzo dużego pliku.

Jeśli pomieszam () gigantyczny region i madvise (MADV_SEQUENTIAL) na tym całym regionie, mogę zapisywać do pamięci w stosunkowo wydajny sposób. To mi się udało.

Teraz, aby zwolnić różne zasoby systemu operacyjnego podczas pisania, od czasu do czasu wykonuję munmap () na małych fragmentach pamięci, na które już zapisano. Obawiam się, że munmap () i msync () zablokują mój wątek, czekając, aż dane zostaną fizycznie przekazane na dysk. W ogóle nie mogę zwolnić mojego pisarza, więc muszę znaleźć inny sposób.

Czy lepiej byłoby użyć madvise (MADV_DONTNEED) w małym, już napisanym fragmencie pamięci? Chcę powiedzieć systemowi operacyjnemu, aby zapisał tę pamięć na dysk leniwie i nie blokował mojego wywołującego wątku.

Strona man na madvise () ma to do powiedzenia, co jest raczej niejednoznaczne:

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