TIP: kompilere dine programmer fasters med flere processor maskiner
Hvis du har en dual core eller en multipel processor maskine, så kan du kompilere dine programmer meget hurtigere end på en enkelt processor maskine. Jeg vil vise, hvordan du kan sammensætte din en Linux-kerne på din Debian-maskine dobbelt så hurtigt ved at indstille concurrency-niveau.
For eksempel har vi i en af mine tidligere indlæg set hvordan man måle mængden af tid et bestemt program tager at udføre. I dette eksempel, så vi tog det omkring 10 minutter at udarbejde en tilpasset 2.6.28-kerne på en AMD64 Anthlon Dual core maskinen:
# time make-kpkg –append-to-version=-test kernel_image
real 10m58.707s
user 9m38.700s
sys 1m12.013s
Men i ovenstående eksempel, var jeg ikke effektivt ved hjælp af magt af begge processorer. Jeg gav simpelthen standard "make-kpkg" kommando til at kompilere kernen.
Lad os nu se, hvordan vi kan drage fordel af vores dual-core maskiner og gemme os nogle værdifulde tid.
# set CONCURRENCY_LEVEL=2
# export CONCURRENCY_LEVEL=2
# time make-kpkg –append-to-version=-test kernel_image
og her kommer den bedste del - resultaterne:
real 5m28.433s
user 4m18.320s
sys 1m13.276s
Som vi kan se fra ovenstående resultater, vi var i stand til at kompilere den samme kerne på samme maskine i halvdelen af tiden - cirka 5 minutter.
Hvordan finder vi ud af, hvad CONCURRENCY_LEVEL nummer?
Nogle mennesker siger, at du skal indstille niveauet til: Antallet af processorer på din maskine + 1, og nogle siger, at du skal indstille den til: Antallet af processorer i din maskine. Jeg personligt bruger senere.
For at finde ud af antallet af processorer i din maskine, skal du give følgende kommando:
# grep -c ^processor /proc/cpuinfo
2
og derefter kan du indstille concurrency niveau uanset er outputtet af ovenstående kommando. I mit tilfælde er det "2".
Nu hvad hvis du er bruger til at kompilere dine programmer / Linux kerne med den klassiske "gøre" kommando, og du ønsker at gøre brug af concurrency-niveau. I så fald kan du nemt bruge "-j" flaget som dette:
# make -j2 bzImage
Håber dette vil hjælpe dig med at spare tid.













8 maj 2009 kl 02:23
Eller anden grund, ved hjælp af make-kpkg betyder det ikke virker for mig. Den "grep-c ^ processor / proc / cpuinfo" giver 4 processorer, og top shows, 25% udnyttet, uanset om jeg har "eksport CONCURRENCY_LEVEL = 4". Ikke sikker på hvad jeg kunne gøre anderledes ...
Svar på denne kommentar
8 maj 2009 kl 06:32
Pyt, jeg regnede det ud. Jeg var sudoing og jeg havde brug for sudo-s, således at eksporten var i kraft for root-brugeren.
Svar på denne kommentar
24 Jan 2010 kl 12:23
Tak for tippet! Dette er store information. Imidlertid har CONCURRENCY_LEVEL env var ikke for mig. Kun-j skifte at gøre gjort en forskel. Jeg kørte både som "root" brugeren.
Svar på denne kommentar
Admin Reply:
16 februar 2010 kl 8:00
Den CONCURRENCY_LEVEL = 2 skulle have gjort forskellen. Det er den samme som ved hjælp af "-j2". Vidste du timed din kompilering? Hvilken distribution bruger du? Jeg tror, det er kun understøttet i Debian / Ubuntu. For ikke Debian-baseret distributioner kan du bruge "j" flaget ...
Svar på denne kommentar
20 juli 2010 kl 02:42
Hvorfor er du folk kører en compiler som root? * Suk *
Svar på denne kommentar
Sodo Svar:
21 juli 2010 kl 05:37
God pointe. Jeg er ikke den mest erfarne C programmør og havde fået en ny samling af kildekode hjælp GIT. Dette var første gang jeg brugte GIT og bemærket filerne kun kompileret med succes som root. Jeg burde have bemærket, at filerne ikke var ejet af min ikke-privilegerede bruger. Jeg har siden ændret ejerskabet af filerne, og nu kildebiblioteket samler under min ikke-privilegerede bruger.
Svar på denne kommentar
2 okt 2010 kl 18:26
[...] Hvis du har flere core maskine (som en dual-core), kan du næsten fordoble kernen kompilering hastighed, dvs med andre ord reducere din kompilering tid til næsten halvdelen. [...]
September 12, 2011 kl 11:00
Ikke brug-j til at make-kpkg brug CONCURRENCY_LEVEL eller FAIL
Svar på denne kommentar