Есть ли способ ускорить частые операции записи файлов?CFile - PullRequest
1 голос
/ 12 октября 2010

Моя задача - записывать небольшие части данных в файл часто и с гарантией. Это система регистрации, которая должна обеспечивать гарантированную безопасность и скорость сохранения данных на диск. Я обнаружил, что тормоза появляются в функции Flush (), которая вызывается слишком часто. Итак, я решил избавиться от этого.

Я использовал флаги, которые запрещают буферизацию и кеширование данных (osNoBuffer и writeThrough). После этого, как я понимаю, я мог выполнять операции ввода-вывода файла (записывать данные в файл) без использования flush ()? Еще один вопрос. Как понять, что данные однозначно записываются на диск без кэширования и буферизации? Это правильный способ сделать то, что я хочу, или может быть другой способ ускорить частые операции записи файлов?

1 Ответ

3 голосов
/ 12 октября 2010

flush() занимает так много времени, именно потому, что устанавливает гарантию, которую вы ищете.Файлы обычно записываются на диск, на котором (вероятно) крутятся ржавые диски.Файлы физически разбросаны по поверхности этих дисков, и для перемещения головки чтения / записи в нужное место требуются миллисекунды.50 сбросов в секунду означает в среднем 20 миллисекунд на сброс, что близко к тому, что может сделать ваш диск механически.

Без сброса ваши записи объединяются, поэтому для нескольких записей потребуется только одно движение головки чтения / записи.Даже без проверки конкретных флагов это обязательно должно означать, что данные временно находятся под угрозой.

Только в программном обеспечении вы можете никогда знать, действительно ли данные записаны на диск.Мы знаем это благодаря исследованиям, проведенным Sun при разработке файловой системы ZFS.Оказывается, что более дешевые и медленные диски связаны с очисткой и возвращаются до того, как данные действительно будут очищены.Для этого вам понадобятся диски серверного уровня.

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

...