Поліпшення багатошаровості SAS до продуктивності JBOD в Linux


10

Я намагаюся оптимізувати налаштування пам’яті для деяких апаратних засобів Sun із Linux. Будь-які думки були б дуже вдячні.

У нас є таке обладнання:

  • Sun Blade X6270
  • 2 * контролери SAS LSISAS1068E
  • 2 * Sun J4400 JBOD з 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 Gb / sec = 24 Gb / sec пропускної здатності, що більше, ніж пропускна здатність PCI Express.

Якщо ввімкнено кешування записів і при великому записі, кожен диск може підтримувати близько 80 Мб / с (біля старту диску). Завдяки 24 дискам, це означає, що ми маємо змогу робити 1920 МБ / сек на JBOD.

багатосторонній {
  rr_min_io 100
  uid 0
  path_grouping_policy multibus
  посібник з відмови
  path_selector "круглобільний 0"
  rr_weight пріоритети
  псевдонім somealias
  черга no_path_retry
  режим 0644
  gid 0
  wwid somewwid
}

Я спробував значення 50, 100, 1000 для rr_min_io, але, схоже, це не має великої різниці.

Поряд із різними rr_min_io, я спробував додати деяку затримку між запуском DD, щоб не допустити, щоб усі вони писали над тим самим PHY одночасно, але це не мало ніякої різниці, тому я думаю, що введення-виведення стає належним чином розповсюдженим.

Відповідно до / proc / переривань, контролери SAS використовують схему переривань "IR-IO-APIC-fasteoi". Чомусь тільки ядро ​​№ 0 в апараті обробляє ці переривання. Я можу трохи поліпшити продуктивність, призначивши окреме ядро ​​для обробки переривань для кожного контролера SAS:

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

Використання dd для запису на диск генерує "Переривання функціональних викликів" (не маю уявлення, що це таке), які обробляються ядром №4, тож я не затримую й інші процеси від цього ядра.

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

набір завдань -c somecore dd, якщо = / 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% привіт, 0,2% si, 0,0% st
Cpu1: 0,0% нас, 0,8% sy, 0,0% ni, 93,0% id, 0,2% wa, 0,0% привіт, 6,0% si, 0,0% st
Cpu2: 0,0% нас, 0,6% sy, 0,0% ni, 94,4% id, 0,1% wa, 0,0% привіт, 4,8% si, 0,0% st
Cpu3: 0,0% нас, 7,5% sy, 0,0% ni, 36,3% id, 56,1% wa, 0,0% привіт, 0,0% si, 0,0% st
Cpu4: 0,0% нас, 1,3% sy, 0,0% ni, 85,7% id, 4,9% wa, 0,0% привіт, 8,1% si, 0,0% st
Cpu5: 0,1% нас, 5,5% sy, 0,0% ni, 36,2% id, 58,3% wa, 0,0% привіт, 0,0% si, 0,0% st
Cpu6: 0,0% нас, 5,0% sy, 0,0% ni, 36,3% id, 58,7% wa, 0,0% привіт, 0,0% si, 0,0% st
Cpu7: 0,0% нас, 5,1% sy, 0,0% ni, 36,3% id, 58,5% wa, 0,0% привіт, 0,0% si, 0,0% st
Cpu8: 0,1% нас, 8,3% sy, 0,0% ni, 27,2% id, 64,4% wa, 0,0% привіт, 0,0% si, 0,0% st
Cpu9: 0,1% нас, 7,9% sy, 0,0% ni, 36,2% id, 55,8% wa, 0,0% привіт, 0,0% si, 0,0% st
Cpu10: 0,0% нас, 7,8% sy, 0,0% ni, 36,2% id, 56,0% wa, 0,0% привіт, 0,0% si, 0,0% st
Cpu11: 0,0% нас, 7,3% sy, 0,0% ni, 36,3% id, 56,4% wa, 0,0% привіт, 0,0% si, 0,0% st
Cpu12: 0,0% нас, 5,6% sy, 0,0% ni, 33,1% id, 61,2% wa, 0,0% привіт, 0,0% si, 0,0% st
Cpu13: 0,1% нас, 5,3% sy, 0,0% ni, 36,1% id, 58,5% wa, 0,0% привіт, 0,0% si, 0,0% st
Cpu14: 0,0% нас, 4,9% sy, 0,0% ni, 36,4% id, 58,7% wa, 0,0% привіт, 0,0% si, 0,0% st
Cpu15: 0,1% нас, 5,4% sy, 0,0% ni, 36,5% id, 58,1% wa, 0,0% привіт, 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% 'годуватися' весь час, так що ви трохи втратите там, те ж саме для кешу, дисків, неекранізованих переривань, планування IO тощо. В основному це незначна неефективність, незначна неефективність ... і так далі, це в кінцевому рахунку більше, ніж 5-10% очікуваних неефективностей самостійно. Я бачив подібне, коли сервери HP DL розмовляли зі своїми скриньками MSA SAS за допомогою W2K3, а потім були NLB ' Ед над декількома НІК - мабуть, неприємно, але зрозуміло. Це мій 2с все одно, вибачте, що це не надто позитивно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.