Я намагаюся оптимізувати налаштування пам’яті для деяких апаратних засобів 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+ МБ / сек.
Хтось має ідею, куди пішла моя пропускна здатність?
Дякую!