相比于 Intel 的 x86-64 架構耐朴,ARM 架構雖然作為后來者衡楞,但在服務器領域也開始在不停地攻城拔寨吱雏,很多企業(yè)也開始將自己的服務遷移到 ARM 架構上面,自然瘾境,對于 TiDB 來說歧杏,大家也想將 TiDB 運行到 ARM 上面。因為 AWS 上面直接提供了 ARM 機型迷守,所以我們決定先嘗試在 AWS 的 ARM 上面編譯運行 TiDB犬绒。
編譯
TiDB 主要包含三個組件 - PD,TiKV 和 TiDB兑凿,對于 PD 和 TiDB 來說凯力,使用的是 Go 進行編譯的,所以我們只需要在 ARM 機器上面裝好 Go 的版本就可以了急膀。這里沮协,我使用的是 go1.12.6.linux-arm64 這個版本。
用 Go 編譯 TiDB 和 PD 比較容易卓嫂,中途遇到了一個 TiDB 的編譯問題慷暂,只需要升級下 vendor 就解決了。
編譯 TiKV 就比較麻煩了晨雳,因為我們使用的是 CentOS 系統(tǒng)行瑞,系統(tǒng)用 yum 就能安裝相關的依賴,除了 cmake3 餐禁,裝 cmake 需要做如下處理:
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -ivh epel-release-latest-7.noarch.rpm
sudo yum install -y epel-release
sudo yum install -y cmake3
sudo ln -s /usr/bin/cmake3 /usr/bin/cmake
當然血久,編譯 RocksDB 還有 Titan 的時候還遇到了一些錯誤,不過多數(shù)就是傳遞編譯參數(shù)的時候需要處理下 ARM64 相關的選項帮非,并不是特別的困難氧吐。
總的來說,編譯并沒有花太多的時間末盔,這里有一個腳本筑舅,大家可以自行去看如何在 ARM64 上面編譯 TiDB。對于運行集群需要的 Grafana 和 Prometheus陨舱,官方都提供了 ARM64 版本翠拣,大家可以直接去 Google。
性能測試
編譯好了 ARM64 的版本游盲,自然就是測試了误墓,這里我使用了 go-ycsb 進行了簡單的測試蛮粮,這里我使用的是 16c32g 的 ARM64 機器,順帶也開了一臺同配置的 x86 作為對比谜慌。
在每臺測試機器上面然想,啟動一個 PD,一個 TiKV畦娄,使用的是默認配置又沾,然后 go-ycsb 使用 100 并發(fā)弊仪,導入 1 百萬數(shù)據(jù)熙卡,操作次數(shù) 1 百萬,batch size 為 0励饵。
結果如下:
x86 OPS | ARM OPS | |
---|---|---|
Load | 22948.5 | 14698.6 |
Workload A | Update 14244.5 Read 14224.5 |
Update 9932.6 Read 9917.8 |
Workload B | Update 4819.0 Read 92302.2 |
Update 2102.0 Read 39776.8 |
Workload C | Read 113663.1 | Read 49262.0 |
可以看到驳癌,ARM 的機器性能比 x86 的差了很多,需要來優(yōu)化了役听。在網(wǎng)上找了這篇 文章颓鲜,使用了上面的腳本,但發(fā)現(xiàn)沒有什么變化典予。在這個腳本里面甜滨,主要的優(yōu)化就是將網(wǎng)卡中斷的處理綁定到某一個 CPU 上面,然后將 RPS 分散到不同的 CPU瘤袖。對于 16c32g 的機器來說衣摩,這個腳本將網(wǎng)卡中斷的處理綁定到 CPU core 0 和 8 上面,然后把 RPS 分散到所有的 CPU 上面捂敌,但是我通過 mpstat
發(fā)現(xiàn)艾扮,core 0 和 8 幾乎被打滿:
于是我重新調了下,將 RPS 分散到除開 core 0 和 8 的地方:
sudo sh -c 'echo fe > /sys/class/net/eth0/queues/rx-0/rps_cpus'
sudo sh -c 'echo fe00 > /sys/class/net/eth0/queues/rx-1/rps_cpus'
然后 OPS 稍微提升了一點占婉,但 CPU core 0 和 8 仍然是瓶頸泡嘴。而這個瓶頸明顯是網(wǎng)絡處理造成的,直觀的優(yōu)化就是減少網(wǎng)絡消息的處理逆济,于是將 batch size 設為 128酌予,可以發(fā)現(xiàn)在 ARM 上面性能提升很多,譬如對于 workload C奖慌,OPS 能提升到 118270抛虫。但即使這樣,CPU core 0 和 8 還是會成為瓶頸升薯。
對比 ARM莱褒,x86 下面 CPU 的分配明顯的均勻很多:
所以后面我們要考慮的事情就是如何讓 ARM 能更好的處理網(wǎng)絡消息。
總結
上面簡單的說了一下如何在 ARM 上面編譯運行 TiDB涎劈,以及一些調優(yōu)策略广凸。個人認為阅茶,雖然 ARM 在性能上面還趕不上相同配置的 x86,但低功耗谅海,成本這些是一個非常大的優(yōu)勢脸哀,加上很多不可說的原因,個人認為會有越來越多的企業(yè)使用 ARM扭吁,所以這塊也會是趨勢撞蜂。