5

MySQL该使用哪种CPU架构服务器? - jyzhou

 1 year ago
source link: https://www.cnblogs.com/zhoujinyi/p/16880861.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1. 摘要

近期,阿里云推出基于 ARM 架构的 RDS MySQL 和 RDS PostgreSQL 实例,现处于邀测阶段,阿里云宣传 ARM 架构的亮点是:在价格下降13%的基础上,平均性能 ARM 架构比 X86 架构提升10%,性价比提升25%参考

该选择哪种CPU架构给MySQL实例呢?只有通过测试才能得出结论。在测试不同架构的MySQL之前,先了解下当前CPU的两种架构:X86 和 ARM。也可以直接到第4部分看「测试结果」。

具体的信息可以看:MySQL该使用哪种CPU架构服务器

关注公众号 163084-20220511110320004-1304986996.png ,能够第一时间了解行业动态。

2. X86 vs ARM

CISC(complex instruction set computer,复杂指令集计算机)和 RISC(reduced instruction set computer,精简指令集计算机)是当前CPU的两种架构。它们的区别是不同的CPU设计理念和方法,虽然都是在体系结构、操作运行、软件硬件、编译时间等诸多因素中做出某种平衡,以求达到高效的目的,但因采用的方法不同导致在很多方面差异很大。X86架构采用CISC,而 ARM 采用 RISC。

  • 什么是X86架构
    X86 是Intel在1978年推出,是当时最先开发制造的一种微处理器体系的结构。目前的PC架构绝大多数都是Intel的 X86 架构,也是因为该架构造让Intel统治整个CPU产业链长达数十年。
    X86 基于CISC,是一种微处理器指令集架构,每个指令可执行若干操作,以增加处理器本身复杂度作为代价,去换取更高的性能,增加了功耗和设计难度

  • 什么是ARM架构
    ARM 成立于1991年,是全球领先的半导体知识产权提供商(ARM Holdings)。采用将芯片的设计方案授权给其他硬件制造商,该方式使它在全球上有了上百个合作伙伴:高通、华为、联发科、飞思卡尔、TI等。
    相较于 X86 架构处理器,ARM 架构则大幅简化架构,仅保留所需要的指令。虽在最初的PC架构中败给 Intel 主导的 X86 架构,但其低成本、高性能和低功耗的特性,让它在移动市场比 X86 更具优势,如智能手机、平板电脑、嵌入式系统等。

  • 二者区别
    X86是服务器市场的主流架构,而 ARM 是目前最普及的移动电子设计方案的架构。几乎所有智能手机以及其他小型移动设备和笔记本电脑都采用的是 ARM 架构。从下面几方便大致了解下它们间的一些差异,关于更多的信息可以查看文章最后部分的参考文档。

    • 性能:
      X86 架构比 ARM 架构的系统在性能方面要强得多。X86 追求的是性能,而ARM 架构的处理器则致力于实现成本与更小尺寸、更低功耗、更长电池使用时间之间的平衡,以能效为目标。

    • 兼容性:
      X86 架构比 ARM 架构的系统在兼容性方面要好得多。X86 由微软及Intel构建的Wintel联盟垄断了个人电脑操作系统近30年,在硬件和软件开发方面已经形成统一的标准。
      ARM 系统几乎都采用Linux操作系统,而且大部分的硬件系统都要单独构建,与其他系统不能兼容,这一点严重制约了 ARM 系统的发展和应用。在2007年Google开发了Android系统,并统一了 ARM 结构的操作系统,以及Apple公司的助力(基于 ARM 的M1、M2),为 ARM 的发展提供了强大的支持和动力。

    • 扩展性:
      X86 架构的电脑采用“桥”的方式与扩展设备(如:硬盘、内存等)进行连接,由于 X86 架构统治了PC机近30年,其配套扩展的设备种类多,所以 X86 架构很容易进行扩展,如增加内存、硬盘等。
      ARM 架构的电脑是通过专用的数据接口使CPU与数据存储设备进行连接,所以 ARM 的存储、内存等不容易扩展。

    • 自由性:
      Intel是一个全封闭式的商业模式,从头到尾控制其整个设计和生产,并直接销售芯片。将其架构、CPU 设计甚至制造完全保持在内部,利用垄断获取更大的利益。
      ARM 是一个开放式的商业模式,自己并不生产处理器,而是将芯片的设计方案授权给其他硬件制造商,制造商可以根据市场需求修改和生产。这也是为什么ARM拥有众多拥护者的主要原因,华为、苹果、三星、英伟达、高通等都是 ARM 的代表。

3. 如何选择

在过去十年到现在,随着生态系统越来越多地支持这两种架构,RISC 和 CISC 之间的界限变得越来越模糊。但在可预见的未来,ARM 仍是智能手机行业等移动领域的首选架构,Intel 在低功耗方面的努力多年来也有所改进,并且Intel 在PC和服务器领域使用的 X84-64 架构在性能方面仍然领先ARM。MySQL 是目前最流行的关系型数据库管理系统,X86-64架构的服务器几乎是其标配。但随着云计算的不断发展,全球主流的云厂商为了降低总体成本和提高整体效率,都相继开始尝试用低功耗、低成本的 ARM 架构来作为数据库服务器。如阿里云在近期推出的基于ARM 架构的 RDS MySQL和 RDS PostgreSQL。

本文将对部署在不同架构服务器上的 MySQL 实例进行测试,来了解下ARM 和X86 架构下的MySQL的性能表现。

4. 测试结果

通过对「读写」、「只读」、「只写」场景下的压测,并取压测结果QPS、TPS的平均值之和来统计,得到结果

  • 读写场景:「X86-RDS」性能和「ARM-RDS」几乎持平,差距不大(2%以内);「X86-ECS」性能比「ARM-ECS」平均高17%左右。

  • 只读场景:「X86-RDS」性能「ARM-RDS」几乎持平,差距不大(3%以内);「X86-ECS」性能比「ARM-ECS」平均高20%左右。

  • 只写场景:「X86-RDS」性能比「ARM-RDS」平均高15%左右(当CPU没有被打满差距不大,当CPU被打满差10% ~ 20%);「X86-ECS」性能比「ARM-ECS」平均高20%左右。

5. 测试说明

5.1 测试环境

  • 数据超过 innodb_buffer_pool_size

  • 高性能模板参数

    sync_binlog                     = 1000
    innodb_flush_log_at_trx_commit  = 2
    innodb_flush_method             = O_DIRECT
    innodb_buffer_pool_size         = 6gb
    innodb_flush_neighbors          = 0
    max_prepared_stmt_count         = 1048575
  • 实例规格

    163084-20221111205453874-1855499754.png

5.2 测试方法

-- 准备数据
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=600 --threads={2~128} oltp_read_write prepare

-- 运行workload
# OLTP读写混合
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=600 --threads={2~128} --percentile=99 --report-interval=20 oltp_read_write run

# OLTP只读场景
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=600 --threads={2~128} --percentile=99 --skip-trx=1 --report-interval=20 oltp_read_only run

# OLTP只写场景
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=600 --threads={2~128} --percentile=99 --report-interval=20 oltp_write_only run

-- 清理数据
sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=10000000 --tables=10 --events=0 --time=600   --threads={2~128} --percentile=99  oltp_read_write/oltp_read_only/oltp_write_only cleanup

5.3 测试场景

对读写、只读、只写三个场景,线程数从2到128进行压测说明。

5.3.1 读写场景

163084-20221111160641530-1531553368.png
163084-20221111160658024-2134949609.png
163084-20221111160722216-731166559.png
163084-20221111160732336-194360049.png

 

Latency:

163084-20221111160744501-677528120.png
163084-20221111160751231-2121340115.png

 

5.3.2 只读场景

163084-20221111160926042-2107600979.png
163084-20221111160931841-1652858496.png
163084-20221111160939564-965818037.png
163084-20221111160947065-1546726801.png

Latency:

163084-20221111160956260-1624809916.png
163084-20221111161004686-3748421.png

5.3.3 只写场景

163084-20221111161156516-1278606911.png
163084-20221111161203244-132521898.png
163084-20221111161214417-62299248.png
163084-20221111161221016-1734188664.png

Latency:

163084-20221111161230174-100536082.png
163084-20221111161236814-1457938891.png

最后,从「测试说明」里得出:

  • 在阿里云RDS for MySQL中,基于ARM架构和X86 架构的MySQL实例在「读写」、「只读」场景下,性能接近;在「只写」场景下,基于X86架构比 ARM架构的MySQL实例性能高15%。

  • 在自建MySQL实例中,各场景下,本例中X86架构的服务器性能高于ARM架构的服务器20%,具体的性能会随着服务器CPU主频(GHz)不同而有所差异。

6. 总结

所以,最后可以回答标题中的问题了:MySQL该使用哪种CPU架构服务器?

  • 如果使用RDS MySQL,在满足性能的前提下(读写差不多或读多写少),从性价比上选择,首选 ARM 架构的实例;要是写的压力比较大(写远高于读),首选X86架构的实例。

  • 如果使用自建MySQL,首选X86架构的实例(在CPU主频区别不大的情况下)。

另外,此次性能测试的结果和阿里云宣传的有一些差异。咨询了阿里云的工作人员,给出的答复是:邀测获得免费ARM架构的RDS MySQL实例,其内核及所在的ECS不是最终商业化后的。在商业化后,RDS内核及ECS配置会更新,性能会有进一步提升。

补充,在MySQL On ARM的文章中:自建MySQL实例,在低负载下,ARM和X86架构在读性能上差距不大,在高负载下,X86的性能要优于ARM;在有写的场景下,ARM要差于X86架构。

参考文档

[redhat] https://www.redhat.com/en/topics/linux/what-is-arm-processor

[wikipedia] https://en.wikipedia.org/wiki/ARM_architecture_family

[wikipedia] https://en.wikipedia.org/wiki/X86

[androidauthority] Arm vs x86: Instruction sets, architecture, and all key differences explained

https://bbs.elecfans.com/m/jishu_2099774_1_1.html

https://m.elecfans.com/article/678193.html

https://server.zol.com.cn/354/3542316.html

https://www.makeuseof.com/x86-vs-arm-which-architecture-should-pc-use/

https://www.makeuseof.com/tag/cpu-technology-explained/

https://engineering.carsguide.com.au/arm-versus-x86-for-database-server-comparison-review-8911d3c582e9

https://mysqlonarm.github.io/MySQL-on-x86-vs-ARM/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK