ZFS, sync=standard, используется SLOG, но почему я вижу запись на основные диски пула каждую секунду?

Вопрос или проблема

У меня txg timeout 300s и 3G dirty buffer. Если я использую sync=disabled, все работает как ожидалось. У меня есть slog, показанный ниже. Если я использую sync=standard, это не работает как ожидалось: Нагрузка на SLOG минимальна, В то время как записи идут прямо на SMR-диски каждую секунду или чаще.

root@linux:~# zpool status hddpool
  pool: hddpool
 state: ONLINE
  scan: scrub repaired 0B in 00:03:16 with 0 errors on Fri Jan 24 04:12:17 2025
config:

    NAME                                                STATE     READ WRITE CKSUM
    hddpool                                             ONLINE       0     0     0
      draid1:3d:4c:0s-0                                 ONLINE       0     0     0
        usb-Seagate_Expansion_HDD_00000000NT17FBP5-0:0  ONLINE       0     0     0
        usb-Seagate_Expansion_HDD_00000000NT17FBQC-0:0  ONLINE       0     0     0
        usb-Seagate_Expansion_HDD_00000000NT17FC6F-0:0  ONLINE       0     0     0
        usb-Seagate_Expansion_HDD_00000000NT17FC7Z-0:0  ONLINE       0     0     0
    special
      wwn-0x5002538da01ceedd-part6                      ONLINE       0     0     0
      nvme1n1                                           ONLINE       0     0     0
    logs
      sda5                                              ONLINE       0     0     0

errors: No known data errors
root@linux:~#

Ответ или решение

Вопрос о том, почему при использовании ZFS с параметром sync=standard и наличием SLOG данные записываются на основные диски пула каждую секунду, довольно распространён среди ИТ-специалистов, работающих с файловыми системами ZFS. Чтобы дать исчерпывающий ответ, необходимо детально рассмотреть теорию базового функционирования ZFS, особенности параметра sync и роль SLOG в этом процессе, примеры практического применения и сложностей, и, наконец, обобщить эти знания для их практического использования.

Теория

Файловая система ZFS (Zettabyte File System) известна своим уникальным подходом к управлению данными и высокой надёжностью. Одной из ключевых характеристик ZFS является способ обработки операций записи. Важное понятие здесь — это transaction group (txg), которая представляет собой группу операций, объединенных для увеличения производительности. Эти группы записываются с заданным интервалом (по умолчанию 5 секунд, у вас установлено 300 секунд) или когда достигается лимит грязного буфера (3ГБ в вашем случае).

Параметр sync в ZFS определяет, как система обрабатывает синхронные операции записи. В частности:

  • sync=standard — записи обрабатываются как синхронные, и система заботится о сохранности данных с помощью журнала (SLOG, если он используется) или при его отсутствии — с использованием обычных механических дисков.
  • sync=disabled — все операции рассматриваются как асинхронные, увеличивая производительность за счёт риска потери части данных при сбое.

SLOG (Separate Intent Log) оптимизирует синхронные операции записи, записывая данные на более быстрые носители (например, NVMe накопители), ускоряя операции записи и минимизируя задержки.

Пример

В вашем примере конфигурации наблюдаются следующие особенности:

  1. Используется параметр sync=standard, что подразумевает ожидание системы на подтверждение завершения операции записи. В идеале, эти записи должны проходить через SLOG для ускоренного выполнения перед перемещением на основные диски.

  2. При использовании sync=disabled, данные могут записываться на основной пул без учёта задержек, связанных с подтверждением завершения записи, что объясняет увеличенную производительность в этом режиме.

  3. Ваши основные диски — это SMR (Shingled Magnetic Recording) диски, которые сами по себе имеют особенности по поводу записи, требуя большего времени для выполнения операций из-за наложения дорожек.

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

Применение

Для решения возникшей проблемы и оптимизации процесса записи, следует:

  1. Проверить исправность и производительность SLOG: Убедитесь, что устройство работает корректно и быстро, соответствует требованиям для быстрого обмена данными. Это может быть достигнуто тестами производительности или заменой на более быстрый NVMe.

  2. Проверить конфигурацию ZFS: Убедитесь, что все настраиваемые параметры соответствуют вашим нуждам. Например, уменьшите размер transaction group и повышайте частоту их записи, чтобы сократить нагрузку на SMR диски.

  3. Диагностика аппаратных проблем: Проверьте состояние SMR накопителей, чтобы исключить их перегруженность или аппаратные неисправности, которые могут мешать эффективному распределению данных.

  4. Оценка режимов работы: Определите, действительно ли вам необходим полный синхронный режим записи. В некоторых сценариях переключение на sync=disabled или рассмотрение асинхронных режимов может быть полезно для увеличения пропускной способности.

  5. Обновление и мониторинг: Держите программу и драйверы обновлёнными, а также постоянно следите за обновлениями ZFS, так как новые релизы могут предлагать улучшения в производительности и новых методах управления данными.

Таким образом, понимание внутренних процессов, которые управляют взаимодействием ZFS с SLOG и основными дисками, является критически важным для успешного управления производительностью вашего хранения данных. Знание и применение данных принципов помогут оптимизировать работающую систему, минимизировать задержки и увеличить общую производительность без ущерба для устойчивости данных.

Оцените материал
Добавить комментарий

Капча загружается...