2014-04-24 68 views
14

我有8GB內存的核心i5。 我在我的機器上安裝了VMware工作站10.0.1。 我已將fedora 20桌面版作爲來賓操作系統安裝在VMware上。如何加快Linux內核編譯速度?

我正在研究Linux內核源代碼v 3.14.1。我正在開發一個Linux內核的I/O調度器。每次修改代碼後,大約需要1小時30分鐘才能編譯和安裝整個內核代碼以查看更改。

編譯和安裝命令: make menuconfigmakemake modulesmake modules_installmake install

所以我的問題是有可能減少1小時30分鐘的時間裏到只有10到15分鐘?

+0

有一個鮮爲人知的'菜單gconfig'這是令人難以置信的方便VS'讓menuconfig' –

回答

2
  1. 使用make並行構建與-j選項
  2. 編譯只爲目標的建築,否則將做構建內核中爲每一個架構。

即對於例如,而不是運行:

make 

運行:

make ARCH=<your architecture> -jN 

其中N是沒有你的計算機上的內核(cat /proc/cpuinfo列出了無芯)。對於例如,對於i386目標和主機與4 cores(的cat /proc/cpuinfo輸出):

make ARCH=i386 -j4 

同樣可以運行其它使目標(modulesmodules_installinstall)與-jN標誌。

注:make確實修改過的文件的檢查和編譯只有那些已經被修改,因此僅最初的構建應該花時間的文件,後續構建將會更快。

+0

對不起,因爲我對內核的東西有點新,所以請您詳細說明「make ARCH = <您的架構> -jN」。是的,你是正確的只編譯修改後的代碼大約需要10分鐘,但「make modules_install」命令需要大約45分鐘來製作.ko文件。請有任何意見? – momersaleem

+0

如果目標機器是'i386'並且你的機器有'4個核心',那麼你可以運行你的make:'make ARCH = i386 -j4'。 – brokenfoot

18

對於您對源代碼所做的每一項更改都不要做make menuconfig,因爲無論您的更改如何微不足道,它都會觸發對所有內容的全面編輯。這隻在內核的配置選項發生變化時才需要,而且在開發過程中應該很少發生。

只要做到:

make 

,或者如果你喜歡的並行編譯:

make -j4 

或任何數量的併發任務你喜歡。

然後,make install等可能需要部署最近建立的二進制文件,當然。

另一個技巧是將內核配置爲測試所需的最小值。我發現對於許多任務來說,UML編譯(User Mode Linux)是最快的。您也可以找到有用的make localmodconfig而不是make menuconfig開始。

+0

'-j'參數應該是核心數量的1.5倍 –

5

每次進行更改時都不需要再次運行make menuconfig - 只需要一次就可以創建內核.config文件。所以只要(或者可能再次如果編輯Kconfig文件添加或修改配置選項,但是這肯定不應該經常發生的事情。)

爲您.config被單獨留在家中,運行make應該只重新編譯您更改的文件。有幾個文件必須每次編譯,但絕大多數不是。

+0

感謝您的評論。正如你所說的只運行一次「make menuconfig」。沒關係。顯然在代碼改變後每次都會運行「make」命令。但是,每次更改代碼以查看我的更改時,是否還需要運行「make modules」,「make modules_install」和「make install」? – momersaleem

+1

'make modules'構建模塊,'make modules_install'會將模塊安裝到它們的默認目錄中,該目錄是'/ lib/{your-kernel-version-name}/modules'和'make install'「安裝」新內核如將壓縮的內核映像複製到默認位置,通常是/ boot /以及System.map和.config文件。所以回到你的問題,如果你對模塊做了一些改變,那肯定是需要的。由於你顯然在調度程序上工作,所以你最有可能使用核心內核,所以不需要做'make modules',因爲它不會執行任何操作。 – HighOnMeat

0

也許除了前面的建議之外,使用ccache軟件(https://ccache.samba.org/)和SSD驅動器上的編譯目錄應大大減少編譯時間。

0

如果你有suffitient RAM和你不會使用你的機器,而內核正在修建ü可以生成大量的並行作業。但要確保你的RAM是足夠的,否則你的系統會掛起並崩潰。

2

make -j將使用所有可用的CPU。

+0

它會產生數百個編譯器進程並且系統凍結 –

+0

@OlegMikheev在以前的程序中沒有看到這個,也許你可以指定一個工作計數限制,例如'make -j 4',如其他答案中所建議的那樣。 –

0

ccache應該可以大大加快您的編譯時間。它通過緩存先前的編譯並檢測重新編譯的時間來加速重新編譯。由於需要填充緩存,所以第一次使用ccache進行編譯會比較慢,但後續構建應該快得多。

如果你不想與ccache的配置大驚小怪,你可以運行它像這樣編譯內核:

ccache make