7.18. SMP, IRQs, Spin Locks, APICS

Das unter Linux 2.4 und 2.6 in jeder Distribution verfügbare Programm irqbalance sorgt bei SMP Maschinen dafür, daß die Zuständigkeiten für Hardware, z.B. Netzwerkkarten mit BUSMASTER - DMA sich auf mehrere CPUs aufteilen (siehe Kommandos "lspci" und "more /proc/pci") Diese Sorte von Netzwerkkarten lösen bei der ihnen zugeordneten CPU einen Interrupt aus, sobald Netzwerktraffic in den Puffer der Karte erscheint. Diejenige CPU, die den IP und TCP Stack - Code abarbeitet, erhält den Interrupt, und interpretiert daraufhin die Pakete. Bei mehreren Busmaster - fähigen Netzwerkkarten wird deren IRQ mehreren CPUs zugeordnet, welche dann parallel Pakete im TCP/IP Stack abarbeiten. Dies sorgt dafür, daß der Linux Rechner auch als Firewall SMP nutzt.

Jedem kritischen Bereich im Kernel ist ein spin lock zugeordnet. Betritt eine CPU einen kritischen Bereich des Codes im RAM, so wird ein Spin Lock (atomar) aktiviert. Ist der Lock von einem anderen Prozessor belegt, dann wartet die CPU solange in einer Warteschleife, bis der kritische Bereich von der anderen CPU verlassen, und der Lock deaktiviert wurde. Dies bedeutet zwar Verschwendung von Rechenzeit bei SMP Systemen, jedoch ist die Blockade meist so kurz, daß die Scheduler, die ja in jeder CPU sich befinden, und Rechenzeit für die ihnen übertragenen Threads verteilen, keine Zeit finden, andere Aufgaben auszuführen. Der oft erwähnte giant lock wirkte sich nur bis zum erscheinen von Kernel 2.4 besonders auf alle Arten von I/O aus, also Kernel - Threads, die z.B. sich um den TCP/IP Stack kümmern.

APICS (Advanced Programmable Interrupt Controller) kümmern sich um die Inter-Prozessor-Kommunikation. Jede CPU kann mit deren Hilfe bei einem anderen Prozessor einen Inter Processor Interrupt (IPI) auslösen, um z.B. Daten aus dem Shared Memory abholen zu lassen. Dies funktioniert problemlos bis 16 Prozessoren, siehe MPS 1.4. Darüber hinaus gibt es eine Erweiterung, die mit dem I/O APIC in der Host-Brigde kommuniziert. Damit können dann unter Kernel 2.6 bis zu 64 Prozessoren miteinander synchronisiert werden, mit dem neuen TULSA Chip auch bis zu 128 Prozessoren. 256-Bit breites RAM I/O mit Bandbreiten von bis zu 6.4 GByte je CPU sorgen dann für Dampf ...

Das unter Linux 2.4 und 2.6 in jeder Distribution (auch Workstation für 1 Prozessor - Lizenz) frei verfügbare Programm irqbalance sorgt bei SMP Maschinen dafür, daß Hardware, z.B. Netzwerkkarten mit BUSMASTER - DMA sich auf mehrere CPUs verteilen (siehe Kommandos "lspci" und "more /proc/pci") Diese Sorte von Netzwerkkarten lösen bei der ihnen zugeordneten CPU einen Interrupt aus, sobald Netzwerktraffic in den Puffer der Karte erscheint. Diejenige CPU, die den IP und TCP Stack - Code abarbeitet, erhält den Interrupt, und interpretiert daraufhin die Pakete. Bei mehreren Busmaster - fähigen Netzwerkkarten wird deren IRQ mehreren CPUs zugeordnet, welche dann parallel Pakete im TCP/IP Stack abarbeiten. Dies sorgt dafür, daß der Linux Rechner auch als Firewall SMP nutzt.