FreeBSD ZFS read: 11-STABLE тоже поломана

Все оказалось еще гораздо хуже, чем казалось на первый взгляд:

  1. FreeBSD 11-STABLE тоже поломана
  2. И поломка - это свойство, возникающее при записи файла.

Давайте значит по порядку.

I. Другой ящик:

  • i3-6300T, 32Gb RAM, 6 дисков по 6Tb в RAIDZ2, диски подключены к контроллеру на материнке.

II. Берем FreeBSD 11-STABLE, конкретно вот эту вот:

FreeBSD home-gw.lexa.ru 11.0-STABLE FreeBSD 11.0-STABLE #1 r308516: Fri Nov 11 13:15:21 MSK 2016  lexa@home-gw.lexa.ru:/usr/obj/usr/src/sys/GENERIC  amd64

Настройки, касающиеся zfs только в loader.conf и они такие:

vm.kmem_size="30G"
vfs.zfs.arc_max="29G"


Создаем тестовый датасет с размером записи 1 мегабайт и пишем на него:

lexa@home-gw:/home/lexa# dd if=/dev/zero of=/ztest/100gb bs=1m count=100k

Результаты не сохранил, но там 600+ Mb/sec на записи.

Перезагружаемся (чтобы холодное чтение), читаем:

dd if=/ztest/100g of=/dev/null bs=1m
102400+0 records in
102400+0 records out
107374182400 bytes transferred in 640.324508 secs (167687135 bytes/sec)

167 - это скорость одного диска, даже вот поменьше.

Качаем с интернету 11.0-releng, компилируем, ставим, перезагружаемся, повторяем чтение.

Я не дождался окончания, потому что по iostat было видно, что проблема та же самая, 30-40 мегабайт со шпинделя, 150-170 всего. Но при этом - на другом то ящике после даунгрейда с 12- на 11-releng стало все хорошо.

Пересоздаем файл еще раз, уже под 11.0-releng:

lexa@home-gw:/home/lexa# dd if=/dev/zero of=/ztest/100gb bs=1m count=100k
102400+0 records in
102400+0 records out
107374182400 bytes transferred in 170.845743 secs (628486146 bytes/sec)

Перезагружаемся и его читаем:

lexa@home-gw:/home/lexa# dd of=/dev/null if=/ztest/100gb bs=1m count=100k
102400+0 records in
102400+0 records out
107374182400 bytes transferred in 166.894136 secs (643367016 bytes/sec)

Ура, она взорвалась. То есть вот есть изрядные подозрения, что проблема то - при записи, а не при чтении.

Что пока осталось непонятным - это лечатся ли испорченные датасеты через send | recv или придется копировать пофайлово. Изучу и расскажу.