资料介绍
软件简介
yadcc(Yet Another Distributed C++ Compiler)是一套腾讯广告自研的分布式编译系统,用于支撑腾讯广告的日常开发及流水线。相对于已有的同类解决方案,其针对实际的工业生产环境做了性能、可靠性、易用性等方面优化。
yadcc 目前在腾讯 1700+ 核的集群中每天编译 300,0000+ 个目标文件,产出约 3~5TB,已经持续稳定运营 8 个月。取决于代码逻辑及本地机器配置,yadcc 可以利用几百乃至 1000+ 核同时编译(腾讯内部使用 512 并发编译),大大加快构建速度。
具体简介及技术细节可以参考技术文档。
系统要求
- Linux 3.10 及以上内核,暂不支持其他操作系统;
- x86-64 处理器;
-
编译
yadcc
需要GCC 8 及以上版本的编译器,基于yadcc
进行分布式编译时可以支持其他更低版本编译器。
基本原理
-
客户端伪装成编译器(通常是通过
ln -sf yadcc g++
创建的符号链接) -
通过将客户端伪装的编译器加入
PATH
头部,这样构建系统就会实际执行yadcc
来编译 -
yadcc
会按照命令行对源代码进行预处理,得到一个自包含的的预处理结果 - 以预处理结果、编译器签名、命令行参数等为哈希,查询缓存,如果命中,直接返回结果
- 如果不命中,就请求调度器获取一个编译节点,分发过去做编译
- 等待直到从编译集群中得到编译结果,并更新缓存
由于预处理时间通常远小于编译时间,因此这样可以降低单个文件的本地开销。同时,由于等待编译结果时本地无需进行操作,因此可以增大本地的编译并发度(如8核机器通常可以make -j100
),以此实现更高的吞吐。
需要注意的是,分布式编译通常只能提高吞吐,但是不能降低单个文件的编译耗时(假设不命中缓存)。因此,对于无法并发编译的工程,除非命中缓存,否则分布式编译通常不能加快编译,反而可能有负面效果。
设计特点
系统由调度器、缓存服务器、守护进程及客户端组成:
- 对上层的构建系统(Make、CMake,Blade、Bazel 等)透明,方便适配各种构建系统。
- 调度器全局共享,所有请求均由调度节点统一分配。这样,低负载时可允许客户端尽可能提交更多的任务,集群满载时可阻塞新请求避免过载。
- 中心的调度节点也避免了需要客户机感知编译集群的列表的需要,降低运维成本。
- 编译机向调度器定期心跳,这样我们不需要预先在调度器处配置编译机列表,降低运维成本。
- 分布式缓存避免不必要的重复编译。同时本地守护进程处会维护缓存的布隆过滤器,避免无意义的缓存查询引发不必要的网络延迟。
- 使用本地守护进程和外界通信,这避免了每个客户端均反复进行TCP启动等操作,降低开销。另外这也允许我们在守护进程处维护一定的状态,提供更多的优化可能。
- 客户端会和本地守护进程通信,综合控制本地任务并发度避免本地过载。
- 通过编译器哈希区分版本,这允许我们的集群中存在多个不同版本的编译器。
同时,做了多层重试,确保不会因为网络抖动、编译机异常离线等工业场景常见的问题导致的不必要的失败。
- 分布式电源对配电系统的影响分析
- 基于Simulink的电子对抗分布式仿真系统 26次下载
- 基于分布式仿真系统的实时通讯架构 11次下载
- 基于KingSCADA的分布式运动控制监测系统 10次下载
- 基于DSP的航空发动机分布式总线设计方案 14次下载
- 一种可行的分布式存储系统安全构造方法 21次下载
- TMS320F28x 优化C/C++编译器用户指南 25次下载
- 分布式能源系统经济优化运行 16次下载
- 高级C/C++编译技术 18次下载
- 分布式电缆温度监控系统 74次下载
- 一种分布式编译系统的设计与实现
- 分布式专家系统结构设计
- 基于多Agent 技术的分布式测控系统研究
- 基于IP的点对点分布式VPN系统
- 分布式系统原理与范例 pdf 0次下载
- 分布式SCADA系统的特点的组成 581次阅读
- Java手写分布式锁的实现 612次阅读
- tldb提供分布式锁使用方法 923次阅读
- 深入理解redis分布式锁 988次阅读
- 如何使用分布式存储系统促进AI模型训练 608次阅读
- 鸿蒙分布式相机“踩坑”分享 1911次阅读
- 利用NI VeriStand 2010实现分布式同步系统的设计 3437次阅读
- 基于Jini互联技术实现分布式嵌入式系统的设计 3200次阅读
- 详谈分布式系统的定义及属性 3897次阅读
- 分布式光纤传感器原理_分布式光纤传感器的应用 8837次阅读
- 分布式控制系统的介绍 5532次阅读
- 分布式的产生与定义 4122次阅读
- 存储分布式系统中如何从CAP转到PACELC 2780次阅读
- 深度解读分布式存储技术之分布式剪枝系统 1861次阅读
- 基于CAN总线的分布式网架健康状态监测系统的设计 1027次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论