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

Повышение производительности SAS multipath to JBOD в Linux

Я пытаюсь оптимизировать настройку хранилища на некотором оборудовании Sun с Linux. Приветствуются любые мысли.

У нас есть следующее оборудование:

Вот техническое описание оборудования SAS:

http://www.sun.com/storage/storage_networking/hba/sas/PCIe.pdf

Он использует PCI Express 1.0a, 8 полос. С пропускной способностью 250 МБ / с на каждую полосу, мы должны иметь возможность делать 2000 МБ / с на контроллер SAS.

Каждый контроллер может работать со скоростью 3 Гбит / с на порт и имеет два 4-портовых PHY. Мы подключаем оба PHY от контроллера к JBOD. Таким образом, между JBOD и контроллером у нас есть 2 PHY * 4 порта SAS * 3 Гб / сек = 24 Гб / сек пропускной способности, что больше, чем пропускная способность PCI Express.

При включенном кэшировании записи и при выполнении больших операций записи каждый диск может поддерживать скорость около 80 МБ / с (около начала диска). С 24 дисками это означает, что мы должны иметь скорость 1920 МБ / с на каждый JBOD.

multipath {
  rr_min_io 100
  uid 0
  path_grouping_policy multibus
  failback manual
  path_selector "round-robin 0"
  rr_weight priorities
  alias somealias
  no_path_retry queue
  mode 0644
  gid 0
  wwid somewwid
}

Я пробовал значения 50, 100, 1000 для rr_min_io, но, похоже, это не имеет большого значения.

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

Согласно / proc / interrupts, контроллеры SAS используют схему прерывания IR-IO-APIC-fasteoi. По какой-то причине только ядро ​​№ 0 в машине обрабатывает эти прерывания. Я могу немного улучшить производительность, назначив отдельное ядро ​​для обработки прерываний для каждого контроллера SAS:

echo 2 > /proc/irq/24/smp_affinity
echo 4 > /proc/irq/26/smp_affinity

Использование dd для записи на диск генерирует «прерывания вызова функций» (не знаю, что это такое), которые обрабатываются ядром №4, поэтому я не использую и другие процессы в этом ядре.

Я запускаю 48 dd (по одному на каждый диск), назначаю их ядрам, которые не обрабатывают прерывания, например:

taskset -c somecore dd if=/dev/zero of=/dev/mapper/mpathx oflag=direct bs=128M

oflag = direct предотвращает использование буферного кеша любого типа.

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

Cpu0  :  0.0%us,  1.0%sy,  0.0%ni, 91.2%id,  7.5%wa,  0.0%hi,  0.2%si,  0.0%st
Cpu1  :  0.0%us,  0.8%sy,  0.0%ni, 93.0%id,  0.2%wa,  0.0%hi,  6.0%si,  0.0%st
Cpu2  :  0.0%us,  0.6%sy,  0.0%ni, 94.4%id,  0.1%wa,  0.0%hi,  4.8%si,  0.0%st
Cpu3  :  0.0%us,  7.5%sy,  0.0%ni, 36.3%id, 56.1%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  0.0%us,  1.3%sy,  0.0%ni, 85.7%id,  4.9%wa,  0.0%hi,  8.1%si,  0.0%st
Cpu5  :  0.1%us,  5.5%sy,  0.0%ni, 36.2%id, 58.3%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  0.0%us,  5.0%sy,  0.0%ni, 36.3%id, 58.7%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :  0.0%us,  5.1%sy,  0.0%ni, 36.3%id, 58.5%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu8  :  0.1%us,  8.3%sy,  0.0%ni, 27.2%id, 64.4%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu9  :  0.1%us,  7.9%sy,  0.0%ni, 36.2%id, 55.8%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu10 :  0.0%us,  7.8%sy,  0.0%ni, 36.2%id, 56.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu11 :  0.0%us,  7.3%sy,  0.0%ni, 36.3%id, 56.4%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu12 :  0.0%us,  5.6%sy,  0.0%ni, 33.1%id, 61.2%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu13 :  0.1%us,  5.3%sy,  0.0%ni, 36.1%id, 58.5%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu14 :  0.0%us,  4.9%sy,  0.0%ni, 36.4%id, 58.7%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu15 :  0.1%us,  5.4%sy,  0.0%ni, 36.5%id, 58.1%wa,  0.0%hi,  0.0%si,  0.0%st

Учитывая все это, пропускная способность, сообщаемая при запуске «dstat 10», находится в диапазоне 2200–2300 МБ / с.

Учитывая приведенную выше математику, я ожидал бы что-то в диапазоне 2 * 1920 ~ = 3600+ МБ / с.

Кто-нибудь знает, куда пропала моя недостающая пропускная способность?

Спасибо!

Хороший, хорошо подготовленный вопрос :)

Я сам спид-н-кормит и думаю, что вы в деньгах, если честно. Я наполовину ожидал увидеть вашу пропускную способность ниже, чем есть, но я думаю, что у вас есть нарастание незначительных и ожидаемых недостатков. Например, для шины PCIe очень сложно достичь 100% все время, лучше предположить, что общая скорость составляет 90%. Учитывая джиттер, это также будет означать, что PHY не будет постоянно `` питаться '' на 100%, поэтому вы теряете там немного, то же самое для кеша, дисков, прерываний без согласования, планирования ввода-вывода и т. Д. это незначительная неэффективность, умноженная на незначительную неэффективность ... и так далее, она сама по себе оказывается больше ожидаемой 5-10% неэффективности. Я видел такие вещи, когда серверы HP DL общались со своими MSA SAS-блоками, используя W2K3, а затем выполняли NLB на нескольких сетевых адаптерах - я думаю, это неприятно, но понятно. В любом случае это мой 2с, извините, он не слишком позитивный.