Настройка ZFS для пакетной последовательной записи
Это продолжение: Высокоскоростная запись по сети с хранилищем большой емкости . Заметно изменилась установка.
У меня пул одиночный на 6 дисков, все диски Exos X18 CMR. С использованием
Мой вариант использования — это видеоархив, в основном большой (~30 ГБ), сжатый видео, записанный один раз, прочитанный один раз. я отключил
Вот здесь у меня возникают проблемы. Я хочу иметь возможность передавать один целый видеоархив 30G со скоростью 1 ГБ/с на
Однако я не могу заставить ZFS вести себя так, как я ожидаю... Я отредактировал свой
options zfs zfs_dirty_data_max_max=25769803776
options zfs zfs_dirty_data_max_max_percent=50
options zfs zfs_dirty_data_max=25769803776
options zfs zfs_dirty_data_max_percent=50
options zfs zfs_delay_min_dirty_percent=80
Я запустил соответствующий
# arc_summary | grep dirty_data
zfs_dirty_data_max 25769803776
zfs_dirty_data_max_max 25769803776
zfs_dirty_data_max_max_percent 50
zfs_dirty_data_max_percent 50
zfs_dirty_data_sync_percent 20
Т.е. я установил максимальное количество грязных страниц на 24 ГБ, что намного больше, чем 7 ГБ, которые мне нужны, и удерживал кнопку, чтобы начать задерживать запись до тех пор, пока не будет использовано 80% этого объема. Насколько я понимаю, пул должен иметь возможность поглощать 19 ГБ в ОЗУ, прежде чем он начнет отталкивать записи от клиента (Samba) с задержкой.
Однако при записи из клиента Windows я наблюдаю, что примерно через 16 секунд при скорости записи ~ 1 ГБ/с производительность записи резко падает (
Я попробовал настроить
Вопросы:
- Я неправильно понял, как работает задержка регулирования записи?
- Возможно ли то, что я пытаюсь сделать?
- Если да, то что я делаю не так?
Да, я знаю, я буквально гонюсь за парой секунд и никогда не окупю затраченных на достижение этого усилий. Ничего страшного, на данный момент это личное дело между мной и ZFS, и это вопрос принципа ;)
1 ответ
Вам также необходимо увеличитьzfs_txg_timeout
от текущего значения по умолчанию, равного 5 секундам, до чего-то вроде 7G/0,2G/s = 35 с, поэтому установки значения 40 с должно быть достаточно.
В вашей/etc/modprobe.d/zfs.conf
:
options zfs zfs_txg_timeout=40
Обратите внимание, что ARC — это именно кэш «чтения» с нулевым участием в кэше записи, поэтому убедитесь, что ваш ARC не настроен на потребление дополнительных 7 ГБ данных, которые ваш кэш блочной записи должен поглощать на каждый поток записи объемом 30 ГБ. Кэш записи для ZFS подобен любому другому простому блочному кэшу записи (например,commit
параметр для файловых систем ext4), поэтому обязательно проверяйте его в непроизводственной среде, чтобы гарантировать отсутствие нехватки оперативной памяти во всех сценариях передачи.