資料介紹
軟件簡(jiǎn)介
yadcc(Yet Another Distributed C++ Compiler)是一套騰訊廣告自研的分布式編譯系統(tǒng),用于支撐騰訊廣告的日常開(kāi)發(fā)及流水線。相對(duì)于已有的同類(lèi)解決方案,其針對(duì)實(shí)際的工業(yè)生產(chǎn)環(huán)境做了性能、可靠性、易用性等方面優(yōu)化。
yadcc 目前在騰訊 1700+ 核的集群中每天編譯 300,0000+ 個(gè)目標(biāo)文件,產(chǎn)出約 3~5TB,已經(jīng)持續(xù)穩(wěn)定運(yùn)營(yíng) 8 個(gè)月。取決于代碼邏輯及本地機(jī)器配置,yadcc 可以利用幾百乃至 1000+ 核同時(shí)編譯(騰訊內(nèi)部使用 512 并發(fā)編譯),大大加快構(gòu)建速度。
具體簡(jiǎn)介及技術(shù)細(xì)節(jié)可以參考技術(shù)文檔。
系統(tǒng)要求
- Linux 3.10 及以上內(nèi)核,暫不支持其他操作系統(tǒng);
- x86-64 處理器;
-
編譯
yadcc需要GCC 8 及以上版本的編譯器,基于yadcc進(jìn)行分布式編譯時(shí)可以支持其他更低版本編譯器。
基本原理
和ccache、distcc、icecc等工具類(lèi)似;
-
客戶(hù)端偽裝成編譯器(通常是通過(guò)
ln -sf yadcc g++創(chuàng)建的符號(hào)鏈接) -
通過(guò)將客戶(hù)端偽裝的編譯器加入
PATH頭部,這樣構(gòu)建系統(tǒng)就會(huì)實(shí)際執(zhí)行yadcc來(lái)編譯 -
yadcc會(huì)按照命令行對(duì)源代碼進(jìn)行預(yù)處理,得到一個(gè)自包含的的預(yù)處理結(jié)果 - 以預(yù)處理結(jié)果、編譯器簽名、命令行參數(shù)等為哈希,查詢(xún)緩存,如果命中,直接返回結(jié)果
- 如果不命中,就請(qǐng)求調(diào)度器獲取一個(gè)編譯節(jié)點(diǎn),分發(fā)過(guò)去做編譯
- 等待直到從編譯集群中得到編譯結(jié)果,并更新緩存
由于預(yù)處理時(shí)間通常遠(yuǎn)小于編譯時(shí)間,因此這樣可以降低單個(gè)文件的本地開(kāi)銷(xiāo)。同時(shí),由于等待編譯結(jié)果時(shí)本地?zé)o需進(jìn)行操作,因此可以增大本地的編譯并發(fā)度(如8核機(jī)器通??梢?code>make -j100),以此實(shí)現(xiàn)更高的吞吐。
需要注意的是,分布式編譯通常只能提高吞吐,但是不能降低單個(gè)文件的編譯耗時(shí)(假設(shè)不命中緩存)。因此,對(duì)于無(wú)法并發(fā)編譯的工程,除非命中緩存,否則分布式編譯通常不能加快編譯,反而可能有負(fù)面效果。
設(shè)計(jì)特點(diǎn)
系統(tǒng)由調(diào)度器、緩存服務(wù)器、守護(hù)進(jìn)程及客戶(hù)端組成:
- 對(duì)上層的構(gòu)建系統(tǒng)(Make、CMake,Blade、Bazel 等)透明,方便適配各種構(gòu)建系統(tǒng)。
- 調(diào)度器全局共享,所有請(qǐng)求均由調(diào)度節(jié)點(diǎn)統(tǒng)一分配。這樣,低負(fù)載時(shí)可允許客戶(hù)端盡可能提交更多的任務(wù),集群滿(mǎn)載時(shí)可阻塞新請(qǐng)求避免過(guò)載。
- 中心的調(diào)度節(jié)點(diǎn)也避免了需要客戶(hù)機(jī)感知編譯集群的列表的需要,降低運(yùn)維成本。
- 編譯機(jī)向調(diào)度器定期心跳,這樣我們不需要預(yù)先在調(diào)度器處配置編譯機(jī)列表,降低運(yùn)維成本。
- 分布式緩存避免不必要的重復(fù)編譯。同時(shí)本地守護(hù)進(jìn)程處會(huì)維護(hù)緩存的布隆過(guò)濾器,避免無(wú)意義的緩存查詢(xún)引發(fā)不必要的網(wǎng)絡(luò)延遲。
- 使用本地守護(hù)進(jìn)程和外界通信,這避免了每個(gè)客戶(hù)端均反復(fù)進(jìn)行TCP啟動(dòng)等操作,降低開(kāi)銷(xiāo)。另外這也允許我們?cè)谑刈o(hù)進(jìn)程處維護(hù)一定的狀態(tài),提供更多的優(yōu)化可能。
- 客戶(hù)端會(huì)和本地守護(hù)進(jìn)程通信,綜合控制本地任務(wù)并發(fā)度避免本地過(guò)載。
- 通過(guò)編譯器哈希區(qū)分版本,這允許我們的集群中存在多個(gè)不同版本的編譯器。
同時(shí),做了多層重試,確保不會(huì)因?yàn)榫W(wǎng)絡(luò)抖動(dòng)、編譯機(jī)異常離線等工業(yè)場(chǎng)景常見(jiàn)的問(wèn)題導(dǎo)致的不必要的失敗。
- 分布式電源對(duì)配電系統(tǒng)的影響分析
- 基于Simulink的電子對(duì)抗分布式仿真系統(tǒng) 26次下載
- 基于分布式仿真系統(tǒng)的實(shí)時(shí)通訊架構(gòu) 11次下載
- 基于KingSCADA的分布式運(yùn)動(dòng)控制監(jiān)測(cè)系統(tǒng) 10次下載
- 基于DSP的航空發(fā)動(dòng)機(jī)分布式總線設(shè)計(jì)方案 14次下載
- 一種可行的分布式存儲(chǔ)系統(tǒng)安全構(gòu)造方法 21次下載
- TMS320F28x 優(yōu)化C/C++編譯器用戶(hù)指南 26次下載
- 分布式能源系統(tǒng)經(jīng)濟(jì)優(yōu)化運(yùn)行 16次下載
- 高級(jí)C/C++編譯技術(shù) 25次下載
- 分布式電纜溫度監(jiān)控系統(tǒng) 74次下載
- 一種分布式編譯系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 分布式專(zhuān)家系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
- 基于多Agent 技術(shù)的分布式測(cè)控系統(tǒng)研究
- 基于IP的點(diǎn)對(duì)點(diǎn)分布式VPN系統(tǒng)
- 分布式系統(tǒng)原理與范例 pdf 0次下載
- 【節(jié)能學(xué)院】Acrel-1000DP分布式光伏監(jiān)控系統(tǒng)在奉賢平高食品 4.4MW 分布式光伏中應(yīng)用 3.4k次閱讀
- 分布式SCADA系統(tǒng)的特點(diǎn)的組成 1.4k次閱讀
- Java手寫(xiě)分布式鎖的實(shí)現(xiàn) 1.3k次閱讀
- tldb提供分布式鎖使用方法 1.7k次閱讀
- 深入理解redis分布式鎖 1.7k次閱讀
- 如何使用分布式存儲(chǔ)系統(tǒng)促進(jìn)AI模型訓(xùn)練 1.3k次閱讀
- 鴻蒙分布式相機(jī)“踩坑”分享 3.1k次閱讀
- 利用NI VeriStand 2010實(shí)現(xiàn)分布式同步系統(tǒng)的設(shè)計(jì) 4.1k次閱讀
- 基于Jini互聯(lián)技術(shù)實(shí)現(xiàn)分布式嵌入式系統(tǒng)的設(shè)計(jì) 3.9k次閱讀
- 詳談分布式系統(tǒng)的定義及屬性 4.6k次閱讀
- 分布式光纖傳感器原理_分布式光纖傳感器的應(yīng)用 9.8k次閱讀
- 分布式控制系統(tǒng)的介紹 6.1k次閱讀
- 存儲(chǔ)分布式系統(tǒng)中如何從CAP轉(zhuǎn)到PACELC 3k次閱讀
- 深度解讀分布式存儲(chǔ)技術(shù)之分布式剪枝系統(tǒng) 2.2k次閱讀
- 基于CAN總線的分布式網(wǎng)架健康狀態(tài)監(jiān)測(cè)系統(tǒng)的設(shè)計(jì) 1.3k次閱讀
下載排行
本周
- 1新一代網(wǎng)絡(luò)可視化(NPB 2.0)
- 3.40 MB | 1次下載 | 免費(fèi)
- 2冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 1次下載 | 10 積分
- 3MDD品牌三極管MMBT3906數(shù)據(jù)手冊(cè)
- 2.33 MB | 次下載 | 免費(fèi)
- 4MDD品牌三極管S9012數(shù)據(jù)手冊(cè)
- 2.62 MB | 次下載 | 免費(fèi)
- 5LAT1218 如何選擇和設(shè)置外部晶體適配 BlueNRG-X
- 0.60 MB | 次下載 | 3 積分
- 6LAT1216 Blue NRG-1/2 系列芯片 Flash 操作與 BLE 事件的互斥處理
- 0.89 MB | 次下載 | 3 積分
- 7收音環(huán)繞擴(kuò)音機(jī) AVR-1507手冊(cè)
- 2.50 MB | 次下載 | 免費(fèi)
- 8MS1000TA 超聲波測(cè)量模擬前端芯片技術(shù)手冊(cè)
- 0.60 MB | 次下載 | 免費(fèi)
本月
- 1愛(ài)華AIWA HS-J202維修手冊(cè)
- 3.34 MB | 37次下載 | 免費(fèi)
- 2PC5502負(fù)載均流控制電路數(shù)據(jù)手冊(cè)
- 1.63 MB | 23次下載 | 免費(fèi)
- 3NB-IoT芯片廠商的資料說(shuō)明
- 0.31 MB | 22次下載 | 1 積分
- 4UWB653Pro USB口測(cè)距通信定位模塊規(guī)格書(shū)
- 838.47 KB | 5次下載 | 免費(fèi)
- 5蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 6蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
- 7100W準(zhǔn)諧振反激式恒流電源電路圖資料
- 0.09 MB | 2次下載 | 1 積分
- 8FS8025B USB的PD和OC快充協(xié)議電壓誘騙控制器IC技術(shù)手冊(cè)
- 1.81 MB | 1次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191439次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問(wèn)
發(fā)資料
發(fā)視頻
上傳資料賺積分
評(píng)論