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

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

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

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

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

  1. Журнал намерений ZFS или ZIL для буферизации операций ЗАПИСИ.
  2. ARC и L2ARC, которые предназначены для операций READ.

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

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

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

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

$ zfs set sync = always mypool/dataset1

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


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

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

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

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

$ zpool add tank log ada3

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

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

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

$ zpool add tank log mirror ada3 ada4

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


Adaptive Replacement Cache (ARC) и L2ARC

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

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

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

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

$ zpool add tank cache ada3

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


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

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

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

Оцените статью
nanomode.ru
Добавить комментарий