ZFS

ZFS Performance Q

В незапамятные времена, а именно четыре года назад, я намерял, что от ускорения процессора (или памяти?) ZFS-у бывает счастье. Было это на FreeBSD 9-STABLE.

Прошло четыре года и вопрос опять нагревается, хочу поменять 65-ваттные процессоры в ящиках на что-то попроще, а заодно добавить шпинделей и L2ARC.

FreeBSD у меня в одном ящике 10-STABLE, а в другом 11-чего-то там.

Ну и вопрос, собственно, более конкретный:

Что ему (ZFS на актуальных FreeBSD) более любо: частота, количество ядер или вовсе DDR4 RAM?

Или может там вообще все оптимизировали по самые гланды и сойдет и Atom? Или не Atom, а 20-вт Pentium D?

Скорости которые меня интересуют - мегабайт 700-900 в секунду (три старых SSD-шки в L2ARC, ~10 шпинделей в RAIDZ2).

zfs defrag?

Граждане читатели!

А для дефрагментации ZFS придумали что-то лучше чем:

zfs snapshot pool/fs@1

zfs send pool/fs@1 | zfs recv pool/fsnew

zfs destroy -r pool/fs

zfs destroy pool/fsnew@1

zfs rename pool/fsnew pool/fs

писал по памяти от фонаря, но смысл, надеюсь, передал

Про Seagate ST3000DM001

Было у отца три сына у меня некоторое количество сигейтов ST3000DM001. Штучек 6 или даже 7, сейчас не вспомню.

Осталось три. Или, возможно, четыре (4-й - как offline storage, на другой квартире).

Остальные - куку. Крайний вот вчера приказал известно что. Сначала таймауты (нечастые), а потом и вовсе перестал находиться.

За 2.5 года примерно, судя по SMART оставшихся дисков. Что, как мне кажется, крутовато. Ну то есть да, у меня не охлаждаемый ДЦ, а просто полка в шкафу, температура дисков летом - градусов 50, но это ж не повод.

Меняю на HGST HDN724040ALE640. Как все поменяю - и том подрастет :)

И одна радость, на ZFS ребилд идет сильно быстрее, чем на аппаратном рейде:

  scan: resilver in progress since Tue Jul 29 15:39:20 2014
        464G scanned out of 11,1T at 600M/s, 5h9m to go
        73,3G resilvered, 4,09% done
В смысле, примерно 120Mb/sec на шпиндель (оставшихся живых шпинделей - 5).

Найду чеки - буду пробовать менять по гарантии. Пора завести привычку записывать что где куплено и когда. Серийники то есть.

UPD. У этих дисков, оказывается, два года гарантии. Которые они, да, выработали.

FreeBSD ZFS Q

А вот тут у меня проект на празднички, расширить ZFS с 5x3Tb до 6x3Tb.

Ну значит надо побэкапить, пересобрать, поресторить.

Бэкаплю:

zfs snapshot zdata/files@20140104
zfs send zdata/files@20140104 | zfs recv zfiles/files

zdata - это мой массив, zfiles - пул на диске, вставленном через SATA.

Дальше делаю zpool export zfiles. Размонтировались, типа. Вынимаю диск.

Дальше хочу посмотреть как оно. Опять вставляю диск, zpool import и хрена лысого:

pool broken, репайред быть не может.

Такое было и при хотсвапе через SATA и при хотсвапе через USB-dock.

Вопросы:

  • ЧЯДНТ?
  • какого хрена, собственно? Если сделали export, диск же размонтирован и можно вынимать?

Ну то есть я сейчас спишу 10Tb файликов по сети на NTFS-диски, но злобу уже затаил...

UPD: Дима, Слава, я благодарен за советы. Но вот сейчас я, весь на нервах, еще раз пишу 10Tb файликов, уже на винду (точнее, в два потока, на винде и на FreeBSD, но не суть важно).

Всякие предложенные идеи - я обязательно попробую. Но сначала том надо нарастить, место ж кончается.

Adaptec 5805 RAID6 vs ZFS RAIDZ2 performance

Вот, померял на досуге:
  • ASR-5805, 8 дисков в RAID-6, 2Tb-раздел в начале массива. Тестируем гигабайтным блоком, 40 гигов чтения/записи:
    • NTFS (Win7): 651Mb/sec чтение, 651Mb/sec запись.
    • UFS2+SUJ (FreeBSD 9.1): 585Mb/sec запись, 528Mb/sec чтение.
    • EXT4 (Ubuntu Server 11.10): 659/639
  • ZFS RAIDZ2 (FreeBSD 9.1), те же 8 дисков: 490Mb/sec на запись (dd bs=1024M), огорчился и не стал мерять дальше.
Так как эти ~650Mb/sec у меня из Убунты впрямую транслируются в SRP (SCSI RDMA Protocol), то я уже счастлив (подробности чуть позже).

Hardware: Intel i5-2400, мамка на Z77, 8GB RAM, Adaptec ASR-5805, 6 дисков Seagate Barracuda ES.2 1Tb (SAS), два диска WD RE4 1Tb (SATA). Размер блока массива - 256Kb. Никаких моментиков с терабайтниками (вроде 4-к сектора) - нету.

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

Но мне для дискового ящика от ZFS нужно только тома нарезать - и терпеть на этом фоне разницу в перформансе в 1.3 раза я не готов.

О сторадж-боксах

Звезды сошлись, руки дошли и я собрал таки стораджбокс, как и собирался уже полгода
Core i5-2300, 8GB RAM, Adaptec 5805, 8x1Tb HDD (6 штук старых Barracuda ES.2 SAS, два новых WD RE4), бутовый SSD, Mellanox Infiniband (2 порта 10G). И даже есть место для еще одного диска, хотя 5" ящики и не обдуваются.

Задача: вынести HDD из рабочей станции (где было 6x1Tb SAS + Adaptec) с целью уменьшения шума под столом (ну и вообще, большей лучшести, к этому ящику же можно больше одной машины подключить). При этом надо оставить избыточность в два диска т.е. RAID6 и/или RAIDZ2. Потому как ситуация, когда один диск вылетает - она случалась уже да.

Опять-снова о производительности ZFS

В процессе борьбы за увеличение количества PCI-e слотов в домашнем NAS, взял я кровные 300 баксов и отнес их в лабаз, где и приобрел:

  • 2x4GB памяти DDR3-1600
  • Процессор i3-2120
  • Материнку Gigabyte GA-Z68MA-D2H-B3 (3 длинных PCIe слота, x16, x8 и x4!)
На общую сумму 8800р или что-то вроде этого.

В сравнении с тем что было (Core2Quad Q9300, 8Gb), общий перформанс вырос не слишком сильно. make -j8 buildworld шел 44 минуты, а теперь идет 37. Это на SSD-диске.

А вот на ZFS (RAIDZ, 5 дисков Seagate 3Tb с гигабайтными пластинами) перформанс выстроился так (результаты кроме первого я уже приводил).

Тестирование путем dd if=/dev/zero of=file bs=1G count=50

  • 437 Mb/sec - Core i3-2120, память DDR3-1600 (8Gb, два канала)
  • 360 Mb/sec - Core i7-920, память DDR3-1333 (12Gb, три канала)
  • 280 Mb/sec - Core2 Quad Q9300, память DDR2-800 (8Gb, сколько каналов не знаю)
При этом, вторая система (i7-920) сильно быстрее всех прочих по горшку и, по идее, не сильно медленнее первой по памяти (потому что три канала, а не два).

В этом тесте я все еще не вижу 100% disk load в systat -vm/iostat -x, но к нему стало ближе. Ну и полоса записи на отдельный диск наконец выросла over 100Mb/sec.

Упирается ли оно в CPU - не могу понять. С одной стороны, на всех 4-х (гипертрединг же) CPU idle time в районе 80%. С другой стороны - как эти проценты считаются на HT мне вовсе неясно, может их там не 80, а 40, а из 60% загрузки ту самую половину (которую уже обсуждали) выжирает ZFS (т.е. ядерный код) и еще процентов 10 - прерывания.

При случае, суну эти же диски в ящик с i7-2600K, но случая придется ждать долго. Вопрос на самом деле важный, может быть имело смысл потратить не $300, а $380 и горшок взять покруче, вроде i5-2400S.

O ZFS performance

Подтверждается старое правило: чем гуще горшок, тем пуще ZFS

Переставил новый массив из тестовой машины (i7-2.67Ghz) в несколько более медленную (Core2Quad Q9300 @2.5) и сразу вместо 350-360Mbyte/sec на запись получил 250-280.

На скорость диска не могу грешить, zpool scrub в обеих машинах в начале процесса рапортует в районе 500Mb/sec:

 pool: zdata
 state: ONLINE
  scan: scrub in progress since Tue Mar 20 14:40:34 2012
        782G scanned out of 7,84T at 507M/s, 4h4m to go
        0 repaired, 9,74% done

Собственно, не секрет, и недавно обсуждали, и давно тоже: от перехода c С2D 1.86 на C2Q 3.06 наступает счастье.

Ну, значит пора этому C2Q на покой. Никому не нужна материнка (Micro-ATX, 1xPCI, 2xPCIe1x, 1xPCIe 16x)+процессор+8Gb DDR2-памяти? Махнусь на 12Gb DDR3 в фасовке по 4Gb!, уже неактуально.

Про ZFS, Advanced Format и ashift

Пару лет назад я уже исследовал ZFS на дисках с 4k-сектором, но тогда такой диск в массиве был только один (а остальные три - с 512b секторами) и какой-то значимой разницы я не нарыл.

Кроме того, том был загрузочный, а грузиться с тома где ashift не равен 9 тогдашние бутблоки не умели.

Поэтому овладев пятеркой 3Tb сигейтов я просто обязан был это опробовать.

Рассказываю.

Hardware

  • 5x Seagate ST3000DM001 (3Tb)
  • Материнка на Intel X58, Core i7 920, 12GB RAM
  • FreeBSD 9.0-STABLE, обновлялась недели три назад.
  • Попало с машины, откуда я склонировал FreeBSD. Может оно и неправильно, но уже поздно перемеривать:  vfs.zfs.arc_max="4G" vfs.zfs.vdev.max_pending=30

ZFS performance Q: hw RAID или RAIDZ(2)

А вот такой практический вопрос.

Есть, к примеру, 6-8 не очень быстрых дисков (7200 rpm, что-нибудь типа Barracuda ES или как они теперь правильно называются, Seagate Constellation?). Двухтерабайтников, скажем (потому и не 10k/15k).

К тому же примеру, есть какой-то 8-портовый контроллер. Вот прямо на руках есть Adaptec 5805. Покупать что-то еще новомодное и быстрое (столь хвалимые LSI 9280, к примеру) не хочется, жаба не велит.

Процессор на тазике будет достаточно быстрый, что-нть в духе i7-920, памяти тоже не пожалею (12G скорее всего).

Хочется на этом месте поднять ZFS (потому что очень удобно на практике), предположительно на FreeBSD, но солярку (в каком-то лице) тоже можно рассмотреть.

Собственно, вопрос:

А как это правильно конфигурировать то:

  • JBOD или 6(8) single-disk arrays и ZFS поверх?
  • Или RAID6 на контроллере и ZFS "на одном томе"?
Вопрос касается именно производительности, причем типичных паттернов я вижу два:
  • I like to move it, move it большими файлами (кино, бэкапы, да мало ли в хозяйстве больших файлов). Т.е. линейное чтение-запись во всей красе.
  • Доступ по iscsi, причем тома будут прямо вот средствами ZFS нарезаны. А на этих томах - всякое разное.

Интернеты - противоречивы. У одних бойцов RAIDZ несколько медленнее, у других - наоборот. Как правило, из тестов непонятно, куда RAIDZ упирался, мог ведь и банально в память/процессор.

Помимо RAIDZ2/RAID6 рассматриваю еще и вариант с mirror, но он для 8 дисков какой-то обидный.

FreeBSD ZFS performance: просто возьмите молоток побольше

Если поискать в этом блоге, особенно в каментах, то найдете что ZFS на трех дисках (RAIDZ) давала у меня скорость чтения/записи порядка 75-80 Mb/sec. Так оно и было до недавнего времени, пока я с этой скоростью не уперся в скорость на сети (samba).

Пришлось навести следствие. Выяснилось очень простое, хотя и не вполне очевидное:

  • У меня был даунклоченый Core2Duo: 1.86Ghz работающий на ~1.6, задаунклочил летом, по случаю жары, просто на всякий случай.
  • При этом при чтении с ZFS system time как правило не рос выше 50%, что я неверно интерпретировал как однопоточность ZFS (судя по всему, неверно, ибо потом в тестах видел и 70% system) и верно интерпретировал как упертость в процессор.
  • Банальный оверклок того же горшка (и памяти) приводил к почти линейному росту скорости FS.

Тогда я пошел в лабаз и купил там еще один 2TB диск и 3.06-гигагерцовый C2D (E7600), собрал все в кучку (дисков стало 4) и результат:

  • 170-195 Mb/sec на запись
  • 230-280 Mb/sec на чтение
Скорость, судя по всему, зависит от того, в какую зону диска, побыстрее или помедленнее, файловая система положила файл. System при этом держится на уровне 20-30%, а изменение частоты горшка на производительность почти не влияет. Ну и Samba в диск больше не упирается.

Все тестирование делалось методом

dd if=/dev/zero of=file bs=1M count=20000
dd if=file of=/dev/null bs=1M
То есть речь о больших файлах, с мелкими всегда все сложнее и хуже.

Поэтосамое по-настоящему

Если вы хотите поеба потрахаться по-настоящему, предлагаю такой вот метод:

  • Создаете ZFS-том терабайт эдак на шесть (меньше не пробовал) на FreeBSD 8.1-RELEASE/STABLE.
  • И записываете туда пару-тройку сотен тысяч файлов с русскими (и европейскими) именами в кодировке UTF-8.
Если вам очень повезет, то вы получите ненулевое количество каталогов в которых нельзя сделать ls или find (и естественно, все остальные, получающие список файлов, вроде du). Если повезет слегка, то ls работать будет, а вот rm * - нет. И rm конкретный-файл - тоже нет.

Единственная выявленная система - это очень длинные, под лимит, имена файлов. Не только русские, но и европейские (с умляутами).

gptzfsboot и все все все....

В копилку знаний сисадмина:

Если у вас ZFS, RAIDZ и загрузка с RAIDZ и вы ставили FreeBSD 8.1-RELEASE

То не поленитесь поапгрейдить бут-блоки на более свежие, те которые в 8.1 - не умеют грузиться с degraded array.

Подробности тут: www.freebsd.org/cgi/query-pr.cgi?pr=148655

Да, а если ваш массив в состоянии resilvering (навернувшийся диск заменили, но массив не успел перестроиться), то и новые бутблоки имеют шанс не загрузиться...

P.S. Нет, диск не ломался, это я просто like to move it, move it, все массивы в доме наращивал до размера побольше....

Народная мудрость

Примета:

Сделать zpool upgrade, но не сделать gpart bootcode ... -p gptzfsboot - означает поипаться от души поиметь немало веселых минут.

Особенно с учетом того, что zpool upgrade делается на лету, а отсутствие нужной версии boot loader становится заметно после перезагрузки. Которая у меня, например, случилась через две недели.

Наука о контактах

Вот такие вот приятные сообщения стал я получать от системы.

Dec 15 07:39:40 home-gw kernel: ad2: TIMEOUT - FLUSHCACHE48 retrying (1 retry left)
Dec 15 08:02:37 home-gw kernel: ad2: TIMEOUT - FLUSHCACHE48 retrying (1 retry left)
Dec 15 08:31:23 home-gw kernel: ad2: TIMEOUT - FLUSHCACHE48 retrying (1 retry left)
Dec 15 08:55:29 home-gw kernel: ad2: TIMEOUT - FLUSHCACHE48 retrying (1 retry left)
Dec 15 08:58:23 home-gw kernel: ad2: TIMEOUT - FLUSHCACHE48 retrying (1 retry left)
Dec 15 09:01:10 home-gw root: ZFS: vdev I/O failure, zpool=zroot path=/dev/ad2p2 offset=412440274432 size=1536 error=5
Dec 15 09:01:10 home-gw kernel: ad2: TIMEOUT - WRITE_DMA48 retrying (1 retry left) LBA=805547573
Dec 15 09:01:10 home-gw kernel: ad2: FAILURE - WRITE_DMA48 
Как видно, несколько раз в час.

Поменял кабель - не помогло. Подумал, воткнул в другой порт (диск стал ad6). Как рукой сняло, уже полтора дня ни одного разрыва все тихо.

Вот и верь после этого в электронику.

root on ZFS

Для тонких ценителей.
zroot on / (zfs, local)
zroot/home on /home (zfs, local)
zroot/tmp on /tmp (zfs, local, nosuid)
zroot/usr on /usr (zfs, local)
..... и еще с десяток томов под разные нужды....
3 диска, RAIDZ1, 4 терабайта места, "домашний роутер".

Но пришлось раз 10 подойти к снаряду на виртуальной машине, прежде чем многочисленные мелкие грабли оказались обнаружены.

В частности, расширять root pool нельзя, поэтому идея-фикс по переносу данных без многократного переписывания данных не проканала. А была она такая:

  • Было два двухтерабайтника в зеркале, место кончилось, купил третий.
  • Разбиваем зеркало, из двух дисков (один старый, один новый) делаем RAIDZ1, переписываем туда данные.
  • Добавляем второй старый диск в тот же RAID.
Увы, пришлось вылить на внешние диски, собрать массив, налить обратно....

По органолептическим ощущениям, диски сильно меньше нагружены, чем в gmirror, отчего меньше греются. Какой-то статистики наберу за неделю, расскажу....

SSD рулят

Потестировал тут SSD-диск (G.Skill Falcon, 128Gb) на одной read-only задаче. Два дня тестировал.

Если не вдаваться в подробности, то это большая (в примере было 90Gb) база данных со случайным доступом. Запросы к ней бывают короткие и длинные, при этом короткие на обычных дисках упираются в seek, а длинные ограничены и скоростью линейного чтения тоже.

Получилось:

  • Короткие запросы (коих большинство) ускорились примерно в 15 раз.
  • Длинные - в 4-5 раз.

Кроме того, для длинных запросов не падает общий throughput под параллельной нагрузкой (несколько одновременных запросов), тогда как для HDD - падает.

Pages

Subscribe to ZFS