Я использую 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.
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
/etc/modprobe.d/zfs.conf в настоящее время является пустым файлом, я здесь особо не пробовал, производительность последовательной записи, похоже, должна увеличиваться с увеличением количества дисков.
В спецификации для LSI 9300-8e HBA указывается пропускная способность 12 Гб (гигабит) для подключенного хранилища. (https://docs.broadcom.com/docs/12353459Вы умножаете это число на пропускную способность ~ 9600 МБ / с. общая пропускная способность.
Есть ли общая настройка глубины очереди ввода-вывода для HBA (драйвера) в ОС, которая регулирует ваш ввод-вывод? Это все равно не объясняет, как пропускная способность сокращается вдвое так точно.
Ваши цифры имели бы большой смысл, если бы для соединения SAS работал только «один путь» или ссылка - есть ли какой-нибудь (странный) способ, которым могла бы работать только одна ссылка из восьми? Я не знаю, насколько широкие или узкие «порты» SAS (которые являются виртуальными, а не физическими объектами) настраиваются из «Phys», и если HBA не обращается к вашей дисковой полке, есть ли вариант резервной конфигурации, который может позволить это? ?
Ожидается дополнительная информация ...
Вы должны предоставить такие сведения, как:
Кто знает? Возможно, у вас просто завышенная подписка на расширитель 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