Novosti u kernel-2.6-cn paketu
Počevši od kernel-2.6-cn paketa u verziji 2.6.22.6-1, pojavila se dodatna sistemska ovisnost o irqbalance Debian paketu. Riječ je o korisničkom servisu koji brine o pravilnoj raspodjeli sistemskih prekida po procesorima. Naime, standardno Linux jezgra ne raspodjeljuje prekide po više procesora (bili oni fizički odvojeni procesori ili dualcore procesori), nego je za to zadužen CPU0 -- prvi procesor kojeg sustav prepozna... Tipično postoji naivno balansiranje u Linux jezgri (CONFIG_IRQBALANCE=y), koje može i ne mora biti omogućeno, međutim irqbalance nudi bitno bolje balansiranje te prepoznaje više tipova izvedbe procesora i shodno tome omogućava "pametnije" raspoređivanje. Vjerojatno se pitate kakve su to sve izvedbe procesora -- to su na primjer NUMA arhitekturu, SMT (npr. višejezgrene procesore), HT (HyperThreading procesore), itd. Tipično sustav bez balansiranja izgleda ovako:
posluzitelj1 $ cat /proc/interrupts CPU0 CPU1 0: 3742961528 0 IO-APIC-edge timer 1: 215 0 IO-APIC-edge i8042 8: 4 0 IO-APIC-edge rtc 9: 0 0 IO-APIC-level acpi 14: 61 0 IO-APIC-edge ide0 16: 0 0 IO-APIC-level uhci_hcd 17: 0 0 IO-APIC-level uhci_hcd 18: 0 0 IO-APIC-level libata, ehci_hcd 19: 148171414 0 IO-APIC-level eth0 21: 30 0 IO-APIC-level ioc0 22: 175952664 0 IO-APIC-level megaraid, ioc1 NMI: 3742961451 3742961338 LOC: 3743307940 3743307941 ERR: 0 MIS: 0
Možemo primijetiti da svi prekidi završavaju na procesoru CPU0, sto je npr. karakteristično za sustave bez balansiranja prekida -- bilo za one koji nemaju takvu mogućnost (HT-only procesori) ili oni koji nemaju tu podršku u kernelu odnosno irqbalance servis. Poslužitelj na kojem radi irqbalance imat će raspoređene prekide među procesorima, odnosno imat će bolje raspoređeno opterećenje i niže latencije obrade prekida (što je npr. korisno za mrežne kratice na opterećenijim poslužiteljima i vatrozidima). Jasno, nije samo dovoljno naivno rasporediti prekide po svim procesorima, irqbalance raspoređuje prekide u nekoliko kategorija... više o tome je moguće pročitati u dokumentaciji (http://irqbalance.org/documentation.php). Pokažimo kako to izgleda u praksi:
posluzitelj2 $ cat /proc/interrupts CPU0 CPU1 0: 144 1 IO-APIC-edge timer 1: 1 1 IO-APIC-edge i8042 4: 80 1193 IO-APIC-edge serial 8: 8 11 IO-APIC-edge rtc 9: 0 0 IO-APIC-fasteoi acpi 12: 2 2 IO-APIC-edge i8042 16: 310 116896 IO-APIC-fasteoi uhci_hcd:usb1, libata, eth0, nvidia 17: 40830 2324 IO-APIC-fasteoi uhci_hcd:usb5, ahci, libata, libata 18: 69 69804 IO-APIC-fasteoi uhci_hcd:usb2 19: 2 1 IO-APIC-fasteoi uhci_hcd:usb3, uhci_hcd:usb6, ehci_hcd:usb7 20: 0 0 IO-APIC-fasteoi uhci_hcd:usb4, ehci_hcd:usb8 21: 77063 110 IO-APIC-fasteoi HDA Intel NMI: 0 0 LOC: 539775 471482 ERR: 0 MIS: 0
- Logirajte se za dodavanje komentara
- Inačica za ispis
- PDF version