msync(MS_SYNC)
От: valuea  
Дата: 25.04.16 20:39
Оценка:
Господа, есть несколько потоков, которые пишут в memmapped файл. По заверешнию записи, каждый поток скидивает измненения на диск, посредсвом msync(MS_SYNC). И тут у меня возникли сомнения относительно производительности, поэтому хотел бы уточнить варианты реализации механизма блокировок в функции msync.
1. На все время выполнения msync блокируется все адресное пространство полностью (то есть все потоки, которые пытаются выполнить запись данных в отображемый участок памяти блокируются до заверешния msync)
2. На все время выполнения msync блокируются только измененные страницы памяти, подлежащие сбросу на диск.
3. Блокируются только измененные сплошные последовательности страниц памяти, подлежащие сбросу на диск, причем блокируются только на время выполнения сброса на диск данной последовательности страниц
4. Какой-либо еще вариант...
Ну и кроме того, msync "сам себя" блокирует? То есть допустим, вызов msync для 0-ой страницы файла в одном потоке, будет дожидаться завершения выполнения msync в другом потоке с диапазоном 1-N страниц?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.