Улучшение многопутевого SAS к производительности JBOD в Linux

10

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

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

  • Sun Blade X6270
  • 2 * LSISAS1068E SAS контроллеры
  • 2 * JBOD Sun J4400 с дисками 1 ТБ (24 диска на JBOD)
  • Fedora Core 12
  • 2.6.33 релиз ядра от FC13 (также пробовал с последним ядром 2.6.31 от FC12, те же результаты)

Вот таблица данных для оборудования SAS:

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

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

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

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

многолучевость {
  rr_min_io 100
  UID 0
  path_grouping_policy multibus
  руководство по восстановлению
  path_selector "Round-Robin 0"
  приоритеты
  псевдоним somealias
  no_path_retry queue
  режим 0644
  Гид 0
  WWID SomeWid
}

Я пробовал значения 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 дисков (по одному на каждый диск), назначая их ядрам, не имеющим отношения к прерываниям, например:

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

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

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

Cpu0: 0,0% сша, 1,0% sy, 0,0% ni, 91,2% id, 7,5% wa, 0,0% hi, 0,2% si, 0,0% st
Cpu1: 0,0% сша, 0,8% sy, 0,0% ni, 93,0% id, 0,2% wa, 0,0% hi, 6,0% si, 0,0% st
Cpu2: 0,0% сша, 0,6% sy, 0,0% ni, 94,4% id, 0,1% wa, 0,0% hi, 4,8% si, 0,0% st
Cpu3: 0,0% сша, 7,5% sy, 0,0% ni, 36,3% id, 56,1% wa, 0,0% hi, 0,0% si, 0,0% st
Cpu4: 0,0% сша, 1,3% sy, 0,0% ni, 85,7% id, 4,9% wa, 0,0% hi, 8,1% si, 0,0% st
Cpu5: 0,1% сша, 5,5% sy, 0,0% ni, 36,2% id, 58,3% wa, 0,0% hi, 0,0% si, 0,0% st
CPU6: 0,0% США, 5,0% sy, 0,0% ni, 36,3% id, 58,7% wa, 0,0% hi, 0,0% si, 0,0% st
Cpu7: 0,0% сша, 5,1% sy, 0,0% ni, 36,3% id, 58,5% wa, 0,0% hi, 0,0% si, 0,0% st
Cpu8: 0,1% сша, 8,3% sy, 0,0% ni, 27,2% id, 64,4% wa, 0,0% hi, 0,0% si, 0,0% st
Cpu9: 0,1% США, 7,9% sy, 0,0% ni, 36,2% id, 55,8% wa, 0,0% hi, 0,0% si, 0,0% st
Cpu10: 0,0% сша, 7,8% sy, 0,0% ni, 36,2% id, 56,0% wa, 0,0% hi, 0,0% si, 0,0% st
Cpu11: 0,0% сша, 7,3% sy, 0,0% ni, 36,3% id, 56,4% wa, 0,0% hi, 0,0% si, 0,0% st
Cpu12: 0,0% сша, 5,6% sy, 0,0% ni, 33,1% id, 61,2% wa, 0,0% hi, 0,0% si, 0,0% st
Cpu13: 0,1% сша, 5,3% sy, 0,0% ni, 36,1% id, 58,5% wa, 0,0% hi, 0,0% si, 0,0% st
Cpu14: 0,0% сша, 4,9% sy, 0,0% ni, 36,4% id, 58,7% wa, 0,0% hi, 0,0% si, 0,0% st
Cpu15: 0,1% США, 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+ МБ / с.

У кого-нибудь есть идеи, куда ушла моя пропускная способность?

Спасибо!


источник
Кэш-память контроллеров LSI SAS установлена ​​на сквозную запись? (Обратная запись будет медленнее для больших последовательных рабочих нагрузок). Может также захотеть проверить с меньшим bs для dd, например, bs = 1M.
Брайан

Ответы:

1

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

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

Chopper3
источник