2

Я пытаюсь максимизировать производительность Windows VM на ZVOL. Официальная рекомендация заключается в том, что размер единицы выделения (volblocksize) в zvol должен быть согласован с размером единицы выделения, который я хочу поместить в ZVOL. В случае с Windows это будет размер в 4 Кбайт:http://open-zfs.org/wiki/Performance_tuning#Dataset_recordsize

Тем не менее, также говорится, что небольшой размер вольблокации вредит производительности ZFS, и в этой теме люди дают смешанные рекомендации: http://list.zfsonlinux.org/pipermail/zfs-discuss/2017-September/029227.html

Мне интересно, лучше ли оставить ZFS с размером блока по умолчанию 8 КБ, а затем отформатировать мою установку Windows с блоками 8 КБ вместо обычных 4 КБ. Я понимаю, что это означает отсутствие сжатия файлов NTFS, и я готов, по крайней мере, попытаться отказаться от него.

Я думал, что если ZVOL будет работать с блоками по 8 КБ, не будет штрафа на чистую память при установке NTFS на 8 КБ. Это правильно? Есть ли другие причины, по которым это может быть ужасной идеей?

1 ответ1

2

FWIW, почти невозможно доверять анекдотическим показателям производительности: слишком много может отличаться между этой отдельной точкой данных и вашей настройкой. (Они использовали дедупликацию? Имели ли они достаточно оперативной памяти в системе? Был ли один из их дисков на грани отказа? Какую конфигурацию избыточности данных они использовали? Это было до или после того, как синхронная запись стала в 2 раза быстрее? У этого списка нет конца.)

В руководстве вы связаны с здесь является правильным:

Частичная запись записи требует, чтобы данные считывались либо с ARC (дешево), либо с диска (дорого). recordsize может быть установлен на любую степень 2 от 512 байт до 128 килобайт. Программное обеспечение, которое пишет с фиксированным размером записи (например, базы данных), выиграет от использования соответствующего recordsize .

И чуть ниже ...

У Zvols есть свойство volblocksize , аналогичное размеру записи. Размер по умолчанию составляет 8 КБ, что соответствует размеру страницы в архитектуре SPARC. Рабочие нагрузки, которые используют IO меньшего размера (например, подкачка на x86, которая использует 4096-байтовые страницы), выиграют от меньшего размера volblocksize .

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

Этот совет верен (и соответствует вашему желанию использовать размер в килобайтах 8 volblocksize если я правильно понимаю), если вы хотите сделать сжатие внутри ZFS (что в основном является единственным вариантом, если гостем является Linux, поскольку ext4 и XFS не выполняют сжатие). Для этой конфигурации не будет никаких накладных расходов на хранение либо из-за чтения-изменения-записи, либо из-за использования дополнительного пространства. Если вы верите в сообщение списка рассылки, на которое вы ссылались, возможно, это также незначительно уменьшит количество попаданий ZFS в узкие места при записи большого количества блоков по 4 КБ.

Тем не менее, поскольку NTFS может выполнять сжатие, если вы по какой-то причине хотите использовать сжатие NTFS, вы должны сделать volblocksize равным размеру блока базовых дисков, чтобы дать NTFS минимально возможную единицу для сжатия содержимого (тратить наименьшее количество пространство, когда необходимо округлить сжатые данные до следующего размера блока) и привести размер логического блока в NTFS к требуемому размеру блока базы данных. Это также не приведет к дополнительным затратам на хранение через чтение-изменение-запись или дополнительное пространство.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .