LINUX.ORG.RU

msync() vs fsync()/fdatasync()

 ,


0

1

Пускай у нас есть некий файл, который через mmap() отображается в память. Запись в отображаемую память делается редко и лишь в небольшой части. После каждой записи надо сбрасывать изменения на диск.

Так как у диском у нас является флешь, хотелось бы поменьше операций записи. Если в этом плане разница между msync()/fsync()/fdatasync()? Что лучше использовать?

Разница между fsync и fdatasync, конечно, есть, как и описано в man fsync. В остальном, если сброс делается после каждой записа, разницы нет. Да и откуда ей быть - может, ты не всё нам сказал?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Я просто раньше не задумывался, как ОС узнает, что после записи в память, данная страничка дискового кэша стала «грязной». Может никак. А в msync() мы можем явно указать область, которую модифицировали.

Раньше я о таких вещах не задумывался, а сейчас хочется знать точно.

pathfinder ★★★★
() автор топика
Ответ на: комментарий от pathfinder

А, так настоящий вопрос звучит как «могу ли я менять mmap-ed файл операциями записи в память, а потом сбрасывать его на диск операцией fsync»?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Если tailgunner точно не знает, то наверное уже никто не здесь не знает.

Переделал все на msync(), который просит выравненных к PAGE_SIZE указателей. Пришлось писать код, который переводит не выравненные указатели в выравненные и запоминает, какие страницы стали «грязными». Надеюсь не набыдлокодил. :(

pathfinder ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.