近期,阿里雲推出基於 ARM 架構的 RDS MySQL 和 RDS PostgreSQL 範例,現處於邀測階段,阿里雲宣傳 ARM 架構的亮點是:在價格下降13%的基礎上,平均效能 ARM 架構比 X86 架構提升10%,價效比提升25%。參考
那該選擇哪種CPU架構給MySQL範例呢?只有通過測試才能得出結論。在測試不同架構的MySQL之前,先了解下當前CPU的兩種架構:X86 和 ARM。也可以直接到第4部分看「測試結果」。
具體的資訊可以看:MySQL該使用哪種CPU架構伺服器,
關注公眾號 ,能夠第一時間瞭解行業動態。
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 的代表。
在過去十年到現在,隨著生態系統越來越多地支援這兩種架構,RISC 和 CISC 之間的界限變得越來越模糊。但在可預見的未來,ARM 仍是智慧手機行業等移動領域的首選架構,Intel 在低功耗方面的努力多年來也有所改進,並且Intel 在PC和伺服器領域使用的 X84-64 架構在效能方面仍然領先ARM。MySQL 是目前最流行的關係型資料庫管理系統,X86-64架構的伺服器幾乎是其標配。但隨著雲端計算的不斷髮展,全球主流的雲廠商為了降低總體成本和提高整體效率,都相繼開始嘗試用低功耗、低成本的 ARM 架構來作為資料庫伺服器。如阿里雲在近期推出的基於ARM 架構的 RDS MySQL和 RDS PostgreSQL。
本文將對部署在不同架構伺服器上的 MySQL 範例進行測試,來了解下ARM 和X86 架構下的MySQL的效能表現。
通過對「讀寫」、「唯讀」、「只寫」場景下的壓測,並取壓測結果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.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
對讀寫、唯讀、只寫三個場景,執行緒數從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)不同而有所差異。
所以,最後可以回答標題中的問題了: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/