PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kompilieren: Nur 1 Kern ausgelastet?



Shutdown
09.06.07, 12:33
Ich habe gerade eben auf meinem neuen Dualcoresystem einen neuen Kernel übersetzt und mittels einem "watch -n 1 cat /proc/cpuinfo" festgestellt, dass die beiden Kerne scheinbar abwechselnd ausgelastet sind - einmal ist der erste auf 2000 MHz getaktet, der andere auf 800 MHz und kurz darauf umgekehrt - beide zusammen sind nie auf 2000 MHz.
Meine Vermutung: Mein gcc ist auf Singlecore eingestellt und nutzt immer nur einen Kern.

Unter Gentoo gibt es die /etc/make.conf wo man einfach ein -j3 als MAKEOPTS angeben würde, allerdings nutze ich Debian Lenny/Sid und würde auch gerne dabei bleiben - gibt es hier etwas vergleichbares bzw was kann ich tun damit der gcc beide Kerne gleichzeitig nutzt??

Shutdown

PS: Der laufende Kernel war bereits ein SMP-Kernel und /proc/cpuinfo hat auch beide Kerne gelistet, an fehlendem SMP-Support liegt es also definitiv nicht!

towo2099
09.06.07, 12:36
Guck mal in /etc/kernel-pkg.conf und trage da
CONCURRENCY_LEVEL := 4 ein, dann benutzt make 4 Threads.

suck
09.06.07, 12:38
Und wenn du einfach "make -j4" statt "make" eingibst, um den Kernel zu bauen? Schon probiert?

Shutdown
09.06.07, 13:12
Guck mal in /etc/kernel-pkg.conf und trage da
CONCURRENCY_LEVEL := 4 ein, dann benutzt make 4 Threads.

Ändert rein garnichts an der Sache...


Und wenn du einfach "make -j4" statt "make" eingibst, um den Kernel zu bauen? Schon probiert?

Funktioniert! :D

Aber eine Frage hätte ich da noch: Warum -j4 und nicht -j3 nutzen? Ich dachte die Faustregel wäre -j<Anzahl CPUs/Kerne + 1>, also bei 2 Kernen -j3 ?

Shutdown

towo2099
09.06.07, 13:15
Du baust dann Deinen Kernel nicht auf Debian-Art, wenn die Änderung bei Dir nicht greift.

Shutdown
09.06.07, 14:19
Ich baue mir immer Vanilla Kernel von kernel.org, die Debian-Sourcen habe ich noch nie verwendet...wenn das nur für die Debiankernel ist wundert es mich auch nicht ;)
Trotzdem danke für den Tipp an euch beide!

Bleibt nur noch die Frage warum -j4 anstatt -j3 ;)

Shutdown

towo2099
09.06.07, 14:24
Es geht nicht darum, welche Sourcen Du benutzt, sondern wie Du diese kompilierst.
Unter Debian benutzt man dazu eben nicht make, da hierbei keine debs entstehen, da benutzt man make-kpg.

marcdevil
09.06.07, 18:28
Es geht nicht darum, welche Sourcen Du benutzt, sondern wie Du diese kompilierst.
Unter Debian benutzt man dazu eben nicht make, da hierbei keine debs entstehen, da benutzt man make-kpg.
schon mal probiert?
bei mir klappt das ohne probleme!
make -j 8 && make-kpg

Bleibt nur noch die Frage warum -j4 anstatt -j3
bei -j kannst du 2, 3, 4 oder noch mehr eintragen. relativ egal, wenn du genug ram hast. bei 2 hast du eventuell nicht ganz 100% CPU-Last, bei zu vielen concurrenct gcc Prozessen könnte dein Ram knapp werden und die Festplatte etwas ins schwitzen kommen, aber das passiert erst im hohen 2-stelligen Bereich :)
Bei Dualcore gehts mit mehr als -j4 nicht schneller.

Shutdown
10.06.07, 02:06
make-kpg hab ich noch nie benutzt, wofür soll das gut sein? Ich brauche von meinem Kernel kein .deb, da der eh nur für mein System gemacht ist - ich kopieren das Image einfach nach /boot/..., mache einen Symlink darauf für meinen GRUB und fertig :o

Und danke für die Infos :D

Shutdown

DerMagerquark
15.06.07, 14:32
Auf einem CoreDuo mit 512MB Speicher hatte ich sogar noch bis -j6 Performancezuwachs feststellen können. Must einfach mal ein paar Testreihen machen.

Shutdown
15.06.07, 15:20
Interessanter Tipp - die Kiste hier ist ein Core2 Duo T7300 mit 2 GHz, 4 MB L2 Cache und 2 GB RAM - um die CPU(s) voll auszulasten brauche ich min. -j6 oder -j8 beim Kernelkompilieren und der Speicher ist auch nur ansatzweise ausgelastet - ich werde mal ein paar Tests mit time machen :D

Shutdown

zander
17.06.07, 22:19
`make-kpkg` erstellt ein linux-image-Paket für den jeweiligen kernel, das sich dann bequem installieren/entfernen läßt; falls Du nur selten einen neuen Kernel installierst und/oder der manuelle Weg bequem genug ist, hat es keine weiteren Vorteile. Sind allerdings initrds im Spiel, sieht es schon etwas anders aus. Ein Manko ist, daß das Skript editiert werden muß, um CC/HOSTCC setzen zu können, standardmäßig werden diese Umgebungsvariablen nicht weitergegeben. Ansonsten funktioniert z.B. `CC=gcc-3.4 HOSTCC=gcc-3.4 CONCURRENCY_LEVEL=7 make-kpkg --initrd` aber wunderbar.