Går en egen kompilerad kärna mycket snabbare?

Frågor och diskussion kring Linuxkärnan med moduler.

Post Reply
RollerBoy
Posts: 33
Joined: 29 January 2005, 10:49
Location: Uppsala

Går en egen kompilerad kärna mycket snabbare?

Post by RollerBoy » 3 March 2007, 20:56

Fundera på att komilera en egen kärna och då banta den så mycket det går.
Vad kan man ta bort och vad gör stor skilldan i prestanda och
om man kommer märka stor skillnad mot stadard kärna kör ubuntu.
n00b men inte länge till...

User avatar
drbrno
Posts: 2834
Joined: 6 October 2002, 05:01
Location: Lund
Contact:

Post by drbrno » 3 March 2007, 23:19

Jag tycker att det kan vara en bra idé att kompilera en egen kärna, för då kan man lära sig en hel del om hur systemet fungerar. Men för de flesta användare i dag finns det inga stora praktiska fördelar med att göra det.

User avatar
iridium
Posts: 8
Joined: 28 February 2007, 22:45

Post by iridium » 4 March 2007, 11:51

Du kommer nog ha svårt att märka skillnaden, men lite snabbare blir det om du konfigurera rätt.

Linux är väldigt modulär så även om du kör Ubuntu default kärna som måste stödja nästan allt så kommer just ditt system bara ladda de moduler som du faktiskt använder. Så här blir inte vinsten så stor med en egen kärna (om man inte räknar vinsten i sparat HD utrymme).

Den vinst som du får kommer av att du kan bygga en kärna som kanske bara fungerar på system som har exakt samma CPU som du har. De finns massor med saker som specificera till GCC som påverkar prestanda, men 3 st är mer viktiga än andra

* Optimeringsnivå: sätts med -On flaggan där n är ett tal från 0 till 9. Det är bara 0, 1, 2, 3 som gör någon skillnad idag (tror att alla högre blir som om du sätter 3). O2 brukar vara bästa valet, har själv mätt prestanda en hel del på saker jag själv skrivit och O2 och O3 brukar vara nästan lika (skiljer en eller max ett par %), vilken som är snabbast varierar från fall till fall. O3 ger en mycket långsammare kompilering dock.
* Vilken CPU version man ska optimera för: sätts med -mtune=<cpu>. GCC kan lägga ut de individuella assembler-instruktionerna på ett sätt som är fördelaktigt för den specificerade CPU:n
* Vilka specialinstruktioner som kan användas : sätts med -march=<cpu>. GCC får använda assembler-instruktioner som är specifika för just den CPU:n, nackdelen är att det kanske inte ens går att köra på en annan CPU. -march=<cpu> sätter också -tune=<cpu> om inte -tune explicit sätts.

Har sätt en 25% förbättring i prestanda när jag byggt med "-O2 -march=athlon-xp" jämfört med bara "-O2" på en Athlon-XP. Det var nog ett väldigt gynnsamt fall dock.

Linux byggsystem kommer att sätta alla dessa parametrar så att de blir så bra som möjligt för just din CPU om du bygger kärnan själv och väljer just din CPU. Ubuntu (och andra distros) använder ofta bara "-O2 -mtune=i686" så det fungerar på alla CPU:er, men går snabbast på relativt nya CPU:er.

Post Reply