Jump to content

синхронизация (Unix)

(Перенаправлено с Fsync )

sync — это стандартный системный вызов операционной системы Unix , который фиксирует все данные из ядра файловой системы буферов в энергонезависимое хранилище, т. е. данные, запись которых запланирована с помощью системных вызовов ввода-вывода низкого уровня . Уровни ввода-вывода более высокого уровня, такие как stdio, могут поддерживать отдельные буферы.

Как функция в C , sync() вызов обычно объявляется как void sync(void) в <unistd.h>. Системный вызов также доступен через утилиту командной строки , также называемую sync , и функции с аналогичным названием на других языках, таких как Perl и Node.js (в модуле fs).

Соответствующий системный вызов fsync() фиксирует только буферизованные данные, относящиеся к указанному файловому дескриптору . [ 1 ] fdatasync() также доступен для записи только изменений, внесенных в данные в файле, а не обязательно связанных с файлом метаданных. [ 2 ]

В некоторых системах Unix используется своего рода очистки или обновления демон вызывает функцию синхронизации , который регулярно . В некоторых системах это делает демон cron , а в Linux за это отвечает демон pdflush , который был заменен новой реализацией и окончательно удален из ядра Linux в 2012 году. [ 3 ] Буферы также очищаются, когда файловые системы размонтируются или перемонтируются только для чтения . [ 4 ] например, перед выключением системы.

Некоторые приложения, такие как LibreOffice , также вызывают функцию синхронизации для сохранения информации для восстановления через определенный интервал.

Использование базы данных

[ редактировать ]

Чтобы обеспечить надлежащую надежность , базы данных должны использовать ту или иную форму синхронизации, чтобы гарантировать, что записанная информация попадет в энергонезависимое хранилище, а не просто сохранится в кэше записи в памяти, который будет потерян в случае сбоя питания. . Например, PostgreSQL может использовать множество различных вызовов синхронизации, в том числе fsync() и fdatasync(), [ 5 ] для того, чтобы коммиты были долговечными. [ 6 ] К сожалению, для любого отдельного клиента, записывающего серию записей, вращающийся жесткий диск может выполнить фиксацию только один раз за оборот, что составляет в лучшем случае несколько сотен таких фиксаций в секунду. [ 7 ] Таким образом, отключение требования fsync может значительно повысить производительность фиксации, но за счет потенциального повреждения базы данных после сбоя.

Базы данных также используют файлы журналов транзакций (обычно намного меньше, чем основные файлы данных), которые содержат информацию о недавних изменениях, так что изменения можно надежно повторить в случае сбоя; тогда основные файлы данных можно будет синхронизировать реже.

Отчеты об ошибках и проверка

[ редактировать ]

Чтобы избежать потери данных, возвращаемые значения fsync() следует проверить, поскольку при выполнении операций ввода-вывода, буферизуемых библиотекой или ядром, ошибки могут не сообщаться во время использования write() системный вызов или fflush() вызов, так как данные могут не записываться в энергонезависимое хранилище, а записываться только в страничный кэш памяти . Вместо этого об ошибках записи часто сообщается во время системных вызовов fsync(), msync() или close(). [ 8 ] До 2018 года Linux fsync() поведение при определенных обстоятельствах не сообщало о статусе ошибки, [ 9 ] [ 10 ] изменить поведение было предложено 23 апреля 2018 года. [ 11 ]

Споры о производительности

[ редактировать ]

Жесткие диски могут по умолчанию использовать собственный энергозависимый кэш записи для буферизации записи, что значительно повышает производительность, но при этом увеличивает вероятность потери записи. [ 12 ] Такие инструменты, как hdparm -F, дадут указание контроллеру жесткого диска очистить буфер кэша записи на диске. Влияние отключения кэширования на производительность настолько велико, что даже обычно консервативное сообщество FreeBSD отказалось от отключения кэширования записи по умолчанию во FreeBSD 4.3. [ 13 ]

В SCSI и SATA с собственной очередью команд (но не в обычном ATA, даже с TCQ) хост может указать, хочет ли он получать уведомление о завершении, когда данные попадают на пластины диска или когда они попадают в буфер диска (встроенный). кэш). При условии правильной аппаратной реализации эта функция позволяет использовать встроенный кэш диска, гарантируя при этом правильную семантику для системных вызовов, таких как fsync. [ 14 ] Эта аппаратная функция называется Force Unit Access (FUA) и обеспечивает согласованность с меньшими издержками, чем очистка всего кэша, как это делается для дисков ATA (или SATA без NCQ). [ 15 ] Хотя Linux включил NCQ примерно в 2007 году, SATA/NCQ FUA был включен только в 2012 году, ссылаясь на отсутствие поддержки в ранних дисках. [ 16 ] [ 17 ]

Firefox 3.0, выпущенный в 2008 году, представил fsync системные вызовы, которые, как было обнаружено, снижают его производительность; вызов был введен для того, чтобы гарантировать целостность встроенной базы данных SQLite . [ 18 ] Linux Foundation Технический директор Теодор Цо утверждает, что не нужно «бояться fsync», и что настоящей причиной замедления работы Firefox 3 является чрезмерное использование fsync. [ 19 ] Однако он также признает (цитируя Майка Шейвера ), что

В некоторых довольно распространенных конфигурациях Linux, особенно при использовании файловой системы ext3 в режиме «data=ordered», вызов fsync не просто сбрасывает данные для файла, к которому он вызывается, но, скорее, для всех буферизованных данных для этой файловой системы. [ 20 ]

См. также

[ редактировать ]
  1. ^ спецификация fsync
  2. ^ спецификация fdatasync
  3. ^ «RIP Pdflush [LWN.net]» .
  4. ^ «mount — синхронизируется ли вызовы umount для завершения любых ожидающих операций записи» . Обмен стеками Unix и Linux . Проверено 2 мая 2021 г.
  5. ^ Вондра, Томас (2 февраля 2019 г.). «PostgreSQL против fsync» . Осуосл орг . Архивировано из оригинала (mp4) 10 февраля 2019 года . Проверено 10 февраля 2019 г.
  6. ^ Надежность PostgreSQL и журнал упреждающей записи
  7. ^ Настройка синхронизации PostgreSQL WAL. Архивировано 25 ноября 2009 г. на Wayback Machine.
  8. ^ «Обеспечение доставки данных на диск [LWN.net]» .
  9. ^ «Сюрприз PostgreSQL fsync() [LWN.net]» .
  10. ^ «Улучшенная обработка ошибок на уровне блоков [LWN.net]» .
  11. ^ «Всегда сообщать об ошибке обратной записи один раз — Patchwork» . Архивировано из оригинала 4 мая 2018 г. Проверено 3 мая 2018 г.
  12. ^ Кэш записи включен?
  13. ^ Справочник FreeBSD — Настройка дисков
  14. ^ Маршалл Кирк МакКьюсик . «Диски с точки зрения файловой системы — очередь ACM» . Queue.acm.org . Проверено 11 января 2014 г.
  15. ^ Грегори Смит (2010). PostgreSQL 9.0: высокая производительность . Packt Publishing Ltd. с. 78. ИСБН  978-1-84951-031-8 .
  16. ^ «Включение FUA для дисков SATA (было Re: [RFC][PATCH] libata: включить обнаружение fua дисков SATA по умолчанию) (Linux SCSI)» .
  17. ^ «Архив Linux-Kernel: [ИСПРАВЛЕНИЕ RFC] libata: обновления FUA» .
  18. ^ «Шейвер» fsyncers и Curveballs . Архивировано из оригинала 9 декабря 2012 г. Проверено 15 октября 2009 г.
  19. ^ «Не бойтесь fsync!» .
  20. ^ «Отложенное размещение и проблема файлов нулевой длины» .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 906528880d0250f1954a95f1c4bffe1f__1721903400
URL1:https://arc.ask3.ru/arc/aa/90/1f/906528880d0250f1954a95f1c4bffe1f.html
Заголовок, (Title) документа по адресу, URL1:
sync (Unix) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)