MySQL該使用哪種CPU架構伺服器?

1. 摘要

近期,阿里雲推出基於 ARM 架構的 RDS MySQL 和 RDS PostgreSQL 實例,現處於邀測階段,阿里雲宣傳 ARM 架構的亮點是:在價格下降13%的基礎上,平均性能 ARM 架構比 X86 架構提升10%,性價比提升25%參考

該選擇哪種CPU架構給MySQL實例呢?只有通過測試才能得出結論。在測試不同架構的MySQL之前,先了解下當前CPU的兩種架構:X86 和 ARM。也可以直接到第4部分看「測試結果」。

具體的資訊可以看:MySQL該使用哪種CPU架構伺服器

關注公眾號  ,能夠第一時間了解行業動態。

 

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擁有眾多擁護者的主要原因,華為、蘋果、三星、NVIDIA 、高通等都是 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
  • 實例規格

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 讀寫場景

QPS:

 TPS:

 

Latency:

 

5.3.2 只讀場景

QPS:

TPS:

Latency:

5.3.3 只寫場景

QPS:

TPS:

Latency:

最後,從「測試說明」里得出:

  • 在阿里雲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] //www.redhat.com/en/topics/linux/what-is-arm-processor

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

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

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

其他

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

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

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

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

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

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

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

 

Tags: