Назад | Перейти на главную страницу

Низкая производительность записи ZFS при добавлении дополнительных шпинделей

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

Диски подключены к хосту через HBA (LSI 9300-8E) на дисковых полках SAS.

Во время тестирования ниже я выполнил следующую команду в зоне ввода-вывода iozone -i 0 -s 10000000 -r 1024 -t 10

Вот результаты моих тестов:

В моем первом тесте я создал зеркало с 12 дисками, которые показывают ожидаемую скорость записи около 100 МБ / с в секунду на каждый диск.

zpool create -o ashift=12 -f PoolA mirror S1_D0 S2_D0 mirror S1_D1 S2_D1 mirror 
S1_D2 S2_D2 mirror S1_D3 S2_D3 mirror S1_D4 S2_D4 mirror S1_D5 S2_D5

              capacity     operations    bandwidth
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
PoolA       3.60G  10.9T      0  5.06K      0   638M
  mirror     612M  1.81T      0    863      0   106M
    S1_D0       -      -      0    862      0   106M
    S2_D0       -      -      0    943      0   116M
  mirror     617M  1.81T      0    865      0   107M
    S1_D1       -      -      0    865      0   107M
    S2_D1       -      -      0    939      0   116M
  mirror     613M  1.81T      0    860      0   106M
    S1_D2       -      -      0    860      0   106M
    S2_D2       -      -      0    948      0   117M
  mirror     611M  1.81T      0    868      0   107M
    S1_D3       -      -      0    868      0   107M
    S2_D3       -      -      0  1.02K      0   129M
  mirror     617M  1.81T      0    868      0   107M
    S1_D4       -      -      0    868      0   107M
    S2_D4       -      -      0    939      0   116M
  mirror     616M  1.81T      0    856      0   106M
    S1_D5       -      -      0    856      0   106M
    S2_D5       -      -      0    939      0   116M
----------  -----  -----  -----  -----  -----  -----

В следующем тесте я добавляю еще 12 дисков, всего 24 диска, и мы эффективно сокращаем пропускную способность каждого диска вдвое.

zpool create -o ashift=12 -f PoolA mirror S1_D0 S2_D0 mirror S1_D1 S2_D1 
mirror S1_D2 S2_D2 mirror S1_D3 S2_D3 mirror S1_D4 S2_D4 
mirror S1_D5 S2_D5 mirror S1_D6 S2_D6 mirror S1_D7 S2_D7 
mirror S1_D8 S2_D8 mirror S1_D9 S2_D9 mirror S1_D10 S2_D10 
mirror S1_D11 S2_D11

                capacity     operations    bandwidth
pool         alloc   free   read  write   read  write
-----------  -----  -----  -----  -----  -----  -----
PoolA        65.2M  21.7T      0  4.67K      0   588M
  mirror     6.56M  1.81T      0    399      0  49.0M
    S1_D0        -      -      0    399      0  49.0M
    S2_D0        -      -      0    513      0  63.1M
  mirror     5.71M  1.81T      0    400      0  48.7M
    S1_D1        -      -      0    400      0  48.7M
    S2_D1        -      -      0    515      0  62.6M
  mirror     6.03M  1.81T      0    396      0  49.1M
    S1_D2        -      -      0    396      0  49.1M
    S2_D2        -      -      0    509      0  62.9M
  mirror     5.89M  1.81T      0    394      0  49.0M
    S1_D3        -      -      0    394      0  49.0M
    S2_D3        -      -      0    412      0  51.3M
  mirror     5.60M  1.81T      0    400      0  49.0M
    S1_D4        -      -      0    400      0  49.0M
    S2_D4        -      -      0    511      0  62.9M
  mirror     4.65M  1.81T      0    401      0  48.9M
    S1_D5        -      -      0    401      0  48.9M
    S2_D5        -      -      0    511      0  62.3M
  mirror     5.36M  1.81T      0    397      0  49.2M
    S1_D6        -      -      0    397      0  49.2M
    S2_D6        -      -      0    506      0  62.5M
  mirror     4.88M  1.81T      0    395      0  49.2M
    S1_D7        -      -      0    395      0  49.2M
    S2_D7        -      -      0    509      0  63.3M
  mirror     5.01M  1.81T      0    393      0  48.2M
    S1_D8        -      -      0    393      0  48.2M
    S2_D8        -      -      0    513      0  63.0M
  mirror     5.00M  1.81T      0    399      0  48.7M
    S1_D9        -      -      0    399      0  48.7M
    S2_D9        -      -      0    513      0  62.5M
  mirror     5.00M  1.81T      0    398      0  49.2M
    S1_D10       -      -      0    398      0  49.2M
    S2_D10       -      -      0    509      0  62.8M
  mirror     5.55M  1.81T      0    401      0  50.0M
    S1_D11       -      -      0    401      0  50.0M
    S2_D11       -      -      0    506      0  63.1M
-----------  -----  -----  -----  -----  -----  -----

Надеясь, что кто-то сможет пролить свет на то, почему добавление дополнительных дисков эффективно снижает производительность каждого диска.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Обзор оборудования

Сервер

Lenovo ThinkServer RD550, одноядерный 10-ядерный процессор Xeon, 256 ГБ оперативной памяти, ОС в RAID 1 на контроллере 720ix.

Серверный HBA

LSI 9300-8e mpt3sas_cm0: LSISAS3008: FWVersion (12.00.00.00), ChipRevision (0x02), BiosVersion (06.00.00.00)

Дисковые полки

Дисковые полки - это Lenovo ThinkServer SA120 с двумя контроллерами SAS, двумя источниками питания, подключенными с резервированием, с 2 путями к каждому диску.

Подключение дисковой полки

Дисковые полки подключаются с помощью кабелей SAS 0,5 метра и последовательно соединяются через полки с обратной связью к контроллеру на конце.

Информация о диске

48 дисков SAS по 2 ТБ Seagate, модель № ST2000NM0023 Конфигурация дисков настраивается с использованием многопутевого доступа, и каждый диск имеет резервные пути.

Резюме программного обеспечения

Операционная система / ядро

CentOS 7.3 Вывод из "uname -a" Linux 4.9.9-1.el7.elrepo.x86_64 # 1 SMP Чт 9 февраля 11:43:40 EST 2017 x86_64 x86_64 x86_64 GNU / Linux

Настройка ZFS

/etc/modprobe.d/zfs.conf в настоящее время является пустым файлом, я здесь особо не пробовал, производительность последовательной записи, похоже, должна увеличиваться с увеличением количества дисков.

В спецификации для LSI 9300-8e HBA указывается пропускная способность 12 Гб (гигабит) для подключенного хранилища. (https://docs.broadcom.com/docs/12353459Вы умножаете это число на пропускную способность ~ 9600 МБ / с. общая пропускная способность.

Есть ли общая настройка глубины очереди ввода-вывода для HBA (драйвера) в ОС, которая регулирует ваш ввод-вывод? Это все равно не объясняет, как пропускная способность сокращается вдвое так точно.

Ваши цифры имели бы большой смысл, если бы для соединения SAS работал только «один путь» или ссылка - есть ли какой-нибудь (странный) способ, которым могла бы работать только одна ссылка из восьми? Я не знаю, насколько широкие или узкие «порты» SAS (которые являются виртуальными, а не физическими объектами) настраиваются из «Phys», и если HBA не обращается к вашей дисковой полке, есть ли вариант резервной конфигурации, который может позволить это? ?

Ожидается дополнительная информация ...

Вы должны предоставить такие сведения, как:

  • Конкретная марка / модель / скорость / интерфейс дисков. (они САС? SATA?)
  • Используемый конкретный внешний корпус JBOD.
  • Как корпус подключен к серверу.

Кто знает? Возможно, у вас просто завышенная подписка на расширитель SAS корпуса, и вы не сможете масштабироваться за счет добавления шпинделей дисков.

Конечно, здесь тоже есть элемент настройки. Нам нужно увидеть, какие изменения вы внесли в свой /etc/modprobe.d/zfs.conf.

Если этот файл пуст, вы, вероятно, упускаете огромное количество настроек, доступных для вашей сборки ZFS.

Вы также можете объяснить, какая ОС используется? Распространение, ядро ​​и версия.


Просто следуй за моими Руководство Linux + ZFS HA.

Вы также захотите настроить свой zfs.conf:

Вот мой:

#options zfs zfs_arc_max=51540000000
options zfs zfs_vdev_scrub_min_active=24
options zfs zfs_vdev_scrub_max_active=64
options zfs zfs_vdev_sync_write_min_active=8
options zfs zfs_vdev_sync_write_max_active=32
options zfs zfs_vdev_sync_read_min_active=8
options zfs zfs_vdev_sync_read_max_active=32
options zfs zfs_vdev_async_read_min_active=8
options zfs zfs_vdev_async_read_max_active=32
options zfs zfs_top_maxinflight=320
options zfs zfs_txg_timeout=15
options zfs zfs_vdev_scheduler=deadline
options zfs zfs_prefetch_disable=0
options zfs l2arc_write_max=8388608
options zfs l2arc_headroom=12
options zfs zfs_dirty_data_max_percent=40
options zfs zfs_vdev_async_write_min_active=8
options zfs zfs_vdev_async_write_max_active=32
options zfs zfs_immediate_write_sz=131072
options zfs zil_slog_limit=536870912