轉載:
make -j4是什么意思
看書上說
1) make(1)只衍生一個作業//作業是什么意思?make(1) 是不是就是make的意思?
2) 在雙處理器上make -j4,難道是讓每個處理器跑兩個作業?那和make -j2效率相比 難道不是一樣的?
新手提問 多多關照
------解決方案--------------------
make(1)表示在unix手冊(man)的第一章,可以用 man 1 make 來查看。
兩個處理器的話,一般 -j2 能達到最高效率。
不過也有些進程會花時間在IO上,並不能利用完單個cpu的時間。這樣 -j4 可以更快。
------解決方案--------------------
jobs=4
同時最多跑4個作業
make自己會協調,如果CPU等資源不夠可能小於4個。不過一般瓶頸都在硬盤,所以一般能看到4個進程一起跑。
------解決方案--------------------
啟用4個cpu去編譯。提高編譯速度。
------解決方案--------------------
感覺指的是邏輯線程數,和CPU無關,邏輯線程具體跑在哪個邏輯CPU上應該是由內核決定的。make說白了也只是個程序而已。
========================================
make(gmake,gnumake)的-j參數,優化多核、多線程的編譯過程
一直以為,現在主流的程序,比如apache2.2,編譯過程自動會對多核優化 結果發現不是這樣的
測試環境:默認./configure無參數后的apache2.2.14源碼根目錄
測試方法:使用以下命令,粗略記錄編譯過程時間。 $ date >> /qshen/time && make && date >> /qshen/time
對比與加了-j參數的make的編譯時間
查閱資料,網上很多人用雙路INTEL XEON E5404測試時使用參數-j16,使用單路E5405測試使用參數-j8。這個不太理解。因為E5405是四核心,每核心1線程,不知為何要使用二倍的jobs。在此也實際測試
我的測試環境CPU是INTEL XEON E5405,單路。8G內存。 首先,不帶-j的命令執行2次
然后,使用-j4執行二次
再然后,使用-j8執行二次
最后使用-j16執行一次作為參考數據
結果:共計執行
$ cat /qshen/time Mon Feb 1 12:51:17 CST 2010 Mon Feb 1 12:52:55 CST 2010
Mon Feb 1 12:53:29 CST 2010 Mon Feb 1 12:55:07 CST 2010
Mon Feb 1 12:55:34 CST 2010 Mon Feb 1 12:56:14 CST 2010
Mon Feb 1 12:56:37 CST 2010 Mon Feb 1 12:57:16 CST 2010
Mon Feb 1 12:57:38 CST 2010 Mon Feb 1 12:58:16 CST 2010
Mon Feb 1 12:58:36 CST 2010 Mon Feb 1 12:59:13 CST 2010
Mon Feb 1 12:59:48 CST 2010 Mon Feb 1 13:00:26 CST 2010 結果發現,確實默認的make不加-j參數效率比較低。加上-j參數,-j4和-j8性能差距不大,-j16性能就比較差了。准備進一步翻閱資料看看到底應該取值多少。
