ZFS не пишет непрерывно в массив

382
MobiusOne

Предисловие: Я ни в коем случае не опытный пользователь Linux, но я играл с Linux достаточно, чтобы быть опасным.

Я создаю персональный сервер, в основном просто для хранения видео и фотографий. Текущие характеристики следующие:

  • Gigabyte GA-G41M-ES2L Материнская плата
  • Процессор Core 2 Duo E6750 (2,66 ГГц)
  • 4 ГБ оперативной памяти DDR2
  • Карта SATA PCIe Vantec UGT-ST644R PCIe (RAID не используется)
  • Жесткие диски 2 × 1,5 ТБ и 2 × 1,0 ТБ
  • 64 ГБ SSD (для загрузочного диска)

Я установил Ubuntu Server 14.04.3 LTS на SSD, с ZFSonLinux, установленным здесь (Ars Technica) . Также установлен Samba (Версия 4.1.6-Ubuntu), который я использую для доступа к серверу с остальных моих компьютеров (Windows 7 и выше) (максимум два или три, в конце концов).

Все четыре диска подключены к плате контроллера Vantec, каждая пара зеркально отражена и добавлена ​​в ZPool, что дает 2,5 ТБ свободного места. SSD подключается непосредственно к встроенному контроллеру.

Когда это работает, это работает прекрасно, однако ...

Когда я записываю большие объемы данных в массив, первые ≈500 МБ просто «записывают» нормально (в кеш, я полагаю), затем ZFS ожидает около 30 секунд (мониторинг с использованием zpool iostat <pool_name> 1), записывает ≈350 МБ из кеша в массив, принимая больше данных, ожидает ≈ 30 секунд, записывает ≈350 МБ из кэша в массив, принимая больше данных, ожидает ≈ 30 секунд и т. д. до завершения передачи. В этих 30-секундных блоках он ничего не делает (0 в, 0 из), просто сидит без дела.

Сетевой канал (к моему большому удивлению) способен заполнить 350 МБ за 5 секунд, оставляя много мертвого времени в течение всего процесса.

Есть ли способ устранить это узкое место / «дыхание»?

Я попытался изменить zfs_txg_timeoutзначение (по умолчанию 5 секунд, так что это маловероятно, но 1 секунда не помогает).

Я также установил минимальное и максимальное значения кэша в 2 ГБ и 3 ГБ соответственно, но он все еще начинается с относительно небольшого размера кэша и медленно растет. Я наблюдал за тем, как используется системная память во время этого, и ZFS, похоже, не хочет быстро увеличивать объем используемой оперативной памяти, даже когда все ожидает этого.

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

Любые предложения, чтобы исправить текущую настройку, или альтернативы, которая будет работать сопоставимо? Заранее спасибо за понимание. Если вам нужна дополнительная информация, дайте мне знать.

Примечания стороны:

  1. Я выполнил локальный тест производительности диска в массиве, и там также проявилось то же поведение, исключающее как компьютеры Windows, так и сеть.
  2. Бег, syncкажется, приносит пользу, но не постоянно и не постоянно.
  3. Память исчерпана для этой конфигурации, но я не думаю, что это сразу проблема.
  4. Я надеюсь, что это не проблема с контроллером (у меня нет другого, а на плате всего четыре порта (один для SSD, три оставшихся)).
  5. Большинство источников говорят, что диск ZIL не поможет в моей ситуации.

Обновления (1 сентября 2015 г.):

  1. Я установил FreeNAS на том же оборудовании, используя ту же топологию массива, и столкнулся с точно такой же проблемой. Это означает, что проблема, скорее всего, аппаратная.
  2. Для этого я поместил три из четырех дисков на внутренний контроллер и создал из них массив. Задача решена! Непрерывные записи достигнуты. Конечно, это означает, что мне нужно найти новую карту SATA, но, по крайней мере, сейчас она работает теоретически.
2
Привет MobiusOne. Пожалуйста, не редактируйте свой вопрос, чтобы ответить на него. Вместо этого опубликуйте решение как свой собственный ответ (самооценка) и примите это. Это скажет сообществу, что вы чувствуете, что на ваш вопрос ответили. Похоже, что ваше последнее редактирование должно быть вполне приемлемым в качестве самоответа, если только слегка перефразировать его, чтобы прочитать больше как ответ. a CVn 8 лет назад 2
И нет, ЗИЛ, скорее всего, не поможет. Технически это устройство SLOG (в пуле ZFS всегда есть ZIL, даже если оно не хранится на отдельном устройстве хранения), но даже в этом случае оно помогает только при синхронной записи, что является очень малой частью обычного рабочий процесс ввода-вывода. a CVn 8 лет назад 0
Для этой проблемы (и других подобных) ** первое **, что вы хотите сделать, это посмотреть на вывод `iostat -x`, чтобы увидеть, где находятся фактические узкие места. qasdfdsaq 8 лет назад 0

0 ответов на вопрос