Титла: Как да балансираме прекъсванията? Публикувано от: neko в May 09, 2006, 21:39 Здравейте,
имам следната дилема, имам двупроцесорна машина с 2 хипертрейднати Xeon-а които системата разпознава като 4-ри. И не мога да направя така че всяко прекъсване (irq) да бъде обслужвано равномерно от всеки един процесор, а не само единия?
Питал съм доста пъти "чичо Гошо" (google) но не можах да се справя със задачата си. Използвам Slackware 10.2 kernel 2.4.32. Ще съм ви благодарен ако помогнете с някой линк или конкретни упътвания. ПС: предполагам че това което съм го дал като инфо може и да не е достатъчно, но незнам какво още може да е полезно като информация за това питайте при нужда ще дам нещо по подробно. Титла: Как да балансираме прекъсванията? Публикувано от: the_real_maniac в May 10, 2006, 00:35 Не те разбрах.
- Сега само единият процесор обслужва прекъсванята ? или - само единият процесор обслужва равномерно прекъсванята , а другият по приоритети , които на теб не ти харесват === и в двата случея това е SMP , единият от двата поема задачата , а не и двата , така че не виждам проблема нещо :? Но още от горе си личи ,че нещо не те разбирам напълно. Какво точно става сега и какво искаш точно да постигнеш , дай го с повечко думи. едит: темата ти е за секция напреднали и няма проблем - ще я преместя, но не мога да преценя все още , тъй като не те разбирам напълно за какво иде реч. Софтуерен проблем или опит за подобряване работата на системата / бързодействие. Така че ще караме по темата, пък после ще я преместя, просто исках да изясня и това :-) Титла: Как да балансираме прекъсванията? Публикувано от: neko в May 10, 2006, 00:41 Проблемат е че само единият процесор обслужва прекъсванията, а аз искам всичките да ми го обслужват дадено прекъсване. Това го бях направил на една единствена машина но не разбрах как точно тръгна.
Единственото което мога да кажа е че като променя стойноста в /proc/irq/<irq number>/smp_affinity от ffffffff на 0000000f и заработи, но това тръгна само на една машина. На другите не мога да го подкарам. Титла: Как да балансираме прекъсванията? Публикувано от: the_real_maniac в May 11, 2006, 03:41 По решението на проблема:
Интересно ми е как разбираш кой процесор ти е поел пръкъсването и следиш дали все той ги поема. По проблема изобщо: Бях написал една страница и нещо разсъждения прекъсванята , процесорите и т.н., но накратко: При положение , че ползват споделено паметта и се изчакват за достъп и т.н , и т.н Мислиш ли че няма да стане по-лошо. Процесор 1 обработва по-приоритетно прекъсване , процесор 2 по-слабо, но точно в този момент П1 смята , а П2 достъпва паметта , П1 свършва сметките , обаче П2 още достъпва паметта. И това е само един от случеите и то много общо описано. Все пак прекъсването си е прекъсване, то си иска внимание и ще го получи , въпросът е в повечето случеи вреда или ползва ще нанесе това разпределяне поемането на прекъсванята. Значи аз размишлявах доста повече, отколкто съм писал тук по въпроса, та ... на теория в ситуации с повече мрежов трафик (или прекъсваня от един характер) има логика да е по-добре така както ти искаш, но при едно по-общо ползване ... Всъщност не знам дали горното въобще те интересува и дали въобще ще можеш и ти да дадеш някаква информация или гледна точка ... , но се надявам интереса ти към 'проблема ти' да е по-задълбочен :-) Т.е да не е просто "някои казал , че така е по-добре и дай да видим как да го правим и нии" :-) Т.е надявам се да се получи комуникация по въпроса, защото мисля е интересен. Титла: Как да балансираме прекъсванията? Публикувано от: neko в May 11, 2006, 09:29
Та да дам още малко разяснение. Тази машина ще играе ролята на shaper, който ще пресмята сумарно около 100Mbit трафик през два мрежови интерфейса (входящ и изходящ), та желанието ми е прекъсванията за тези два NIC да се обслужват от всичките процесори. Естествено казвайки всичко ми е ясно че обслужването на дадено прекъсване става последователно от всеки процесор. Но постигайки това се получава едно равномерно натоварване не CPU-тата и машината като цяло се държи по стабилно. Ето този линк мисля че ще внесе малко яснота по питането ми. Титла: Как да балансираме прекъсванията? Публикувано от: the_real_maniac в May 11, 2006, 11:27 Не съм си гледал скоро пощата , та ако не си питал , питай в пощенският списък на lug-bg -> linux-bulgaria.org -> листа
Мда ... идеята е ясна ;-) Успех ! Титла: Как да балансираме прекъсванията? Публикувано от: в May 11, 2006, 12:11 С коя версия на ядрото си?
При по-новите 2.6 ядра има hyperthreading scheduler (CONFIG_SCHED_SMT), където би следвало да се прави лоуд-балансинг на irq-тата по отделните цпу-та. И все пак, според мен балансирането на irq-тата по различни процесори не е най-добрата идея. Така до голяма степен ще губиш от предимството, което ти дава процесорния кеш при което не се знае в крайна сметка дали ще имаш подобрение в скоростта или обратното. В твоят случай мисля че е по-разумно да дедикейт-неш прекъсванията, генерирани от двете мрежови карти на два отделни "процесора". Това става лесно: първо викаш lspci, за да видиш irq-тата, да речем че са 25 и 26. След което: echo 03 > /proc/irq/25/smp_affinity echo 04 > /proc/irq/26/smp_affinity Така прекъсванията от единия интерфейс ще се обработват само от третия "процесор", от другия - само на четвъртия "процесор". Мисля дори че е по-добре при xeon-и да ги bind-неш на втория и четвъртия (или първия/третия), за да не се бият данните за една и съща шина към процесора. Иначе, да, можеш да си играеш със smp affinity и IO-APIC-и, обаче предимството от кеширането до голяма степен ще ти се губи...Освен което ако не е hyperthreading-aware (CONFIG_SCHED_SMT) не знам какво точно ще стане...вероятно всичко ще се изпълнява на CPU0, но нямам лични наблюдения. Абе при положение, че Интелските гейове се оливат да слагат кеш в процесорите си според мен е грехота да балансираш прекъсванията по различните ядра... Титла: Как да балансираме прекъсванията? Публикувано от: neko в May 25, 2006, 17:40 @gat3way реших да последвам съвета ти, но за съжаление само едното CPU натоварва и идва момент в който почва да дропи яко, но не и да се балансира натоварването между отделните процесори.
ПС: с кернел 2.6.16.18 съм. Ако някой може да помогне да реша проблема си ще черпа каса бира. ![]() |