美文网首页工作生活
在 ARM64 上面运行 TiDB

在 ARM64 上面运行 TiDB

作者: siddontang | 来源:发表于2019-06-29 21:19 被阅读0次

    相比于 Intel 的 x86-64 架构,ARM 架构虽然作为后来者,但在服务器领域也开始在不停地攻城拔寨,很多企业也开始将自己的服务迁移到 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 系统,系统用 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 的时候还遇到了一些错误,不过多数就是传递编译参数的时候需要处理下 ARM64 相关的选项,并不是特别的困难。

    总的来说,编译并没有花太多的时间,这里有一个脚本,大家可以自行去看如何在 ARM64 上面编译 TiDB。对于运行集群需要的 Grafana 和 Prometheus,官方都提供了 ARM64 版本,大家可以直接去 Google。

    性能测试

    编译好了 ARM64 的版本,自然就是测试了,这里我使用了 go-ycsb 进行了简单的测试,这里我使用的是 16c32g 的 ARM64 机器,顺带也开了一台同配置的 x86 作为对比。

    在每台测试机器上面,启动一个 PD,一个 TiKV,使用的是默认配置,然后 go-ycsb 使用 100 并发,导入 1 百万数据,操作次数 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 的差了很多,需要来优化了。在网上找了这篇 文章,使用了上面的脚本,但发现没有什么变化。在这个脚本里面,主要的优化就是将网卡中断的处理绑定到某一个 CPU 上面,然后将 RPS 分散到不同的 CPU。对于 16c32g 的机器来说,这个脚本将网卡中断的处理绑定到 CPU core 0 和 8 上面,然后把 RPS 分散到所有的 CPU 上面,但是我通过 mpstat 发现,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 仍然是瓶颈。而这个瓶颈明显是网络处理造成的,直观的优化就是减少网络消息的处理,于是将 batch size 设为 128,可以发现在 ARM 上面性能提升很多,譬如对于 workload C,OPS 能提升到 118270。但即使这样,CPU core 0 和 8 还是会成为瓶颈。

    对比 ARM,x86 下面 CPU 的分配明显的均匀很多:

    所以后面我们要考虑的事情就是如何让 ARM 能更好的处理网络消息。

    总结

    上面简单的说了一下如何在 ARM 上面编译运行 TiDB,以及一些调优策略。个人认为,虽然 ARM 在性能上面还赶不上相同配置的 x86,但低功耗,成本这些是一个非常大的优势,加上很多不可说的原因,个人认为会有越来越多的企业使用 ARM,所以这块也会是趋势。

    相关文章

      网友评论

        本文标题:在 ARM64 上面运行 TiDB

        本文链接:https://www.haomeiwen.com/subject/fslmcctx.html