On Saturday 08 September 2001 02:07, you wrote:
> Zdraveyte, LUG-BG
>
> Chetoh syobshteniata za 3-te mrejovi karti i osyznah, che imam podoben
> problem. Kompiutyryt mi v rabotata e compaq s niakakyv stranen bios, koito
> nastoichivo slaga IRQ-tata na mrejovata i videokartata da se prepokrivat
> kakvoto i da pravia, koeto vodi do syotvetnite dosadni zabaviania na
> ekrana, osobeno v X-Windows.
> Iskah da znam moje li ot Linux sa naglasia taka IRQ-tata, che da ne se
> pripokrivat? I kak, ako moje.
>
> Priaten den/nosht.
> ----
> Безплатна пощенска служба http://mail.Rambler.bg/
Всъщност забавянето не идва от това.
Видеоконтролерите са едни от малкото устройства които не
се нуждаят от прекъсване - с едно изключение евентуално -
когато се ползват 3D възможностите( не съм много сигурен, че дори
и тогава се използва ). Така ,че видео картите могат да си поделят
IRQ без никакво "performance penalty".
Защо всъщност поделянето на линия за прекъсване не е желателно?
Ами самото ядро - или "Interrupt scheduler"-a не може да знае чия подпрограма
за обработка на прекъсването трябва да извика при прекъсване по дадена линия.
Затова той си поддържа списък от регистрирани обработчици на дадено прекъсване
( за всяко едно прекъсване ). И съответно извиква последователно всеки от
регистрираните обработчици. Обработчика пък съответно трябва да установи
дали прекъсването е от устройството което той обслужва, което обикновено
става чрез четене на IO/регистри - което не е много бърза операция ( в
сравнение с операциите с паметта и регистрите на процесора.)
По тази точка принципно Win2K би трябвало да се справя по бързо защото
при него обработчика на прекъсване трябва да върне стойност която указва
дали е разпознал прекъсването като идващо от устройство за което е отговорен
или не, след което се прекратява разходката по списъка със обработчици за
съответната IRQ линия. Уви( А може би не :) за нас привържениците на OSOS )
практиката показва съвсем други резултати.
Но стига толкова, че се отклоних от темата.
Можеш лесно да провериш дали видеоконтролера ти ползва IRQ-то
като се опиташ да не предизвикваш трафик по мрежовата карта
и след извесно време си сравниш резултата от
cat /proc/interrupts зa съответното прекъсване с този изпълнен
в началото на експеримента.
При мен видеото също "дели" прекъсване - със USB контролера ( IRQ 9 )
и резултата в сл. ,че не съм печатал нищо е следния:
[root@wolfy release]# uptime
9:48pm up 9:55, 3 users, load average: 0.11, 0.06, 0.07
[root@wolfy release]# cat /proc/interrupts
CPU0
0: 3574312 XT-PIC timer
1: 27140 XT-PIC keyboard
2: 0 XT-PIC cascade
5: 689643 XT-PIC MS Sound System
8: 1 XT-PIC rtc
9: 0 XT-PIC usb-uhci
10: 1675 XT-PIC eth0
11: 30 XT-PIC i91u
12: 587088 XT-PIC PS/2 Mouse
14: 88364 XT-PIC ide0
15: 15 XT-PIC ide1
NMI: 0
ERR: 0
Иначе ако наистина имаш бъгав BIOS може да пробваш да си компилираш ядрото с
опциа CONFIG_PCI_COBIOS=Direct( това в частта General Setup ).
Обаче това не гарантира , че няма да имаш поделени IRQ-та.
Всъщност освен от PCI BIOS-a това как ще ти бъдат конфигурирани
прекъсванията на PCI устройствата зависи от самите устройства - кои INT линии
могат да използват - и от чипсет-а - или по точно от една част която
реализира маршрутизирането на прекъсванията ( PCI шината е независима от
процесора и е необходим платформено зависим механизъм който съпоставя
прекъсванията генерирани от PCI шината към наличните линии за прекъсване на
съответния процесорна архитектура ) - в частност контролера за прекъсване.
Ако IRQ Stearing-a не покрива всички възможни комбинации също е възможно
дори и да имаш свободно прекъсване , да имаш две или повече устройства което
поделят друго прекъсване. В този сл. можеш да пробваш да промениш слота на
който ти е мрежовата карта. Понякога помага.
===========================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers)
http://www.linux-bulgaria.org/ Hosted by Internet Group Ltd. - Stara Zagora