Титла: Interrupts Публикувано от: rers32e в Aug 12, 2006, 13:33 Здравейте ,
Имам продакшън рутер шейпещ към 300-400Мбита трафик и вечерно време забелязвам следния проблем: cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 0: 8819518 8711776 8817554 8757001 IO-APIC-edge timer 1: 149 154 140 121 IO-APIC-edge i8042 8: 1 0 0 0 IO-APIC-edge rtc 9: 0 0 0 0 IO-APIC-level acpi 14: 3 3 4 3 IO-APIC-edge ide0 17: 81386 80959 82569 81670 IO-APIC-level 3w-xxxx 18: 1242117631 1236081794 1227890464 1249202608 IO-APIC-level eth0 19: 1012144064 1015984715 1017899450 1006577983 IO-APIC-level eth1 20: 734133270 736519563 742605480 732676275 IO-APIC-level eth2 NMI: 0 0 0 0 LOC: 34787462 34787461 35108105 35108104 ERR: 0 MIS: 0 А именно - броя на прекъсвания започва да се начислява в/у LOC: ,а не върху IRQ18,19,20, което от своя страна води до използване само на единия процесор, което за мен е неоптимален вариант. Позвам ядро 2.6.17.7 с подръжка на SMP , е1000-7.2.7-NAPI с InterruptThrottleRate=40000 - прави впечатление , че въпреки него интерфейсите генерират към 50000-70000 прекъсвания. Минава ми през ума да прехвърля примерно единия интерфейс да използва CPU2 , докато другите 2 - CPU0 - това дали би имало някакъв ефек ? Какво всъщност ознавава LOC: в /proc/interrupts? Има ли някаква формула по която се изчислява максимума прекъсвания които могат да бъдат обработени от даден процесор? Мерси предварително Титла: Interrupts Публикувано от: VladSun в Aug 14, 2006, 01:28 По какво съдиш, че почва да се начислява само на ЛОК? Според мен няма начин да стане това. Пробва ли все пак да разхвърляш ЛАН-ките по различни процесори - файда има ли?
//офф Другото интересно нещо ми е малките стойности за иде0 - изобщо имаш ли ИДЕ хард? При мен нормална ситуация е:
Титла: Interrupts Публикувано от: teleport в Aug 14, 2006, 08:55
Intel PRO/1000 MT, драйвер 6.3.9-NAPI. Вечер стига до 350Mbit в посока, като в рутинг таблицата има около 2000 реда. Натоварването на процесора е от htb шейпъра. Резултатите с 2.6 кернел са значително по-лоши. Възможния максимум с PRO/1000 MT/GT на 32 битови pci слотове е около 450Mbit в посока или около 80000 пакета/сек. Над тези стойности дроповете на RX се увеличават драстично. Машина със същата цел, само че с 2 карти PRO/1000 на pci-express x1, 180000 реда в рутинг таблицата:
Титла: Interrupts Публикувано от: в Aug 14, 2006, 11:02 Значи има два варианта да се вдигне прекъсване - единият вариант е хардуерно (мрежова карта при получаване на пакет примерно) - х86 архитектурите си имат контролер на прекъсванията, който поема такива сигнали и ги предава към процесора(ите). Тези прекъсвания са ти от тип io-apic edge / io-apic level (разликата между двете е за електротехници
![]() Другия вариант е софтуерно прекъсване - такива се дефинират на ниво кърнъл и много прост пример за това ти е всеки един syscall. Тези се изобразяват в полето LOC: (това е брояч за този тип прекъсвания, отново за всеки процесор) Съдейки по твоите данни, прекъсванията се обработват равномерно по отделните процесори (има си IRQ load balancing btw). Ако имаш натоварени мрежови интерфейси, тогава както си предположил има файда от това да се дедикейт-ва хардуерно прекъсване на конкретен процесор. Така много по-добре се възползваш от L1 кеша, освен което, при фрагментация на пакетите ще се налага за всеки получен фрагмент от целия пакет да се върти известна информация от единия към другия процесор. Дедикейт-ването е лесно: echo <CPU#> > /proc/irq/<IRQ#>/smp_affinity Иначе нямам много ясна идея защо при по-големи натоварвания, броят на софтуерните прекъсвания скача толкова. Може би ако пейстнеш изхода на sar -a мога да ти кажа повече по въпроса. Имам предположение, че като се натовари мрежата се стига до някакъв момент, в който се лог-ва нещо свързано с трафика (нямам идея как стои въпроса при теб). Оттам вероятно идват тези syscalls. Титла: Interrupts Публикувано от: VladSun в Aug 14, 2006, 11:50
Малка поправка: параметъра, който ти си дал - CPU#, не е номер на процесора, а битова маска за това кои процесори да се ползват (при това в hex код). Ако трябва да се ползва само един процесор, то: CPU0 = 01 CPU1 = 02 CPU2 = 04 CPU3 = 08 Ако ще се ползват всички процесори - ff. Ако ще се ползва прим. CPU0 и CPU3, то 01+08 = 09 (а не 0А както отбелязва gat3way по-долу ![]() ПП: Задължително трябва да се махнат редовете от сорта на
Това при мен ми създаде 30 мин. чудене що аджеба не става smp_affinity. Титла: Interrupts Публикувано от: в Aug 14, 2006, 12:27 Всъщност да, в грешка съм бил, прав си. Само малко си объркал бинарната математика де
![]() 1001(bin - дигнати 1 и 4 бит) = 2^3+2^0=9(dec)=9(hex) т.е echo 9 > blabla Титла: Interrupts Публикувано от: VladSun в Aug 14, 2006, 14:00 /off
![]() ![]() Титла: Interrupts Публикувано от: vladou в Aug 16, 2006, 18:37 Дай малко повече информация за това, какви са ти мрежовите карти, които са монтирани в машината. Параметрите на драйвера RxDescriptors, TxDescriptors.
Аз лично не мисля, че ще имаш някакъв реално добър резултат ако използващ СМП_АФИНИТИ, поради простата причина, че имаш много добър IRQ load balance от чипсета. Използването на Л1 кеша е немислимо, за разлика от Л2, но при XEON-ите е малко по-различно, защото е кохерентен. Дай малко повече информация и за CPU load-a. Можеш да експериментираш и с пускане и спиране на Hyper Treading-a. Титла: Interrupts Публикувано от: в Aug 16, 2006, 20:46 Хм, виждам че се занимаваш доста с интел-ски хардуер, може ли да задам няколко въпроса?
- Как така се прави хардуерен irq loadbalancing? Смисъл interrupt controler-a на дъното си има логика дето ги пръска по всеки процесор...наистина ми е интересно, не съм хардуерист.. - Каква е връзката с хайпертрединг-а, смисъл този irq schedulling взима под предвид hyperthreading-a някак си карайки паралелно един процесор да обработва няколко прекъсвания (ако процесора не е многоядрен де, но това все пак е друг случай) Иначе за rx/tx descriptors мога да се обзаложа че са 64, освен ако не са пипани...но как може това да е вързано с увеличен брой soft interrupts при натоварвания, хммм.. Не се заяждам, наистина ми е много интересно, хардуерните работи за жалост не ги разбирам достатъчно, а бих искал да ги разбирам ![]() Титла: Interrupts Публикувано от: vladou в Aug 30, 2006, 15:13 Ами не е ли по-добре да го направим това на бира в Кривото всяка сряда. Малко ще ми е доста трудно да напиша всички аспекти на това.
А ако някои репи може и статия да поспретне по върпоса. Аз мога да помогна с тестов хардуер. |