电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
栗子派分布式编译集群
分 享
扫描二维码分享
栗子派分布式编译集群
分布式编译集群
栗子派集群
distcc
robe_zhang
关注
发布时间: 2020-04-20
丨
阅读: 1114
本文又是集群,这次是分布式编译集群,硬件还是两块栗子派P710开发板: ![](https://cf02.ickimg.com/bbsimages/202004/5c4df739c18d092884c9f0c730ce6427.png) 软件选用分布式C/C++/ObjC 编译器 dsitcc ![](https://cf02.ickimg.com/bbsimages/202004/671c876a8141f5266fe32f60835c138d.png) #### distcc分布式编译器 主要是三部分,distccd 服务端,distcc 客户端,还有个distccmon-test 监控程序,借用博客信息,看一下distcc 软件详细介绍: ![](https://cf02.ickimg.com/bbsimages/202004/d650c548f263628bf803d0a911f03062.png) Distcc分布式编译器使用客户端服务器模式,整个集群的要求没那么高,客户端节点和服务器节点位于一个网络中,可以相互访问,没其他要求了,所以Distcc 分布式编译集群系统结构也简单,如下: ![](https://cf02.ickimg.com/bbsimages/202004/28a0de3781678c1a0b856bd239b20404.png) #### 栗子派分布式编译集群搭建: 按照以上系统图示,给栗子板P710开发板安装 Debian 系统,然后接入千兆路由器,连接网络。详细步骤可以参考《[栗子派集群](https://www.icxbk.com/article/detail/1299.html "栗子派集群")》 网络必须要好,网络延迟必须要小。 安装 distcc 软件 ```shell apt install distcc ``` ![](https://cf02.ickimg.com/bbsimages/202004/f6bec476cbfa4f35fe48b9518e21df8f.png) Distcc 软件包已包含distcc客户端,distccd 服务端,和distccmon-test 监控程序,安装一个distcc 软件包足够了。 自己准备一下编译环境,编译一个项目,试试分布式编译集群的性能。 #### 集群性能测试 本文使用集群编译uboot-2020.01来测试分布式编译集群的性能,同时记录单机编译uboot-2020.01的时间作为对比,做下列测试并记录数据: 1, 单机4 x A53 核心编译 uboot-2020.01,使用的时间 2, 双机集群8 x A53 核心编译 uboot-2020.01,使用的时间 3, 单机2 x A72 核心编译 uboot-2020.01,使用的时间 4, 双机集群4 x A72 核心编译 uboot-2020.01,使用的时间 5, 单机4 x A53 + 2 x A72核心编译 uboot-2020.01,使用的时间 6, 双机集群8 x A53 + 4 x A72核心编译 uboot-2020.01,使用的时间 单机编译:假如uboot-2020.01 已经下载解压到 /datadisk/u-boot-2020.01 目录中,运行以下命令,开始编译: ```shell pushd /datadisk/u-boot-2020.01 make imx8mn_ddr4_evk_defconfig make -jN # N 是数字,进程数,用4个并行进程编译,此处为make -j4 # N 因为整个测试过程有插拔cpu,所以可以使用以下命令实时获取在线cpu数量 # N= $(cat /proc/cpuinfo |grep processor|wc -l) make distclean popd ``` ![](https://cf02.ickimg.com/bbsimages/202004/ea9c8036566cc2f809bb3c24d6364b8a.png) ![](https://cf02.ickimg.com/bbsimages/202004/30fccc0c2f3b61627fdedae7f1bef6c1.png) 记录以上编译过程使用的时间 #### 单机4 x A53 核心编译 uboot-2020.01 开启4个A53 核心,关闭2个A72核心 ```shell echo 1 > /sys/devices/system/cpu/cpu0/online echo 1 > /sys/devices/system/cpu/cpu1/online echo 1 > /sys/devices/system/cpu/cpu2/online echo 1 > /sys/devices/system/cpu/cpu3/online echo 0 > /sys/devices/system/cpu/cpu4/online echo 0 > /sys/devices/system/cpu/cpu5/online ``` 4个核心使用4条并行进程,编译uboot,编译完成用时:127秒 ![](https://cf02.ickimg.com/bbsimages/202004/418b7861d09725925f896b77a122c4be.png) #### 集群编译: 本文以leezb节点为客户端,leezb + leeza为两节点服务端,编译uboot,运行一下命令编译: ```shell export DISTCC_HOSTS="leezb leeza" # 设置distcc 的主机 distccd --daemon -jN --allow 192.168.3.0/24 # 在服务器节点上开启distccd服务 # 本集群一共两个节点,leeza节点和leezb节点,leezb节点运行客户端和服务端,leeza节点运行服务端 # --daemon 当作后台进程运行 # -jM 集群的并行进程数,所有节点的进程总数 # --allow 192.168.3.0/24 监听 192.168.3.0/24 网络内的distcc 客户端 make -jM CC=distcc #设置编译器为distcc,开始编译 ``` 双机集群8 x A53 核心编译 uboot-2020.01 每个节点都运行以下命令,开启4个A53 核心,关闭2个A72核心 ```shell echo 1 > /sys/devices/system/cpu/cpu0/online echo 1 > /sys/devices/system/cpu/cpu1/online echo 1 > /sys/devices/system/cpu/cpu2/online echo 1 > /sys/devices/system/cpu/cpu3/online echo 0 > /sys/devices/system/cpu/cpu4/online echo 0 > /sys/devices/system/cpu/cpu5/online ``` 双机集群共8个A53核心使用8条并行进程,编译完成用时:105秒 ![](https://cf02.ickimg.com/bbsimages/202004/0fb910a1bfa1c2c3c9c985ed472360ae.png) 单机2 x A72 核心编译 uboot-2020.01,使用的时间:100秒 ![](https://cf02.ickimg.com/bbsimages/202004/9c104f62433ca7f3d6446e95f56cb32b.png) 双机集群4 x A72 核心编译 uboot-2020.01,使用的时间:90秒 ![](https://cf02.ickimg.com/bbsimages/202004/445a59250bb9dcaa2bb68c1f33c3c27c.png) 单机4 x A53 + 2 x A72核心编译 uboot-2020.01,使用的时间:66秒 ![](https://cf02.ickimg.com/bbsimages/202004/81427d3ed82df47897017bec505b4ae2.png) 双机集群8 x A53 + 4 x A72核心编译 uboot-2020.01,使用的时间:60秒 ![](https://cf02.ickimg.com/bbsimages/202004/6573a1b902b90b8bdcd42653d6731404.png) 集群编译时候打开监控程序观察集群的任务分布情况:命令: ```shell distccmon-text 1 # distccmon-text: 是监控程序,在客户端打开此程序 # 1:时间间隔,每间隔1秒,刷新一下任务分布情况 ``` ![](https://cf02.ickimg.com/bbsimages/202004/24b43caa7cdf39d3272246cf3b1c18ae.png) 客户端会对源码初步预处理,然后通过网络发送到两个编译服务器上,服务器编译后通过网络把目标文件返回。 #### 测试数据汇总: ![](https://cf02.ickimg.com/bbsimages/202004/5ef20f72064a12b2e49cd86470bc32fb.png) 从以上数据,可以看出来双机集群相比单机,编译速度会加快,性能有所提升,但优势不是很明显 。双机集群编译速度比单机编译快 10% 左右。有的小伙伴在x86上测试,3节点编译集群性能可达到单机的2.6倍。 **此栗子派双节点分布式编译集群相对单机性能有所提升,大概是 10% ,暂时还没能充分发挥出集群该有的性能,观赏意义大于实际意义,感兴趣的小伙伴可以深入研究。** #### ps:网口bug 笔者半年前初次测试这个集群,编译内核,单机需要45分钟,双节点集群需要93分钟。查找原因,发现千兆网口不稳定,网络连接虽然不会断开,但是数据平均丢包率 40%,也因此发现网口bug,修复代码如下: ![](https://cf02.ickimg.com/bbsimages/202004/450cd4dd737deef83623a1efe56bd0e8.png) 修复前后丢包率数据: ![](https://cf02.ickimg.com/bbsimages/202004/f04004b8f144c2af5ff50f9fc72dd597.png) 如果你的网口也有此问题,可以自己修复。
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
robe_zhang
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交