NUMA优化技术是针对数据库在NUMA架构CPU上运行时出现的资源消耗不均、并发场景下远端Node时延较高等问题进行优化的技术。GBase 8c数据库通过设置执行线程与Node节点的亲和度,可以将线程绑定在指定的CPU核心运行,从而避免跨Node调度,降低远端访问时延,提升数据库对外处理性能。同时,线程通过Node分配本地内存,也避免了某个Node节点内存耗尽而其他Node节点内存空闲的情况,充分使用CPU、内存等资源,从而提升数据库对外处理性能。
在多核CPU中合理调度线程,可以获得更高的性能。这当中,每个线程处理的任务优先级是不一样的,对于要求实时性比较高的线程或者是主线程,对于这种线程,我们可以在创建线程时指定其绑定到某个CPU核上,以后这个核就专门处理该线程。这样可以使得该线程的任务可以得到较快的处理,特别是和用户直接交互的任务,较短的响应时间可以提升用户的体验感。
目前GBase 8c支持在ARM服务器平台进行绑核操作。绑核参数设置步骤如下:
(1)安装GBase 8c数据库(这里就不提了)
(2)停止数据库,执行gha_ctl stop all -l http://dcs:2379。这个dcs IP如果不清楚的话,翻出安装yml文件看看。
(3)使用gs_guc工具修改数据库端口、IP等。
(4)使用gs_guc工具设置如下参数。
advance_xlog_file_num = 100
numa_distribute_mode = 'all'
thread_pool_attr = '464,4,(cpubind:1-27,32-59,64-91,96-123)'
xloginsert_locks = 16
wal_writer_cpu=0
wal_file_init_num = 20
xlog_idle_flushes_before_sleep = 500000000
pagewriter_sleep = 10ms
(5)执行如下命令以绑核方式启动服务端数据库。
numactl -C 1-27,32-59,64-91,96-123 gaussdb --single_node -D /data1/gaussdata -p 3625 &
其中0核用于wal_writer、1-27、32-59、64-91、96-123表示使用111个核运行TPC-C程序,其余的16个核用来处理服务端的网络中断。
(6)执行如下命令,将客户端CPU的48个核与网卡中断队列进行绑定:
sh bind_net_irq.sh 48
服务器端绑核设置
(1)业务进程在运行过程中,硬件上报的网络中断会导致频繁的上下文切换,严重影响效率,因此需要将网络中断和业务分开绑定在不同的核上运行
(2)当前数据库中引入了线程池机制,即数据库启动时,线程池将创建指定数目的线程来服务,线程在创建时会进行绑核,因此需要将网卡的绑核信息通过 GUC 参数传入,方便运行期间绑核设置。以128核为例,对应参数如下图
其中线程总数为(cpu总数128 - 处理网络的cpu数目16)* 每个核上线程数(经验值推荐7.25) = (128-16)*7.25 = 812,numa节点数为4,处理中断的核数为16。
这个位置cn和dn可以分开绑核,例如环境是96核,网卡中断绑核16
gs_guc reload -Z coordinator -N all -I all -c "thread_pool_attr='240,4,(cpubind:1-19,24-43,48-67,72-91)'"
gs_guc reload -Z datanode -N all -I all -c "thread_pool_attr='320,4,(cpubind:1-29,24-43,48-67,72-91)'"
其中每个核上的线程数可以适当调整看下效果。
TPC-C客户端绑核设置
客户端通过 numactl 将客户端绑定在除网卡外的核上,下图以 128 核环境举例,共80个核用于处理业务逻辑,剩余48个核处理网络中断。
对应TPC-C测试程序应该使用为:
numactl –C 0-19,32-51,64-83,96-115 ./runBenchmark.sh props.gbase
原文链接:
https://www.gbase.cn/community/post/3994
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
标签:Node,核调,数据库,线程,8c,91,优实,CPU,96
From: https://blog.51cto.com/u_17026136/12063188