Назад | Перейти на главную страницу

Оптимальные настройки ARC и L2ARC для конкретного приложения хранения

Я настраиваю сервер, на котором работают 3 пула ZFS, 2 из которых являются целевыми, и мне кажется, что рекомендации по умолчанию просто не оптимизированы для них. Работа в сети обеспечивается двумя адаптерами на 10 Гбит.

Пул 1 - это большое файловое хранилище, оно содержит необработанные видеоданные, которые редко записываются и читаются, а также периодические резервные копии. Нет абсолютно никакого смысла в кэшировании чего-либо из этого пула, поскольку это данные с высокой пропускной способностью, которые считываются за один цикл от начала до конца, и кеширование чего-либо из него будет пустой тратой памяти. Задержка - не такая уж большая проблема, а пропускная способность вполне достаточна из-за высокой степени сжатия данных. Пул состоит из 8 жестких дисков в режиме z2, полезная емкость 24 ТБ.

Пул 2 - это хранилище сжатых видеокадров. Части этого контента часто читаются при создании видеопроектов. Доля часто используемых данных обычно больше, чем общий объем оперативной памяти сервера, требуется низкая задержка, но не сверхнизкая, важнее пропускная способность. Пул состоит из 3 жестких дисков в z1, полезная емкость 8 ТБ и твердотельный накопитель NVME 1 ТБ для L2ARC.

Пул 3 - это обычное хранилище, используемое в качестве хранилища для нескольких компьютерных систем, которые загружают и запускают программное обеспечение с него, а не с локального хранилища. Поскольку он должен обслуживать несколько машин и основное хранилище системы, требования к задержке и пропускной способности здесь самые высокие. Этот пул в основном читается, записи ограничены тем, что делают клиентские системы. Пул состоит из 3 твердотельных накопителей SATA в режиме z1, полезная емкость 1 ТБ.

Мое намерение при оптимизации связано с минимизацией размера ARC для первых двух пулов, чтобы максимизировать размер ARC для третьего.

Пул 1 не имеет никакой пользы от кеширования, поэтому какое минимальное безопасное количество ARC я могу установить для него?

Пул 2 может извлечь выгоду из ARC, но на самом деле это того не стоит, поскольку L2ARC достаточно быстр для этой цели, а емкость диска составляет 1 ТБ. В идеале я был бы счастлив, если бы мне удалось обойтись без использования какого-либо ARC для этого тома и использования полного терабайта L2ARC, но кажется, что для данных заголовка L2ARC требуется хотя бы какой-то ARC.

Итак, учитывая емкость L2ARC 1 ТБ и размер записи пула 64 КБ, 1 ТБ / 64 КБ * 70 ГБ дает мне ~ 0,995 ГБ. Означает ли это, что я могу безопасно ограничить ARC для этого пула 1 ГБ? Или может быть нужно больше?

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

Общие рекомендации, которые я прочитал, предполагают около 1 ГБ ОЗУ на 1 ТБ хранилища, я планирую 32 ГБ ОЗУ на 33 ТБ хранилища, на котором я почти мертв, но 4 или 5 к 1 для L2ARC против ARC, чего мне не хватает из довольно много. Цель состоит в том, чтобы сократить ARC пула 1 до минимально возможного, а ARC пула 2 - ровно столько, сколько необходимо, чтобы иметь возможность использовать весь 1 ТБ L2ARC, чтобы максимизировать ОЗУ, доступное для ARC для пула 3. .

Во-первых, я действительно предлагаю вам пересмотреть схему для пулов №2 и №3: трехстороннее зеркало не даст вам ни низкой задержки, ни высокой пропускной способности. Вместо дорогого диска NVMe емкостью 1 ТБ для L2ARC (который, кстати, несбалансирован из-за небольшого ARC 32 ГБ), я бы использовал больше дисков 7200 об / мин в режиме RAID10 или даже более дешевые, но надежные твердотельные накопители (например: Samsung 850 Pro / Evo или Crucial MX500).

По крайней мере, вы можете поместить все диски в один пул RAID10 (с SSD L2ARC) и сегментировать этот пул с помощью нескольких наборов данных.

Тем не менее, вы можете указать, как ARC / L2ARC следует использовать в базе данных для каждого набора данных, используя параметр primarycache и secondarycache параметры:

  • zfs set <dataset1> primarycache=none; zfs set <dataset1> secondarycache=none отключит любой Кэширование ARC / L2ARC для набора данных. Вы также можете оформить zfs set <dataset1> logbias=throughput для предоставления привилегий сквозной пропускной способности, а не задержки во время операций записи;
  • zfs set <dataset2> primarycache=metadata включит кэширование только метаданных для второго набора данных. Обратите внимание, что L2ARC обрабатывается ARC; это означает, что если ARC кэширует только метаданные, то же самое будет верно и для L2ARC;
  • оставьте параметр ARC / L2ARC по умолчанию для третьего набора данных.

Наконец, вы можете настроить свой экземпляр ZFS на использование более 50% оперативной памяти (по умолчанию) для ARC (ищите zfs_arc_max в страница руководства модуля)