硬件架构对 数据库的影响 MYSQL 应该在ARM 还是X86 (翻译)

2021-11-26 15:00:57 浏览数 (1)

下面就是一篇关于MYSQL 在 ARM 结构和X86结构上不同的性能表现的文字翻译,实话说曾经测试时(PG),ARM结构的VS X86结构的PG 的确X86更有优势。下面我们看看MYSQL 在不同的物理结构上的不同表现。别说和你没有关系,ARM结构的服务器已经渗透到了 云厂商,国家政府,军队,等等部门和机构,谁也保不准就用上了ARM 结构的服务器。

———————————————————————————————

译文:

MYSQL 在X86 或 ARM 结构,当我们讨论这个问题的时候,可能随着不断的扩展,会发现很多有意思的事情,但在我们面对很多的数据之前,我们先明白一下这两种结构的不同,除了从CISC 和 RISC 结构来看不同以外,我们最重要的主题是针对MYSQL来说那个结构更好。

这里有几个问题

1 内存模式的高低

2 底层专用指令的不同,例如对于CRC32编码基于硬件没有不同而不同 在于处于底层的指令集合X86 SSE 或者 ARM-ACLE 对指令执行的不同。

3 Cahce的不同,基于ARM结构的处理器更倾向于使用大量的缓存。

4 比如ARM 结构中缺少PAUSE指令,导致在需要低延迟的情况下,无替代指令,某些操作在ARM上的消耗更大,造成一些操作上的挑战和内存使用的问题,如在使用中会有高延迟。

实际上社区已经在MYSQL 上做了一些补丁来适应,但实际上MYSQL 对于ARM结构的支持刚刚开始,大部分工作尚未完成,只优化了少部分的代码。

所以我们现在最重要的是看看一些关于性能方面的问题,我们通过MYSQL 8.019来进行测试,分别在不同的硬件产品上 X86 和 ARM 上来进行比较。

测试硬件为

  • 24 vCPU/48 GB Intel(R) Xeon(R) Gold 6266C CPU @ 3.00GHz for running MySQL on x86.
  • 24 vCPU/48 GB ARM @ 2.60GHz for running MySQL on ARM

两种不同的硬件产品,测试是通过sysbench进行的,测试中数据经过预热,并且通过不同维度的包含OLTP 读写操作, UPDATE 操作中包含索引和不包含索引,以及只读操作等等来查看两种硬件在此的不同。

相关测试的表和配置如下

  • Table: 96-tables * 1.5 million (data-size= 34GB)
  • Buffer Pool: 36GB
  • Redo-Log: 4GB*2
  • TC-run-time: 300 secs
  • TC-warmup: 60 (sysbench –warmup-time)
  • workload-query-based warmup: 600
  • change-over-sleep: 180
  • checksum-based-warmup: enabled
  • data-storage: 300GB (support for 16500 IOPS (nullify effect of Burst IOPS)).

测试结果

1 简单查询


threads

ARM (qps)

x86 (qps)

ARM (qps - fscaled (FS))

% ARM-vs-x86

% ARM (FS)-vs-x86

1

6696

6439

7726

4

20

2

12482

11774

14402

6

22

4

23881

21308

27555

12

29

8

45993

42110

53069

9

26

16

88517

81239

102135

9

26

32

142974

136724

164970

5

21

64

198839

212484

229430

-6

8

128

217778

241555

251282

-10

4

256

209797

224009

242073

-6

8

分析:
在较低线程的情况下,ARM 要优于X86结构,在高负载的情况下,X86要优于ARM结构,同时在FS CPU 自动调整频率的情况下ARM 结构 比X86要优越。

2 只读测试


threads

ARM (qps)

x86 (qps)

ARM (qps - fscaled (FS))

% ARM-vs-x86

% ARM (FS)-vs-x86

1

5222

5259

6025

-1

15

2

10333

10200

11923

1

17

4

19176

19349

22126

-1

14

8

36881

37035

42555

0

15

16

70337

67065

81158

5

21

32

109207

113210

126008

-4

11

64

139294

164148

160724

-15

-2

128

151382

175872

174672

-14

-1

256

149136

164382

172080

-9

5

结果分析:
ARM 结构在定频的方式下与X86性能相近,但在FS的情况下,ARM结构产品要优于X86的产品。

3 读写模式


threads

ARM (tps)

x86 (tps)

ARM (tps - fscaled (FS))

% ARM-vs-x86

% ARM (FS)-vs-x86

1

137

149

158

-8

6

2

251

273

290

-8

6

4

462

502

533

-8

6

8

852

920

983

-7

7

16

1539

1678

1776

-8

6

32

2556

2906

2949

-12

1

64

3770

5158

4350

-27

-16

128

5015

8131

5787

-38

-29

256

5676

8562

6549

-34

-24

结果分析:
在读写模式下, ARM 结构比较X86结构都有一定的差距。

4 update 带索引的情况


threads

ARM (tps)

x86 (tps)

ARM (tps - fscaled (FS))

% ARM-vs-x86

% ARM (FS)-vs-x86

1

328

373

378

-12

1

2

623

768

719

-19

-6

4

1060

1148

1223

-8

7

8

1905

2028

2198

-6

8

16

3284

3590

3789

-9

6

32

5543

6275

6396

-12

2

64

9138

10381

10544

-12

2

128

13879

16868

16014

-18

-5

256

19954

25459

23024

-22

-10

结果分析:

在FS 模式下的ARM结构对比X86的结果相近,在高并发的情况下还是有一定的差距。

5 Update 不带索引的情况


threads

ARM (tps)

x86 (tps)

ARM (tps - fscaled (FS))

% ARM-vs-x86

% ARM (FS)-vs-x86

1

328

373

378

-12

1

2

588

686

678

-14

-1

4

1075

1118

1240

-4

11

8

1941

2043

2240

-5

10

16

3367

3662

3885

-8

6

32

5681

6438

6555

-12

2

64

9328

10631

10763

-12

1

128

14158

17245

16336

-18

-5

256

20377

26367

23512

-23

-11

结果分析:

在低并发的情况下,ARM结构FS模式要比X86性能略强,但在高并发的情况下,MYSQL在X86要比ARM结构表现的更好。

总结:

以下是一些测试通过观察我们得出的结论

1 对于只读工作负载,X86 与ARM 性能相近

2 对于写操作,X86比较稳定,ARM结构中FS模式会更好

3 FS 模式下的ARM并不是大多数情况下的使用方式,但需要注意的是ARM结构的产品比X86产品的价格要低,测试中随着系统争用变多,ARM系统的性能降低,但我们也需要注意MYSQL 也是刚刚开始支持ARM结构的产品,尤其的自旋锁上并没有像X86一样进行优化。

总结:MYSQL 从使用成本考量上,ARM结构的产品应该还是一个性价比可期待的。

原文:

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

注:FS 模式为CPU 超频模式

个人观点:在目前的情况下,无论是PG 还是MYSQL 尽量还是在X86结构的硬件产品上使用,ARM结构目前对于这些开源数据库并不是太友好,尤其在高并发的情况下。

0 人点赞