Синхронизирует ли msync все файлы в файловой системе с диском, как fsync в ext3?

насколько я знаю, в большинстве систем ext3 с режимом журнала "data=ordered" fsync не только синхронизирует файл, указанный в fd, но и синхронизирует все файлы в файловой системе, и эта проблема не была исправлена ​​до ядра 2.6. .30

И у меня возник вопрос, то есть делает ли msync то же самое, что и fsync?

Спасибо.


person SSolid    schedule 10.10.2011    source источник
comment
Не могли бы вы предоставить ссылку на источник, который описывает это поведение? Это не мое понимание.   -  person MarkR    schedule 10.10.2011
comment
до MarkR вы можете погуглить linux ext3 firefox 3 и вы можете найти много статей об этом   -  person SSolid    schedule 11.10.2011


Ответы (2)


Это не баг, это фича. Ext3 — это журналируемая файловая система. data=ordered означает, что вы запрашиваете, чтобы изменения в файловой системе записывались в порядке их внесения.

Итак, когда вы просите синхронизировать изменения в конкретном файле, вы должны зафиксировать все предыдущие изменения, будь то в этом файле или в других, или вы нарушаете директиву по поддержанию данных в порядке. По этой причине я подозреваю, что msync будет вести себя так же, хотя я не проверял.

На самом деле, можно утверждать, что если это не так, то это ошибка файловой системы...

person gby    schedule 10.10.2011
comment
привет gby, спасибо за ваше объяснение, я думаю, что просто неправильно понимаю поведение ext3 - person SSolid; 11.10.2011

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

Более того, проблема, описанная с data=ordered, похоже, заключается в том, что он ожидает других ожидающих запросов ввода-вывода к тому же устройству, хотя логически он должен иметь более высокий приоритет. Не для того, чтобы все грязные данные сбрасывались (например, sync()).

Я хотел бы провести эксперимент, чтобы выяснить это.

person MarkR    schedule 11.10.2011
comment
привет MarkR Я прочитал еще одну статью, и кажется, что с data=ordered на ext3 fsync будет синхронизировать грязную страницу указанного файла и все журналы журналов в этой файловой системе =-=-=-=-=-=-=- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--= kerneltrap.org/node/14148 Весь смысл fsync() в том, что он должен синхронизировать только этот файл и избегать синхронизации всего остального, что происходит, а ext3 нарушает это, потому что в конечном итоге ему приходится синхронизировать весь журнал или что-то в этом роде. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-=-=--= - person SSolid; 12.10.2011
comment
Я все еще уверен, что он не синхронизирует все грязные блоки на fs. Возможно, он синхронизирует все метаданные, что может быть плохо, если вы включили atime и недавно прочитали много файлов. - person MarkR; 13.10.2011