next up previous
Next: Таймеры Up: Linux & POSIX.1b Previous: Захват памяти

Синхронный ввод - вывод

Базы данных, системы e-mail, log-демоны, и т.д. требуют подтверждения, что записываемая часть данных фактически достигла жесткого диска, потому что протоколы транзакций требуют, чтобы крах системы или отказ по питанию после команды записи не могли как-нибудь испортить данные. POSIX.1b определяет fsync() и O_SYNC механизмы, которые Linux 1.2 уже имеет.

В дополнение, имеется очень полезная новая функция fdatasync(), которая требует, чтобы блок данных сбрасывался на диск, однако который не требует, чтобы inode с самым последним доступом/ временем модификации - также фиксировался каждый раз. С помощью fdatasync() inode имеет единственную возможность, чтобы записаться, в случае, когда длина файла, владелец файла, или биты разрешения изменились.

В приложениях баз данных, в основном с постоянными размерами файла, где вы обычно вызываете fsync() после каждой записи нескольких блоков, но где вы не заботитесь относительно времени доступа к inod-ам на диске c всегда 100% up-to-date, fdatasync() мог бы легко удвоить(!) быстродействие вашей системы.

Имеется также функция msync() для фиксации границ страниц для карты памяти о файлах на диске.

Состояние выполнения: fsync(), fdatasync(), msync(), и O_SYNC уже доступны. O_DSYNC еще не был осуществлен. К сожалению, fdatasync() начиая с Linux 1.3.55 - и по настоящее время только псевдоним для fsync() и, поэтому еще ни в коей мере не эффективней чем fsync().



Vladimir Chernenkov
Fri Jun 13 10:57:19 MSD 1997