ccache 真的能使你的 Xcode 飞起来?

前言

因为每次打包时间有点长(9min左右),组里要求进行优化,于是就有了ccache这个东东(当然组里的其他同学也进行了其它的优化)。

简单搜下ccache 发现文章并不多,就那么几篇,然后对比了一下,都很雷同,感情大家用的少啊!

于是按照上面的配置高兴的部到项目里,跑一下,木有啥问题,就是第一遍编译速度出奇的慢,不过第二遍那速度杠杠的。但在后续的部署过程中遇到到了一系列问题。

磁盘读写慢

在部署到CI机器(是一台Mini ,很老的机械硬盘)之后发现原本20min左右就跑完了,现在突然增到45min以上,不合理啊至少不能超过20min 吧。

带着这个问题,我观察了CI机上一次run的过程,发现一个问题,CPU 的使用率大部分时间都是维持在10%左右,只有一小部分是60%~80%,不对啊,我的本本在built 的过程中CPU 的使用率基本都是90%,为啥CPU 大部分时间都是在闲着呢?后面我看了下磁盘的IO读写,发现是满载荷,后续又观察了几次都是这个样子,我测了下磁盘读写速度:

time sh -c "dd if=/dev/zero of=/tmp/testfile bs=100k count=1k && sync"

额,仅仅只有 40MB/s,我的 15寸MacPro 600MB/s,好吧,不是一个量级的。后续 CI 机上就移除了 ccache ,仅在打包机(垃圾桶)上部署。

模块间的解耦

在使用ccache 的过程中,拉取同事的代码后,经常会出现 Build 时间过长的现象,用命令 ccache -s 查看后发现 cache 命中率下降。于是我分析了 ccache 的log,着重那些 miss 的类,发现其引用了相当多的模块,还有各种交叉的,引用很乱,组里的同学一改动就会波及到很多类,而对于那些引用很少的,命中率很高。所以模块间的耦合对 ccache 影响很大。后续组里同学们一起进行了模块的解耦,效果是很显著的。

PCH

PCH 这个东东简直就是 ccache 的克星,所以尽量克制,能不用则不用。我司的项目已经移除了 PCH。

ccache 配置

CCACHE_CPP2 这个设置我关闭,感觉这个设置很浪费时间
CCACHE_HARDLINK 这个设置也关闭,没必要使用压缩的缓存

其它的配置基本都是和大家搜的博客里一样了

策略

虽然进行了以上几个步骤,但 模块间的解耦 不是立即能够完成的,需要漫长的过程,有时候 ccache 仍然会大面积 miss 为了防止这样的情况出现,我们应该做 一个策略,当使用 ccache 超过某一个时间比如 10min,还没有完成打包或者编译 就自动禁掉 ccahce ,经过长时间的测试发现这个策略很好使,没有一次超过 30min 的。

总结

使用 ccache 并不一定就能使你的 Xcode 立即就飞起来,很可能会摔的更死,所以项目优化是必须的,同时硬件配置也要提升,磁盘的IO读写越快越好。

参考:
ccache 让你的编译时间飞起来

你可能感兴趣的:(ccache 真的能使你的 Xcode 飞起来?)