Чтобы свести к минимуму доступ к диску с помощью fsync

Существует ситуация, когда всякий раз, когда происходит запись, с этой записью используется fsync. Тогда как минимизировать доступ к диску? Как ядро ​​это делает?

fsync() передает («сбрасывает») все измененные внутренние данные (т. е. измененные страницы буферного кэша) файла, на который ссылается файловый дескриптор fd, на дисковое устройство (или другое постоянное запоминающее устройство).

Я думаю, что Кернел может переносить данные всех модифицированных буферов на жесткий диск периодически через какое-то время. Так что он может минимизировать доступ к диску.

Пожалуйста, дайте несколько предложений/подсказок.


person Luv    schedule 24.05.2012    source источник


Ответы (1)


В общем, постарайтесь не переусердствовать. Не вызывайте fsync, просто позвольте ядру решить, когда делать физическую запись.

Вот параметры ядра для ext4, которые вы можете использовать для настройки поведения ядра в соответствии с вашими потребностями, но это скорее упражнение по настройке сервера, чем то, что вы можете реализовать из своего приложения: http://kernel.org/doc/Documentation/filesystems/ext4.txt

Это может быть интересно: " max_batch_time=usec Максимальное количество времени, в течение которого ext4 должна ожидать, пока дополнительные операции файловой системы будут объединены в пакет вместе с операцией синхронной записи."

person Julian    schedule 24.05.2012