Beitrag
von Six » 27.02.2009 13:14:29
Die Hz Zahl hat nichts mit Multi-CPU-Setups zu tun! Die Verteilung der Last auf mehrere CPUs ordnet sich ind as Timer Interrupt System ein, aber das System macht viel mehr. Die Hz Zahl gibt die Frequenz des Timer Interrupts an, d.h. ganz konkret, wie groß die Time Slices sind, die im System für Prozesse zur Verfügung stehen. bei 1000Hz sind die Time Slices 1ms lang, bei 100Hz halt 10ms. Je feiner (also je höher die Frequenz) der Timer Interrupt läuft, umso bessere Latenzzeiten zeigt das System, es wird reaktionsfreudiger. Es gibt einen gewissen Overhead für Timer Interrupts, der natürlich mit der Anzahl der Interrupts anwächst. Nach Ansicht der Kernelentwickler wird dieser Overhead jedoch erst auf sehr langsamen Maschinen interessant, man spricht z. B. von 386ern und frühen 486ern (die ja bekanntlich mit 25MHz liefen). Jede CPU, die mindestens auf Pentium-Niveau liegt, ist schnell genug um den Overhead einfach wegzustecken. Hohe Frequenzen erzeugen jedoch andere Probleme. Je höher die Frequenz, um so schlechter kommen Power-Save Mechnismen zur Geltung. Wirklich brauchbare Ergebnisse erzielt man in diesem Bereich erst ab 100Hz, was aber im normalen Betrieb schon für Ogg/MP3 Playback zu wenig ist und lange Time Slices zur Folge hat. Die meisten Distributionen laufen daher standardmäßig mit 250-300 Hz und vertrauen auf Preemption.
Damit kommen wir zum zweiten Teil deiner Frage: Preemption Model. Nehmen wir an, dein Kernel läuft mit 500Hz, hat also Time Slices von 2ms. Jetzt braucht ein Prozeß 3ms CPU-Zeit, d. h. er verbraucht eine komplette Time Slice und eine halbe. Was machen wir mit der verbleibenden Millisekunde? Der Kernel springt in diese Lücke und weise die Rechenzeit anderweitig zu. Nun lassen sich auch die verschiedenen Preemption Modelle erklären. Die einfachste Art ist, der Kernel wartet einfach, bis ein Prozeß fertig ist und sich mit "Fertig, abputzen" meldet. Stürzt ein Prozeß ab oder braucht länger als geplant, so wird der Kernel also nie oder sehr spät eingreifen. Das kennt man noch von MS Windows 95/98/ME, wo die Maschine anscheinend nichts tuend rumsteht. Dann gibt es mehr oder weniger invasive Methoden, die mehr oder weniger alle so ablaufen: der Kernel guckt in regelmäßigen Abständen (wobei wir wieder bei der Frequenz sind), ob alles in Ordnung ist und stoppt mehr oder weniger rüde Prozesse, die noch nicht fertig sind, um sie dann später wieder anzuschmeißen. Das ist auch das, was wir unter Linux "preemptive" nennen. Hier kommen dann auch die Prioritäten eines Prozeßes ins Spiel, wie viel läßt man dem Prozeß durchgehen, darf er sich in der Warteschlange (dem Scheduler) vordrängeln usw. Bedenke, wir reden hier von Millisekunden, der User bekommt davon im Regelfall nichts mit.
Be seeing you!