OneSQL :: 增加CPU绑定功能,优化性能,并为单机多实例布署提供方便

在测试分库分表中间件OneProxy的过程中,发现网卡中断所占的CPU很高,通过合理的CPU绑定优化并提升了将近10%的网络性能,即将第一个Core留给OS及软中断使用,而将其他的Core留给应用程序使用,可以增加整个系统的稳定性,机器永远不会失去响应,永远不会耗尽CPU资源。于是将CPU的绑定功能移到了OneSQL上,并在实验室12个核的环境上用sysbench远程压测到了35万QPS的值,同样的机器如果不绑定则只能压测到32万的样子。

OneSQL 5.6.34及以后的版本中,可以设置如下两个参数来进行CPU绑定:

mysql> show variables like 'tcc_cpu%';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| tcc_cpu_busy_count  | 2     |
| tcc_cpu_busy_offset | 0     |
+---------------------+-------+
2 rows in set (0.00 sec)

默认情况下,busy offset参数的值为0,表示从第一个核开始使用;而busy count的默认值为CPU核心的个数,即使用全部的CPU,因此默认情况下,不会做CPU绑定优化。在上述的测试环境中,将前两个CPU留给了软中断,通过修改“/etc/sysconfig/irqbalance”文件,增加软中断的CPU绑定功能,使其只使用前两个CPU线程,发下所示:

IRQBALANCE_BANNED_CPUS="FFFFFFFC"

更改配置文件后,需要运行“service irqbalance restart”命令来重起中断平衡服务,以使之生效。然后在“my.cnf”中设置busy offset参数来跳过前两个核心,如下所示:

tcc_cpu_busy_offset = 2

然后重起MySQL数据库使之生效(后面可以考虑使之动态生效)。在单机多实例布署的情况下,可以通过合理的CPU错位绑定,来控制CPU资源的分配,以防止CPU完全被某一个实使占用。比如服务器有12个Core,要运行两台MySQL服务器,每台服务器最多使用8个Core,则可以为第一台OneSQL设置如下参数:

tcc_cpu_busy_offset = 0
tcc_cpu_busy_count = 8

而为第二台OneSQL服务器设置如下参数:

tcc_cpu_busy_offset = 4
tcc_cpu_busy_count = 8

即可以使两台OneSQL服务器能共享一部份CPU资源,双不会完全得不到CPU资源,进行合理分配。当然也可以设置成每台机器最多使用10个核,只需要修改一下参数文件并重起服务即可。