青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-4  評論-40  文章-117  trackbacks-0

項目越來越大,每次需要重新編譯整個項目都是一件很浪費時間的事情。Research了一下,找到以下可以幫助提高速度的方法,總結一下。

  tmpfs

  有人說在Windows下用了RAMDisk把一個項目編譯時間從4.5小時減少到了5分鐘,也許這個數字是有點夸張了,不過粗想想,把文件放到內存上做編譯應該是比在磁盤上快多了吧,尤其如果編譯器需要生成很多臨時文件的話。

  這個做法的實現成本最低,在Linux中,直接mount一個tmpfs就可以了。而且對所編譯的工程沒有任何要求,也不用改動編譯環境。

  mount -t tmpfs tmpfs ~/build -o size=1G

  用2.6.32.2的Linux Kernel來測試一下編譯速度:

  用物理磁盤:40分16秒

  用tmpfs:39分56秒

  呃……沒什么變化。看來編譯慢很大程度上瓶頸并不在IO上面。但對于一個實際項目來說,編譯過程中可能還會有打包等IO密集的操作,所以只要可能,用tmpfs是有益無害的。當然對于大項目來說,你需要有足夠的內存才能負擔得起這個tmpfs的開銷。

  make -j

  既然IO不是瓶頸,那CPU就應該是一個影響編譯速度的重要因素了。

  用make -j帶一個參數,可以把項目在進行并行編譯,比如在一臺雙核的機器上,完全可以用make -j4,讓make最多允許4個編譯命令同時執行,這樣可以更有效的利用CPU資源。

  還是用Kernel來測試

  用make: 40分16秒

  用make -j4:23分16秒

  用make -j8:22分59秒

  由此看來,在多核CPU上,適當的進行并行編譯還是可以明顯提高編譯速度的。但并行的任務不宜太多,一般是以CPU的核心數目的兩倍為宜。

  不過這個方案不是完全沒有cost的,如果項目的Makefile不規范,沒有正確的設置好依賴關系,并行編譯的結果就是編譯不能正常進行。如果依賴關系設置過于保守,則可能本身編譯的可并行度就下降了,也不能取得最佳的效果。

  ccache

  ccache用于把編譯的中間結果進行緩存,以便在再次編譯的時候可以節省時間。這對于玩Kernel來說實在是再好不過了,因為經常需要修改一些Kernel的代碼,然后再重新編譯,而這兩次編譯大部分東西可能都沒有發生變化。對于平時開發項目來說,也是一樣。為什么不是直接用make所支持的增量編譯呢?還是因為現實中,因為Makefile的不規范,很可能這種“聰明”的方案根本不能正常工作,只有每次make clean再make才行。

  安裝完ccache后,可以在/usr/local/bin下建立gcc,g++,c++,cc的symbolic link,鏈到/usr/bin/ccache上。總之確認系統在調用gcc等命令時會調用到ccache就可以了(通常情況下/usr/local /bin會在PATH中排在/usr/bin前面)。

  繼續測試:

  用ccache的第一次編譯(make -j4):23分38秒

  用ccache的第二次編譯(make -j4):8分48秒

  用ccache的第三次編譯(修改若干配置,make -j4):23分48秒

  看來修改配置(我改了CPU類型...)對ccache的影響是很大的,因為基本頭文件發生變化后,就導致所有緩存數據都無效了,必須重頭來做。但如果只是修改一些.c文件的代碼,ccache的效果還是相當明顯的。而且使用ccache對項目沒有特別的依賴,布署成本很低,這在日常工作中很實用。

  可以用ccache -s來查看cache的使用和命中情況:

  cache directory                     /home/lifanxi/.ccachecache hit                           7165cache miss                         14283called for link                       71not a C/C++file                     120no input file                       3045files in cache                     28566cache size                          81.7 Mbytesmax cache size                     976.6 Mbytes

  可以看到,顯然只有第二編次譯時cache命中了,cache miss是第一次和第三次編譯帶來的。兩次cache占用了81.7M的磁盤,還是完全可以接受的。

  distcc

  一臺機器的能力有限,可以聯合多臺電腦一起來編譯。這在公司的日常開發中也是可行的,因為可能每個開發人員都有自己的開發編譯環境,它們的編譯器版本一般是一致的,公司的網絡也通常具有較好的性能。這時就是distcc大顯身手的時候了。

  使用distcc,并不像想象中那樣要求每臺電腦都具有完全一致的環境,它只要求源代碼可以用make -j并行編譯,并且參與分布式編譯的電腦系統中具有相同的編譯器。因為它的原理只是把預處理好的源文件分發到多臺計算機上,預處理、編譯后的目標文件的鏈接和其它除編譯以外的工作仍然是在發起編譯的主控電腦上完成,所以只要求發起編譯的那臺機器具備一套完整的編譯環境就可以了。

  distcc安裝后,可以啟動一下它的服務:

  /usr/bin/distccd  --daemon --allow 10.64.0.0/16

  默認的3632端口允許來自同一個網絡的distcc連接。

  然后設置一下DISTCC_HOSTS環境變量,設置可以參與編譯的機器列表。通常localhost也參與編譯,但如果可以參與編譯的機器很多,則可以把localhost從這個列表中去掉,這樣本機就完全只是進行預處理、分發和鏈接了,編譯都在別的機器上完成。因為機器很多時,localhost的處理負擔很重,所以它就不再“兼職”編譯了。

  export DISTCC_HOSTS="localhost 10.64.25.1 10.64.25.2 10.64.25.3"

  然后與ccache類似把g++,gcc等常用的命令鏈接到/usr/bin/distcc上就可以了。

  在make的時候,也必須用-j參數,一般是參數可以用所有參用編譯的計算機CPU內核總數的兩倍做為并行的任務數。

  同樣測試一下:

  一臺雙核計算機,make -j4:23分16秒

  兩臺雙核計算機,make -j4:16分40秒

  兩臺雙核計算機,make -j8:15分49秒

  跟最開始用一臺雙核時的23分鐘相比,還是快了不少的。如果有更多的計算機加入,也可以得到更好的效果。

  在編譯過程中可以用distccmon-text來查看編譯任務的分配情況。distcc也可以與ccache同時使用,通過設置一個環境變量就可以做到,非常方便。

  總結一下:

  tmpfs: 解決IO瓶頸,充分利用本機內存資源

  make -j: 充分利用本機計算資源

  distcc: 利用多臺計算機資源

  ccache: 減少重復編譯相同代碼的時間

  這些工具的好處都在于布署的成本相對較低,綜合利用這些工具,就可以輕輕松松的節省相當可觀的時間。上面介紹的都是這些工具最基本的用法,更多的用法可以參考它們各自的man page。

posted on 2012-02-09 13:45 李陽 閱讀(598) 評論(0)  編輯 收藏 引用 所屬分類: Linux
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久久久对白| 久久久久久久久久久久久9999| 欧美一级淫片播放口| 亚洲国产小视频在线观看| 欧美一区二区三区在线播放| 亚洲欧美日韩国产综合在线| 亚洲性夜色噜噜噜7777| 一本色道久久88综合亚洲精品ⅰ| 亚洲精品中文在线| 一二三区精品福利视频| 亚洲永久免费av| 亚洲欧美日韩综合aⅴ视频| 午夜亚洲性色福利视频| 久久精品毛片| 欧美α欧美αv大片| 久久精品日产第一区二区| 欧美风情在线| 亚洲天堂网在线观看| 欧美在线三区| 欧美日韩国产二区| 国产日韩欧美三区| 亚洲精品一区二区三区蜜桃久 | 欧美在线观看视频| 久久裸体艺术| 999在线观看精品免费不卡网站| 日韩亚洲欧美中文三级| 午夜在线电影亚洲一区| 欧美a级大片| 国产人成一区二区三区影院| 夜夜爽99久久国产综合精品女不卡| 一区二区高清在线| 久久欧美肥婆一二区| 欧美日韩亚洲综合| 一区二区三区在线免费视频| 夜夜嗨av一区二区三区网站四季av| 欧美一级久久久久久久大片| 亚洲国产精品一区二区尤物区 | 欧美在线中文字幕| 欧美国产先锋| 欧美一区二区三区四区在线| 欧美日韩国产综合网| 在线电影国产精品| 久久精品91久久香蕉加勒比| 99视频精品| 欧美精品乱人伦久久久久久| 黄色一区二区三区四区| 欧美一区二区三区免费观看视频| 亚洲国产一区二区在线| 久久久久久9| 国产一区二区精品丝袜| 午夜伦欧美伦电影理论片| 亚洲精品国产精品国自产观看| 久久精品国产久精国产一老狼 | 亚洲精品视频免费| 久久综合色播五月| 亚洲欧美国产另类| 国产精品久久久久永久免费观看| 日韩一级黄色av| 亚洲黄色天堂| 欧美日本一区二区视频在线观看| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲视频免费| 亚洲三级视频在线观看| 欧美国产精品中文字幕| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美日一区二区三区在线观看国产免| 在线视频国产日韩| 免费在线观看日韩欧美| 久久天天综合| 日韩午夜电影在线观看| 日韩亚洲欧美成人一区| 国产精品入口夜色视频大尺度| 亚洲欧美成人一区二区在线电影| 亚洲视频一二区| 国产农村妇女精品一区二区| 国产精品一二三| 亚洲免费一区二区| 午夜日韩福利| 一区二区三区亚洲| 亚洲高清不卡在线观看| 欧美日韩国产系列| 在线亚洲+欧美+日本专区| 一区二区免费在线播放| 国产精品日韩一区| 欧美一区二区三区四区在线观看地址| 亚洲欧美日韩专区| 在线色欧美三级视频| 91久久精品美女| 国产精品国色综合久久| 久久狠狠婷婷| 麻豆91精品| 亚洲系列中文字幕| 久久国产主播精品| 欧美a级理论片| 在线视频一区观看| 日韩一级黄色av| 亚洲在线黄色| 国产精品video| 久久成人人人人精品欧| 久久综合亚洲社区| 在线一区二区三区四区| 欧美一区二区视频在线| 亚洲激情视频网站| 亚洲欧美一级二级三级| 亚洲激情午夜| 午夜久久tv| 亚洲欧洲日本专区| 亚洲欧美日韩天堂一区二区| 亚洲精品在线观看视频| 午夜亚洲一区| 正在播放欧美视频| 国产亚洲精品aa午夜观看| 久久不射中文字幕| 免费在线观看成人av| 亚洲欧美卡通另类91av| 久久福利电影| 一区二区三区.www| 久久九九国产| 午夜欧美大片免费观看| 欧美国产日韩xxxxx| 久久久精品动漫| 欧美人与性动交α欧美精品济南到| 久久电影一区| 欧美日韩在线亚洲一区蜜芽| 免费观看成人| 国产精品一级| 中文日韩在线| 亚洲午夜久久久久久久久电影院| 免费不卡在线视频| 老牛影视一区二区三区| 国产精品久久久久久久第一福利| 久久美女性网| 欧美日韩高清在线一区| 久久人人看视频| 国产精品国产三级国产普通话三级 | 一区二区三欧美| 日韩视频在线观看| 欧美ab在线视频| 亚洲国产精品成人综合色在线婷婷| 国内精品国产成人| 欧美亚洲综合网| 久久久综合激的五月天| 国内精品久久久久久久影视蜜臀| 亚洲欧美偷拍卡通变态| 欧美一区二区精美| 国产色综合网| 欧美日韩一级片在线观看| 国产热re99久久6国产精品| 亚洲人成在线观看| 亚洲精品一区二区三区99| 欧美成人国产一区二区| 欧美国产国产综合| 亚洲成人影音| 久久美女艺术照精彩视频福利播放| 久久久久久久久久久久久9999 | 国产精品视频自拍| 亚洲综合清纯丝袜自拍| 欧美在线观看一区| 国内精品久久国产| 久久久无码精品亚洲日韩按摩| 久久艳片www.17c.com| 伊人男人综合视频网| 久久亚洲一区| 亚洲精品护士| 午夜一区二区三区不卡视频| 国产三区二区一区久久| 欧美激情视频一区二区三区不卡| 亚洲高清自拍| 久久综合中文| 亚洲国产第一页| 亚洲视频第一页| 国产视频精品免费播放| 久久久久久999| 亚洲毛片一区二区| 久久激情久久| 91久久精品国产91久久| 国产精品久久久久久福利一牛影视| 亚洲欧美综合网| 欧美成人四级电影| 亚洲一区日韩| 亚洲二区在线| 国产精品三级久久久久久电影| 久久精品国产77777蜜臀| 亚洲激情成人在线| 欧美一区二区视频在线观看2020 | 国产精品日韩久久久| 老鸭窝毛片一区二区三区| 一本久久精品一区二区| 久久综合九色99| 欧美激情精品久久久久久变态| 亚洲视频专区在线| 久久综合一区| 亚洲一区免费网站| 亚洲高清不卡在线观看| 国产欧美一区二区精品忘忧草| 欧美国产综合| 狼人社综合社区| 久久久久国产精品麻豆ai换脸| 亚洲综合99| 在线一区观看|