Предисловие: Я ни в коем случае не опытный пользователь 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 разных размеров, но описанное поведение делает его практически непригодным для надежной передачи больших объемов данных.
Любые предложения, чтобы исправить текущую настройку, или альтернативы, которая будет работать сопоставимо? Заранее спасибо за понимание. Если вам нужна дополнительная информация, дайте мне знать.
Примечания стороны:
- Я выполнил локальный тест производительности диска в массиве, и там также проявилось то же поведение, исключающее как компьютеры Windows, так и сеть.
- Запуск
sync
кажется, приносит пользу, но не постоянно и не постоянно. - Память исчерпана для этой конфигурации, но я не думаю, что это сразу проблема.
- Я надеюсь, что это не проблема с контроллером (у меня нет другого, а на плате всего четыре порта (один для SSD, три оставшихся)).
- Большинство источников говорят, что диск ZIL не поможет в моей ситуации.
Обновления (1 сентября 2015 г.):
- Я установил FreeNAS на том же оборудовании, используя ту же топологию массива, и столкнулся с точно такой же проблемой. Это означает, что проблема, скорее всего, аппаратная.
- Для этого я поместил три из четырех дисков на внутренний контроллер и создал из них массив. Задача решена! Непрерывные записи достигнуты. Конечно, это означает, что мне нужно найти новую карту SATA, но, по крайней мере, сейчас она работает теоретически.