ZFS

Настройка кэша ZFS для высокоскоростного ввода-вывода

Настройка кэша ZFS для высокоскоростного ввода-вывода

Настройка кеширования в пуле ZFS

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

Большая часть избыточности для пула ZFS обеспечивается базовыми VDEV. То же самое и с производительностью пула хранения. Производительность как чтения, так и записи можно значительно улучшить за счет добавления высокоскоростных твердотельных накопителей или устройств NVMe. Если вы использовали гибридные диски, где SSD и вращающийся диск объединены как единое оборудование, то вы знаете, насколько плохи механизмы кэширования на уровне оборудования. В ZFS нет ничего подобного из-за различных факторов, которые мы рассмотрим здесь.

Есть два разных кэша, которые может использовать пул:

  1. ZFS Intent Log или ZIL для буферизации операций записи.
  2. ARC и L2ARC, которые предназначены для операций чтения.

Синхронная и асинхронная запись

ZFS, как и большинство других файловых систем, пытается поддерживать буфер операций записи в памяти, а затем записывать его на диски вместо того, чтобы напрямую записывать его на диски. Это известно как асинхронный write, и это дает приличный прирост производительности для приложений, которые являются отказоустойчивыми или где потеря данных не причиняет большого вреда. ОС просто сохраняет данные в памяти и сообщает приложению, которое запросило запись, что запись завершена. Это поведение по умолчанию многих операционных систем, даже при запуске ZFS.

Однако факт остается фактом: в случае сбоя системы или потери питания все буферизованные записи в основной памяти теряются. Таким образом, приложения, которым нужна согласованность, а не производительность, могут открывать файлы в синхронный режим, и тогда данные считаются записанными только тогда, когда они действительно находятся на диске. Большинство баз данных и приложений, таких как NFS, все время полагаются на синхронную запись.

Вы можете установить флаг: sync = всегда сделать синхронную запись поведением по умолчанию для любого заданного набора данных.

$ zfs set sync = всегда mypool / dataset1

Конечно, вы можете захотеть иметь хорошую производительность независимо от того, находятся ли файлы в синхронном режиме или нет. Вот тут и появляется ЗИЛ.


Устройства ZFS Intent Log (ZIL) и SLOG

Журнал намерений ZFS относится к части вашего пула хранения, которую ZFS использует для хранения новых или измененных данных в первую очередь, прежде чем распространять их по основному пулу хранения, удаляя по всем VDEV.

По умолчанию из пула всегда выделяется небольшой объем хранилища, чтобы он действовал как ZIL, даже если вы используете просто кучу вращающихся дисков для своего хранилища. Однако вы можете добиться большего, если в вашем распоряжении есть небольшой NVMe или любой другой тип SSD.

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

$ zpool добавить журнал бака ada3

Где бак это название вашего бассейна, бревно ключевое слово, указывающее ZFS, что нужно лечить устройство ada3 как устройство SLOG. Узел устройства вашего SSD не обязательно может быть ada3, используйте правильное имя узла.

Теперь вы можете проверить устройства в своем пуле, как показано ниже:

Вы все еще можете беспокоиться, что данные в энергонезависимой памяти выйдут из строя, если SSD выйдет из строя. В этом случае вы можете использовать несколько твердотельных накопителей, дублирующих друг друга, или в любой конфигурации RAIDZ.

$ zpool добавить зеркало журнала резервуара ada3 ada4

В большинстве случаев наиболее подходящими кандидатами для устройства SLOG являются небольшие от 16 ГБ до 64 ГБ действительно быстрой и надежной флеш-памяти.


Адаптивный кэш замены (ARC) и L2ARC

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

Для этого часть основной памяти используется для кэширования данных, которые либо использовались недавно, либо данные используются наиболее часто. Отсюда и термин Adaptive Replacement Cache (ARC). В дополнение к традиционному кэшированию чтения, при котором кэшируются только самые недавно использованные объекты, ARC также обращает внимание на то, как часто осуществляется доступ к данным.

L2ARC, или уровень 2 ARC, является расширением ARC. Если у вас есть выделенное запоминающее устройство, которое действует как ваш L2ARC, оно будет хранить все данные, которые не слишком важны, чтобы оставаться в ARC, но в то же время эти данные достаточно полезны, чтобы занять место в более медленном, чем память Устройство NVMe.

Чтобы добавить устройство в качестве L2ARC в пул ZFS, выполните команду:

$ zpool добавить кеш резервуара ada3

Где бак название вашего пула и ada3 имя узла устройства для вашего хранилища L2ARC.


Резюме

Короче говоря, операционная система часто буферизует операции записи в основной памяти, если файлы открываются в асинхронном режиме. Это не следует путать с фактическим кешем записи ZFS, ZIL.

ZIL, по умолчанию, является частью энергонезависимого хранилища пула, где данные поступают во временное хранилище, прежде чем они будут должным образом распределены по всем VDEV. Если вы используете SSD в качестве выделенного устройства ZIL, он известен как SLOG. Как и любой VDEV, SLOG может иметь зеркальную или raidz-конфигурацию.

Кэш чтения, хранящийся в основной памяти, известен как ARC. Однако из-за ограниченного размера ОЗУ вы всегда можете добавить SSD в качестве L2ARC, где кэшируются вещи, которые не помещаются в ОЗУ.

Лучшие приложения для сопоставления геймпадов для Linux
Если вам нравится играть в игры на Linux с помощью геймпада вместо стандартной системы ввода с клавиатуры и мыши, для вас есть несколько полезных прил...
Полезные инструменты для геймеров Linux
Если вам нравится играть в игры на Linux, скорее всего, вы использовали приложения и утилиты, такие как Wine, Lutris и OBS Studio, для улучшения игров...
Игры HD Remastered для Linux, ранее не выпускавшиеся для Linux
Многие разработчики и издатели игр придумывают HD-ремастеры старых игр, чтобы продлить жизнь франшизы, порадовать фанатов, требующих совместимости с с...