ccache 真的能使你的 Xcode 飛起來?

前言

因?yàn)槊看未虬鼤r間有點(diǎn)長(9min左右),組里要求進(jìn)行優(yōu)化,于是就有了ccache這個東東(當(dāng)然組里的其他同學(xué)也進(jìn)行了其它的優(yōu)化)。

簡單搜下ccache 發(fā)現(xiàn)文章并不多,就那么幾篇,然后對比了一下,都很雷同,感情大家用的少啊!

于是按照上面的配置高興的部到項(xiàng)目里,跑一下,木有啥問題,就是第一遍編譯速度出奇的慢,不過第二遍那速度杠杠的。但在后續(xù)的部署過程中遇到到了一系列問題。

磁盤讀寫慢

在部署到CI機(jī)器(是一臺Mini ,很老的機(jī)械硬盤)之后發(fā)現(xiàn)原本20min左右就跑完了,現(xiàn)在突然增到45min以上,不合理啊至少不能超過20min 吧。

帶著這個問題,我觀察了CI機(jī)上一次run的過程,發(fā)現(xiàn)一個問題,CPU 的使用率大部分時間都是維持在10%左右,只有一小部分是60%~80%,不對啊,我的本本在built 的過程中CPU 的使用率基本都是90%,為啥CPU 大部分時間都是在閑著呢?后面我看了下磁盤的IO讀寫,發(fā)現(xiàn)是滿載荷,后續(xù)又觀察了幾次都是這個樣子,我測了下磁盤讀寫速度:

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

額,僅僅只有 40MB/s,我的 15寸MacPro 600MB/s,好吧,不是一個量級的。后續(xù) CI 機(jī)上就移除了 ccache ,僅在打包機(jī)(垃圾桶)上部署。

模塊間的解耦

在使用ccache 的過程中,拉取同事的代碼后,經(jīng)常會出現(xiàn) Build 時間過長的現(xiàn)象,用命令 ccache -s 查看后發(fā)現(xiàn) cache 命中率下降。于是我分析了 ccache 的log,著重那些 miss 的類,發(fā)現(xiàn)其引用了相當(dāng)多的模塊,還有各種交叉的,引用很亂,組里的同學(xué)一改動就會波及到很多類,而對于那些引用很少的,命中率很高。所以模塊間的耦合對 ccache 影響很大。后續(xù)組里同學(xué)們一起進(jìn)行了模塊的解耦,效果是很顯著的。

PCH

PCH 這個東東簡直就是 ccache 的克星,所以盡量克制,能不用則不用。我司的項(xiàng)目已經(jīng)移除了 PCH。

ccache 配置

CCACHE_CPP2 這個設(shè)置我關(guān)閉,感覺這個設(shè)置很浪費(fèi)時間
CCACHE_HARDLINK 這個設(shè)置也關(guān)閉,沒必要使用壓縮的緩存

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

策略

雖然進(jìn)行了以上幾個步驟,但 模塊間的解耦 不是立即能夠完成的,需要漫長的過程,有時候 ccache 仍然會大面積 miss 為了防止這樣的情況出現(xiàn),我們應(yīng)該做 一個策略,當(dāng)使用 ccache 超過某一個時間比如 10min,還沒有完成打包或者編譯 就自動禁掉 ccahce ,經(jīng)過長時間的測試發(fā)現(xiàn)這個策略很好使,沒有一次超過 30min 的。

總結(jié)

使用 ccache 并不一定就能使你的 Xcode 立即就飛起來,很可能會摔的更死,所以項(xiàng)目優(yōu)化是必須的,同時硬件配置也要提升,磁盤的IO讀寫越快越好。

參考:
ccache 讓你的編譯時間飛起來

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容