[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Verteilung der CPU-Last auf die Cores



Hallo,

martin.henne@web.de:

>ich habe hier einen Athlon 64 X2 4600+ und nutze kernel 
>2.6.25-2-686 (SMP, 32bit).

>Wenn aber nun ein Core schon 100% ausgelastet ist (z. B.
>wenn ich eine Amiga-Emulation laufen habe und die soll
>so schnell laufen, wie möglich) dann würde ich gerne
>dem Rest des Systems klar machen, dass der andere 
>Core genutzt werden soll, denn das geschieht oft nicht.

Eigentlich sollte das automatisch geschehen. Wenn das nicht der
Fall ist, kann das mehrere Ursachen haben, z.B.

- Die Anwendung ist nicht paralellisierbar, da nicht mit mehreren
  Prozessen oder Threats gearbeitet wird
- Die Prozesse blockieren sich gegenseitig, z.B. beim Zugriff
  auf gemeinsame Ressourcen
- Nicht die CPU, sondern das I/O Subsystem ist der Flaschenhals

>So kommen meine Videos ins Stocken oder der Browser
>wird lahm, obwohl ein CPU-Core manchmal völlig unbeteiligt
>ohne Last nur so im System abhängt.

Ein einzelner Videoplayer kann i.d.R. nicht mehrere Cores nutzen,
da er ein sequenziell arbeitender Prozess ist. Wenn allerdings noch
andere unabhängige Prozesse laufen, sollte das Betriebssystem sie
schon auf den anderen Core verteilen.

Gerade beim Video-Abspielen ist aber oft gar nicht die CPU zu
langsam, sondern die Grafikkarte oder der Hauptspeicher.

>Das merkt man auch beim Überprüfen der Core-Temperaturen.
>Core0 hat laut 'sensors' immer ein paar Grad mehr als
>Core1. Die Last wird offenbar nicht gleichmaessig verteilt.

Die Temparatur ist kein direktes Maß für die Last. Es kann z.B.
auch sein, dass die eine Chip-Seite der CPU besser gekühlt wird,
oder die andere näher an einem Hitzeherd wie z.B. der Grafikkarte
sitzt.

>Weiss jemand, wie ich z. B. ein Programm dazu überreden 
>kann, Core1 zu verwenden (bzw. wie ich das System überrede,
>dem Programm Core1 'zuzuweisen')?

Das geht bei Linux meines Wissens nicht. Andere Systeme wie z.B.
Solaris können das. Der Nutzen ist m.E. allerdings fraglich, da
die Scheduling-Algorithem in Linux sehr ausgereift sind.

>Wie könnte ich z.B. mit wine CS zocken und sicherstellen, 
>dass mencoder für die Videoaufnahme von meiner TV-Karte
>den anderen CPU-Kern benutzt, damit nichts ruckelt
>nachher?

Wie gesagt, eigentlich brauchst du dich gar nicht darum zu kümmern,
da der Kernel das automatisch macht.

>Wie verteilt das System generell die Rechenzeit? 

Ab Linux 2.6.23 ist der Completely Fair Scheduler (CFS) der Standard
im Linux-Kernel. Hier wird zu jedem Prozess ein Wert mitgeführt, der
als Maß dafür angesehen werden kann, wie lange der Prozess bereits
auf einen Prozessor/Core/Hyperthread/... wartet. Der mit der höchsten
Wartezeit wird als nächster zugewiesen.

Ältere Scheduler führen eine Run-Queue, in der die Prozesse, die auf
Rechenzeit warten, immer weiter nach vorne rutschen. Im großen und
ganzen kommt das auf's gleiche raus, in einigen Spezialfällen gibt
es aber Unterschiede.

Prinzipiell werden die wartenden Prozesse der jeweils als nächstes
frei werdenden CPU/Core/.. zugeordnet. Bei wenigen laufenden Prozessen
bemüht sich der Kernel jedoch um eine gewisse Lokalität, um die
Anzahl der Kopieroperationen für Prozessorregister gering zu halten.
Das heisst, auf einem wenig belasteten System hat ein Prozess eine
höhere Wahrscheinlichkeit, auf dem selben Prozessor zu bleiben als
auf einen anderen zu wechseln.

Gruß, Harald


Reply to: