注册
探索NUMA设置对达梦数据库的影响
技术分享/ 文章详情 /

探索NUMA设置对达梦数据库的影响

Live 2023/06/27 1831 5 0

从服务器架构说起

我们先来看一下服务器多CPU架构的变迁过程,一开始是单CPU,后来发展到双CPU或者多CPU的SMP架构,也就是多CPU共享相同的内存、总线、操作系统等资源,每个CPU访问全局内存任何地址耗费的时间都是相等的。还有一类AMP架构,即不同的CPU做的事情是不同的。但是由于共享访问的冲突,SMP架构扩展性-效率曲线已经达到瓶颈。

为了进一步提高CPU数量同时保证效率,NUMA架构出现了,也就是将多个SMP进行松一点的耦合,多个SMP之间通过CrossBar Switch 告诉交换矩阵互联,每个SMP都各有各自的内存,一个SMP内部的CPU访问自己的内存和之前没什么两样,但是要访问其它SMP处的内存,就需要走交换矩阵,导致延迟增加,所以,NUMA通过牺牲了内存访问的时延来达到更高的扩展性,比如将数百个CPU组成NUMA架构。SMP和NUMA架构对于软件程序方面的影响不大,同一台主机内都是用单一操作系统。但是由于NUMA访问远端内存时的时延问题,导致NUMA架构下的效率也不能随着CPU数量的增加而线性增长,只是比SMP好一些罢了。

其实,如果在NUMA架构下,软件也可以避免尽量少读取源端内存的话,那么NUMA效率也会线性增长,但是NUMA架构下的操作系统仍然是同一个,内存仍然是全局均匀的,而程序架构又尽量保持不变,那么就不可避免的是不是访问远端内存了。

以下时UMA和NUMA的架构图。

numa.png

uma.png

NUMA 与数据库应用

在数据库应用来说, NUMA 共享内存系统上运行的一种方法是忽略内存访问的非一致性。 只要不均匀性很小,这种方法就可以接受。 当近内存与远内存访问时间的比率超过 1.5:1 到 2:1 范围时,就会出现严重的内存访问瓶颈。 要避免这个问题,由两种基本方法:

a. 当分配内存供处理器使用时,使用该处理器的本地内存(避免使用远内存)。

b. 如果可能的话,worker 总是被安排在它之前所在的同一硬件处理器上。 这种组合允许 DBMS 工作负载在内存访问时间不一致的大规模共享内存系统上运行良好。

当然这两点都取决于数据库的设计。以上讨论都是基于忽略内存访问非一致性,尽量使用的数据都在本地内存中,而这在显然是不可控的。

一些数据库在设计实现对NUMA架构做了优化,可以感知NUMA拓扑来动态调整线程和内存分配,从而减少远程内存访问。目前查阅DM的文档还没有对NUMA架构的优化项,期待未来会有。对于单进程多线程的DM来说,对于共享内存的依赖会大些,所以在生产环境中是建议关闭的。

想象这样一个场景,用户说我有一个128C 512G 的服务器,想把DM数据库放上面,需要高并发下性能要好些。数据库需要关闭NUMA,退回到SMP架构,但是SMP架构会由于共享访问冲突CPU和内存无法得到充分利用,显然是有些浪费了。这个时候就可以考虑类似Oracle数据库的RAC架构了,因为用两台64C 256G 的 RAC 会比一台128C 512G的服务器性能更好,而且资源可以得到充分利用。

NUMA开启与关闭测试对比

基础环境信息

numa_node NUMA node0 CPU(s): 0-7 64-71 NUMA node1 CPU(s): 8-15 72-79 NUMA node2 CPU(s): 16-23 80-87 NUMA node3 CPU(s): 24-31 88-95 NUMA node4 CPU(s): 32-39 96-103 NUMA node5 CPU(s): 40-47 104-111 NUMA node6 CPU(s): 48-55 112-119 NUMA node7 CPU(s): 56-63 120-127 #缓存 L1d cache: 2 MiB L1i cache: 4 MiB L2 cache: 32 MiB L3 cache: 128 MiB #内存分配和NUMA拓扑 [dmdba@cxcp05 ~]$ numactl --hardware available: 8 nodes (0-7) node 0 cpus: 0 1 2 3 4 5 6 7 64 65 66 67 68 69 70 71 node 0 size: 63974 MB node 0 free: 21699 MB node 1 cpus: 8 9 10 11 12 13 14 15 72 73 74 75 76 77 78 79 node 1 size: 64476 MB node 1 free: 50571 MB node 2 cpus: 16 17 18 19 20 21 22 23 80 81 82 83 84 85 86 87 node 2 size: 64507 MB node 2 free: 38692 MB node 3 cpus: 24 25 26 27 28 29 30 31 88 89 90 91 92 93 94 95 node 3 size: 64507 MB node 3 free: 42954 MB node 4 cpus: 32 33 34 35 36 37 38 39 96 97 98 99 100 101 102 103 node 4 size: 64507 MB node 4 free: 47101 MB node 5 cpus: 40 41 42 43 44 45 46 47 104 105 106 107 108 109 110 111 node 5 size: 64507 MB node 5 free: 38380 MB node 6 cpus: 48 49 50 51 52 53 54 55 112 113 114 115 116 117 118 119 node 6 size: 64507 MB node 6 free: 46671 MB node 7 cpus: 56 57 58 59 60 61 62 63 120 121 122 123 124 125 126 127 node 7 size: 63483 MB node 7 free: 48231 MB node distances: node 0 1 2 3 4 5 6 7 0: 10 16 16 16 28 28 22 28 1: 16 10 16 16 28 28 28 22 2: 16 16 10 16 22 28 28 28 3: 16 16 16 10 28 22 28 28 4: 28 28 22 28 10 16 16 16 5: 28 28 28 22 16 10 16 16 6: 22 28 28 28 16 16 10 16 7: 28 22 28 28 16 16 16 10

测试结果

NUMA ON

仓数 并发用户 TPMC 平均响应时间(ms) CPU利用率(%) 内存利用率(%) Disk %Busy
100 100 592438.31 0.0456 33.6 5.33 99
100 200 418462.35 0.0645 28.5 8.12 98.9
100 500 382744.58 0.0706 26.3 8.22 98.1
100 1000 373865.43 0.0722 25.9 8.83 98
1000 100 572575.03 0.0472 37.4 25.85 99
1000 200 392141.93 0.0688 30.2 20.1 99
1000 500 373636.98 0.0723 29.4 22.85 99.3
1000 1000 338914.79 0.0796 30.1 39.92 99.4
1000 2000 339291.04 0.0795 30.2 38.82 99.4

NUMA OFF

仓数 并发用户 TPMC 平均响应时间(ms) CPU利用率(%) 内存利用率(%) Disk %Busy
100 100 568200.56 0.0475 34.4 14.65 98.8
100 200 498741.71 0.0542 31.2 17.2 99.9
100 500 480804.68 0.0562 30 17.35 99.7
100 1000 471011.37 0.0573 30.7 18.9 98.9
1000 100 506707.97 0.0533 39.3 16.21 99.1
1000 200 468946.53 0.0575 34 29.87 99.2
1000 500 454950.23 0.0594 32.7 32.77 98.5
1000 1000 430456.26 0.0627 32.5 39.24 98
1000 2000 432045.43 0.0625 31.9 47.28 99.7

图表分析

100仓TPMC.png

1000仓TPMC.png

结合图标分析可知,100并发时,NUMA开启性能会更好些,这是因为并发低数据冲突的概率就会小些,加上SMP架构本身内存访问也是有瓶颈的,所以NUMA架构会稍微好些。但是随着并发增加,NUMA关闭性能会更好些,也就是说,并发数多时内存访问数据冲突的概率会更大,远程内存访问会影响性能。

最后,如有不当之处,欢迎交流,共同进步!

参考资料

《大话存储》冬瓜哥著

简单聊聊数据库与NUMA - 墨天轮 (modb.pro)

《Architecture of a Database System》,Joseph M. Hellerstein1, Michael Stonebraker2 and James Hamilton3

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服