Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Операциялық жүйелерде үзіліс даулы - процессордың уақытын көп бөлігін жалмап, үзілістердің шамадан тыс санын алатын оқиға. Тоқтату дауылдары, әдетте, тоқтам мөлшерін шектеуді қолдамайтын аппараттық құрылғылардан туындайды.
In operating systems, an interrupt storm is an event during which a processor receives an inordinate number of interrupts that consume the majority of the processor's time. Interrupt storms are typically caused by hardware devices that do not support interrupt rate limiting.
Өмірбаян
Тоқтату процессі, әдетте, уақыт бөлісу операциялық жүйелерде алдын ала болмайтын міндет болғандықтан, тоқтату даулымы пайдаланушының кірісіне баяу жауап береді немесе тіпті жүйені толығымен тоқтатады. Бұл жағдай әдетте "тірі тұйықтау" деп аталады. Мұндай жағдайда жүйе өз ресурстарының көп бөлігін басқа жұмыстарды орындаудың орнына үзілістерді өңдеуге жұмсайды. Соңғы пайдаланушы үшін ол еш нәрсені өңдемейді, өйткені еш уақытта шығыс болмайды. Тоқтату дауылдары кейде ұрып-соғумен шатастырылады, өйткені екеуінде де ұқсас белгілер бар (пайдаланушының кірісіне жауап бермейді немесе баяу жауап береді, шығысы аз немесе мүлдем жоқ). Ортақ себептерге: дұрыс конфигурацияланбаған немесе ақаулы аппараттық жабдық, ақаулы құрылғы драйверлері, операциялық жүйедегі ақаулар немесе бір немесе бірнеше компоненттердің метастабильділігі жатады. Соңғы жағдай прототиптен немесе әуесқойлар құрастырған аппараттан тыс сирек кездеседі. Қазіргі заманғы аппараттық және операциялық жүйелердің көпшілігінде тосқауыл дауылдың әсерін азайту әдістері бар. Мысалы, Ethernet контроллерлерінің көпшілігі үзілісті "ауысымды шектеуді" іске асырады, бұл контроллерді әрбір ол шығарған үзілістің арасында бағдарламаланатын уақыт күтуге мәжбүр етеді. Құрылғыда болмаған кезде, ұқсас функционалдық әдетте құрылғы драйверіне және/немесе операциялық жүйенің өзіне жазылады. Ең көп таралған себеп - басқа құрылғының "артында" APIC (Advanced Programmable Interrupt Controller) құрылғысына үзіліс сигналы жібергенде. Көптеген компьютерлік шеттік құрылғылар үзілістерді APIC арқылы жасайды, өйткені үзілістер саны әрқашан құрылғылар санына қарағанда аз (әдетте заманауи ПК үшін 15). ОЖ кейін осы үзіліске тіркелген әрбір драйверді оның аппараттық жасақтамасынан басталған-ақ сұрауы керек. Қателік драйверлер әрқашан "иә" деп мәлімдей алады, бұл ОЖ-ның осы үзіліске тіркелген басқа драйверлерге сұрау салуға мүмкіндік бермейді (бір уақытта тек бір үзілісті өңдеуге болады). Сондықтан үзілісті бастапқыда сұраған құрылғы үзіліске қызмет көрсетпейді, сондықтан жаңа үзіліс пайда болады (немесе тазартылмайды) және процессор үзіліс сигналдарымен үнемі суға батып кетеді. Кез келген операциялық жүйе осындай ақаулықтан туындаған үзіліс дауыл кезінде өмір сүре алады. Ядроның жөндеушісі, әдетте, ақаулы драйверді жүктемелеу арқылы дауылды бұза алады, егер пайдаланушының кірісі әлі де мүмкін болса, ақаулы драйвердің "төменінде" үзілісті жоюға мүмкіндік береді. Бұл FreeBSD-дің ескі нұсқасында болды, онда ISA үйлесімділік режимінде жұмыс істеуге конфигурацияланған PCI карталары ISA үзілісі маршруттауымен дұрыс әрекеттесе алмады. Бұл операциялық жүйенің үзілістерді ешқашан байқай алмауына немесе операциялық жүйенің оларды ешқашан тазарта алмайтынына әкеледі, нәтижесінде үзіліс даулымы пайда болады. Драйверлерді көбінесе үшінші тарап іске асыратындықтан, көптеген операциялық жүйелерде белгіленген аралықтарда немесе дөңгелек робиндік түрде күтіп тұрған үзілістерді сұрайтын сауалнама режимі бар. Бұл режимді бүкіл әлем бойынша, әрбір драйверге, үзіліс негізінде немесе операциялық жүйе ақаулық жағдайын немесе шамадан тыс үзіліс пайда болуын анықтаса, динамикалық түрде орнатуға болады. Сауалнама режимі үзілістер саны немесе үзілістен туындаған ресурстарды пайдалану белгілі бір шектерден асып кеткен кезде динамикалық түрде іске қосылуы мүмкін. Осы шектер бұдан былай асып кетпегенде, ОЖ бұзылған драйверді, бұзылған немесе бұзылған басқаруды бұзылған режимнен дауыс беру режиміне ауыстыра алады. Жабдықта үзіліс жылдамдығын шектеу, әдетте, дауыс беру режимін пайдалануды жоққа шығарады, бірақ егер процессор үзіліс жылдамдығын ұстап тұру үшін тез алмаса, қарқынды I / O кезінде қалыпты жұмыс кезінде болуы мүмкін.
Because interrupt processing is typically a non preemptible task in time sharing operating systems, an interrupt storm will cause sluggish response to user input, or even appear to freeze the system completely. This state is commonly known as live lock. In such a state, the system is spending most of its resources processing interrupts instead of completing other work. To the end user, it does not appear to be processing anything at all as there is often no output. An interrupt storm is sometimes mistaken for thrashing, since they both have similar symptoms (unresponsive or sluggish response to user input, little or no output). Common causes include: misconfigured or faulty hardware, faulty device drivers, flaws in the operating system, or metastability in one or more components. The latter condition rarely occurs outside of prototype or amateur built hardware. Most modern hardware and operating systems have methods for mitigating the effect of an interrupt storm. For example, most Ethernet controllers implement interrupt "rate limiting", which causes the controller to wait a programmable amount of time between each interrupt it generates. When not present within the device, similar functionality is usually written into the device driver, and/or the operating system itself. The most common cause is when a device "behind" another signals an interrupt to an APIC (Advanced Programmable Interrupt Controller). Most computer peripherals generate interrupts through an APIC as the number of interrupts is most always less (typically 15 for the modern PC) than the number of devices. The OS must then query each driver registered to that interrupt to ask if the interrupt originated from its hardware. Faulty drivers may always claim "yes", causing the OS to not query other drivers registered to that interrupt (only one interrupt can be processed at a time). The device which originally requested the interrupt therefore does not get its interrupt serviced, so a new interrupt is generated (or is not cleared) and the processor becomes swamped with continuous interrupt signals. Any operating system can live lock under an interrupt storm caused by such a fault. A kernel debugger can usually break the storm by unloading the faulty driver, allowing the driver "underneath" the faulty one to clear the interrupt, if user input is still possible. This occurred in an older version of FreeBSD, where PCI cards that were configured to operate in ISA compatibility mode could not properly interact with the ISA interrupt routing. This would either cause interrupts to never be detected by the operating system, or the operating system would never be able to clear them, resulting in an interrupt storm. As drivers are most often implemented by a 3rd party, most operating systems also have a polling mode that queries for pending interrupts at fixed intervals or in a round robin fashion. This mode can be set globally, on a per driver, per interrupt basis, or dynamically if the OS detects a fault condition or excessive interrupt generation. A polling mode may be enabled dynamically when the number of interrupts or the resource use caused by an interrupt, passes certain thresholds. When these thresholds are no longer exceeded, an OS may then change the interrupting driver, interrupt, or interrupt handling globally, from an interrupt mode to a polling mode. Interrupt rate limiting in hardware usually negates the use of a polling mode, but can still happen during normal operation during intense I/O if the processor is unable switch contexts quickly enough to keep pace.
Тарих
Мүмкін, бірінші бұрғылау дауыл 1969 жылы Аполлон 11 айға қонған кезде болған.
Perhaps the first interrupt storm occurred during the Apollo 11's lunar descent in 1969.
Қарастырылатын мәселелер
Тоқтату жылдамдығын шектеу оптималды нәтижелер үшін мұқият конфигурациялануы керек. Мысалы, үзіліс жылдамдығын шектейтін Ethernet контроллері әр үзілістің арасында желіден алатын пакеттерді буферлейді. Егер жылдамдық тым төмен болса, контроллер буфері толып, пакеттер құлайды. Бұл жылдамдықта үзілістер арасында буфердің қаншалықты тез толтырылатынын және үзілістің үзілу мен буферді жүйеге беру арасындағы үзілістің күту уақытын ескеру керек.
Interrupt rate limiting must be carefully configured for optimum results. For example, an Ethernet controller with interrupt rate limiting will buffer the packets it receives from the network in between each interrupt. If the rate is set too low, the controller's buffer will overflow, and packets will be dropped. The rate must take into account how fast the buffer may fill between interrupts, and the interrupt latency between the interrupt and the transfer of the buffer to the system.
Тоқтатуды азайту
Мәселеге аппараттық және бағдарламалық негізделген тәсілдер бар. Мысалы, FreeBSD үзілістер дауылдарын байқайды және жауап ретінде проблемалық үзілістерді біраз уақыт жасырады. NAPI қолданған жүйе аппараттық негіздегі тәсілдің үлгісі болып табылады: жүйе (дирижер) үзіліске қосылған күйде басталады, содан кейін үзілісті басқарушы үзілісті өшіреді және оқиғаларды басқаруға мүмкіндік береді. Жабдықтық қолдауды пайдаланатын тағы бір қызықты тәсіл - бұл құрылғы оқиға кезегінің күйі "бос" -тан "бос емес" -ке ауысқанда үзіліс тудыратын тәсіл. Содан кейін, егер RX FIFO құйрығында бос DMA дескрипторлары болмаса, құрылғы оқиғаны тастайды. Одан кейін оқиға құйрыққа қосылады және FIFO жазуы бос деп белгіленеді. Егер сол нүктеде кіру (құйрық -1) бос болса (ашық болса), үзіліс пайда болады (деңгей үзілісі) және құйрық көрсеткіші өсіріледі. Егер аппараттық жабдық үзілісті тануды талап етсе, CPU (үзілісті өңдеуші) мұны жасайды, DMA-ның жарамды дескрипторларын басқарады және үзілістен қайтарады.
There are hardware based and software based approaches to the problem. For example, FreeBSD detects interrupt storms and masks problematic interrupts for some time in response. The system used by NAPI is an example of the hardware based approach: the system (driver) starts in interrupt enabled state, and the Interrupt handler then disables the interrupt and lets a thread/task handle the event(s) and then task polls the device, processing some number of events and enabling the interrupt. Another interesting approach using hardware support is one where the device generates interrupt when the event queue state changes from "empty" to "not empty". Then, if there are no free DMA descriptors at the RX FIFO tail, the device drops the event. The event is then added to the tail and the FIFO entry is marked as occupied. If at that point entry (tail−1) is free (cleared), an interrupt will be generated (level interrupt) and the tail pointer will be incremented. If the hardware requires the interrupt be acknowledged, the CPU (interrupt handler) will do that, handle the valid DMA descriptors at the head, and return from the interrupt.