Автор Тема: Как да балансираме прекъсванията?  (Прочетена 2139 пъти)

neko

  • Напреднали
  • *****
  • Публикации: 21
    • Профил
Здравейте,
имам следната дилема, имам двупроцесорна машина с 2 хипертрейднати Xeon-а които системата разпознава като 4-ри. И не мога да направя така че всяко прекъсване (irq) да бъде обслужвано равномерно от всеки един процесор, а не само единия?

Цитат
cat /proc/interrupts

           CPU0       CPU1       CPU2       CPU3
  0:        123          0          0    1033223    IO-APIC-edge  timer
  1:          0          0          0          2    IO-APIC-edge  keyboard
  8:          0          0          0          1    IO-APIC-edge  rtc
  9:          0          0          0          0   IO-APIC-level  acpi
 14:          1          0          0          4    IO-APIC-edge  ide0
 18:          0          0          0       4118   IO-APIC-level  megaide
 20:          0          0          0       3663   IO-APIC-level  eth0
NMI:          0          0          0          0
LOC:    1033192    1033193    1033194    1033193
ERR:          0
MIS:          0



Питал съм доста пъти "чичо Гошо" (google) но не можах да се справя със задачата си. Използвам Slackware 10.2 kernel 2.4.32. Ще съм ви благодарен ако помогнете с някой линк или конкретни упътвания.

ПС: предполагам че това което съм го дал като инфо може и да не е достатъчно, но незнам какво още може да е полезно като информация за това питайте при нужда ще дам нещо по подробно.
Активен

Peace Brothers!!!

the_real_maniac

  • Напреднали
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
Как да балансираме прекъсванията?
« Отговор #1 -: May 10, 2006, 00:35 »
Не те разбрах.

- Сега само единият процесор обслужва прекъсванята ?
или

- само единият процесор обслужва равномерно прекъсванята , а другият по приоритети , които на теб не ти харесват

===

и в двата случея това е SMP , единият от двата поема задачата , а не и двата , така че не виждам проблема нещо :?

Но още от горе си личи  ,че нещо не те разбирам напълно.

Какво точно става сега и какво искаш точно да постигнеш , дай го с повечко думи.

едит: темата ти е за секция напреднали и няма проблем - ще я преместя, но не мога да преценя все още , тъй като не те разбирам напълно за какво иде реч.

Софтуерен проблем или опит за подобряване работата на системата / бързодействие.

Така че ще караме по темата, пък после ще я преместя, просто исках да изясня и това :-)



Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)

neko

  • Напреднали
  • *****
  • Публикации: 21
    • Профил
Как да балансираме прекъсванията?
« Отговор #2 -: May 10, 2006, 00:41 »
Проблемат е че само единият процесор обслужва прекъсванията, а аз искам всичките да ми го обслужват дадено прекъсване. Това го бях направил на една единствена машина но не разбрах как точно тръгна.

Единственото което мога да кажа е че като променя стойноста в /proc/irq/<irq number>/smp_affinity от ffffffff на 0000000f и заработи, но това тръгна само на една машина. На другите не мога да го подкарам.
Активен

Peace Brothers!!!

the_real_maniac

  • Напреднали
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
Как да балансираме прекъсванията?
« Отговор #3 -: May 11, 2006, 03:41 »
По решението на проблема:

Интересно ми е как разбираш кой процесор ти е поел пръкъсването и следиш дали все той ги поема.

По проблема изобщо:

Бях написал една страница и нещо разсъждения прекъсванята , процесорите и т.н., но накратко:

При положение , че ползват споделено паметта и се изчакват за достъп и т.н , и т.н Мислиш ли че няма да стане по-лошо.
Процесор 1 обработва по-приоритетно прекъсване , процесор 2 по-слабо, но точно в този момент П1 смята , а П2 достъпва паметта , П1 свършва сметките , обаче П2 още достъпва паметта.

И това е само един от случеите и то много общо описано.

Все пак прекъсването си е прекъсване, то си иска внимание и ще го получи , въпросът е в повечето случеи вреда или ползва ще нанесе това разпределяне поемането на прекъсванята.

Значи аз размишлявах доста повече, отколкто съм писал тук по въпроса, та ... на теория в ситуации с повече мрежов трафик (или прекъсваня от един характер) има логика да е по-добре така както ти искаш, но при едно по-общо ползване ...

Всъщност не знам дали горното въобще те интересува и дали въобще ще можеш и ти да дадеш някаква информация или гледна точка ... , но се надявам интереса ти към 'проблема ти' да е по-задълбочен :-) Т.е да не е просто "някои казал , че така е по-добре и дай да видим как да го правим и нии" :-)

Т.е надявам се да се получи комуникация по въпроса, защото мисля е интересен.
Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)

neko

  • Напреднали
  • *****
  • Публикации: 21
    • Профил
Как да балансираме прекъсванията?
« Отговор #4 -: May 11, 2006, 09:29 »
Цитат (the_real_maniac @ Май 11 2006,03:41)
Значи аз размишлявах доста повече, отколкто съм писал тук по въпроса, та ... на теория в ситуации с повече мрежов трафик (или прекъсваня от един характер) има логика да е по-добре така както ти искаш, но при едно по-общо ползване ...

Та да дам още малко разяснение.

Тази машина ще играе ролята на shaper, който ще пресмята сумарно около 100Mbit трафик през два мрежови интерфейса (входящ и изходящ), та желанието ми е прекъсванията за тези два NIC да се обслужват от всичките процесори. Естествено казвайки всичко ми е ясно че обслужването на дадено прекъсване става последователно от всеки процесор. Но постигайки това се получава едно равномерно натоварване не CPU-тата и машината като цяло се държи по стабилно.

Ето този линк  мисля че ще внесе малко яснота по питането ми.



Активен

Peace Brothers!!!

the_real_maniac

  • Напреднали
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
Как да балансираме прекъсванията?
« Отговор #5 -: May 11, 2006, 11:27 »
Не съм си гледал скоро пощата , та ако не си питал , питай в пощенският списък на lug-bg -> linux-bulgaria.org -> листа

Мда ... идеята е ясна ;-) Успех !



Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)

  • Гост
Как да балансираме прекъсванията?
« Отговор #6 -: 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

  • Напреднали
  • *****
  • Публикации: 21
    • Профил
Как да балансираме прекъсванията?
« Отговор #7 -: May 25, 2006, 17:40 »
@gat3way реших да последвам съвета ти, но за съжаление само едното CPU натоварва и идва момент в който почва да дропи яко, но не и да се балансира натоварването между отделните процесори.

ПС: с кернел 2.6.16.18 съм.

Ако някой може да помогне да реша проблема си ще черпа каса бира.  '<img'>
Активен

Peace Brothers!!!