关于NUMA的介绍我这里就不多说了,网上太多资料了,我在这篇文章要介绍的是如何在MySQL多实例场景下使用numactl来绑定各个实例到具体的物理节点上,避免跨节点分配内存和跨节点访问寄存器。
至于为何使用多实例,因为MySQL对于多处理机和大内存的利用效率不佳,采用多实例可以很大程度提高MySQL对资源的利用,详情可以看Percona的白皮书中对多实例的测试:Scaling MySQL With Virident Flash Drives and Multiple Instances of Percona Server
.
numactl这个程序的用法可以参照man手册:http://linux.die.net/man/8/numactl
基本用法是“numactl [option] 程序路径”,例如我希望用numactl启动mysqld则是numactl
[option]
/usr/local/mysql/bin/mysqld。曾经我误以为numactl是控制某一个程序名,汗……亲手做过才明白是程序路径。
我只介绍几个重要参数
–interleave=all 这是使用交叉分配模式启动一个程序,也就是说程序可以随意跨节点用其他节点的内存,传说中这是效率最高的关闭NUMA特性的方法,只是传说。
–cpunodebind=node 这是把程序绑定在指定的node节点上运行,即使另一个物理节点是idle的,也不会去使用。
–localalloc 严格控制只在节点内分配内存,禁止分配其他节点下的内存到当前节点运行的程序。
我们启动MySQL希望的参数是 numactl –cpunodebind=node –localalloc mysqld_path
为了运维方便,我不可能每次mysql启动都这么执行,我依然希望通过/etc/init.d/mysql和mysqld_multi来管理mysql启动和关闭,于是我采用自定义启动脚本的方式。
首先编写自定义启动脚本如下:
#!/bin/sh
# Program Path
NUMACTL=`which numactl`
MYSQLD=/usr/alibaba/mysql/libexec/mysqld
PS=`which ps`
GREP=`which grep`
CUT=`which cut`
WC=`which wc`
EXPR=`which expr`
# Variables
CPU_BIND=(`$NUMACTL --show | $GREP nodebind | $CUT -d: -f2 `) # CPU bins list
CPU_BIND_NUM=${#CPU_BIND[@]} # How many CPU binds
MYSQLD_NUM=`$PS aux | $GREP mysqld | $GREP -v grep | $GREP '\<mysqld\>' | $WC -l`
MYSQLD_NUM=`$EXPR $MYSQLD_NUM + 1`
BIND_NO=`$EXPR $MYSQLD_NUM % $CPU_BIND_NUM ` # Calc Which CPU to Bind
# echo CMD
echo "$NUMACTL --cpunodebind=$BIND_NO --localalloc $MYSQLD" > /tmp/mysqld.$MYSQLD_NUM
# use exec to avoid having an extra shell around.
exec $NUMACTL --cpubind=$BIND_NO --localalloc $MYSQLD "$@"
方法是查看当前有多少个mysqld进程已经存在,并且通过numactl
–show判断有多少个物理节点,从而判断当前的进程应该分配给哪个节点,例如有2个物理节点,没有mysqld进程,则分配当前进程到0节点,再启动一
个实例,当前已经有1个mysqld进程,则分配到1节点,再启动一个实例到0节点……依次循环。
然后在my.cnf文件中配置使用我们自己的脚本启动:
[mysqld_safe]
......
ledir=/usr/local/mysql/bin/ # 放自定义脚本的目录
mysqld=mysqld_using_numactl # 自定义脚本的名称
然后再用/etc/init.d/mysql或mysqld_multi启动mysqld进程就可以实现绑定了。
你可以先启动一个实例,然后在MySQL里做一些消耗CPU的操作,可以观察到只有一个物理节点上的core有活动,哪怕这个节点的core全是100%的利用率,另一个节点的core也全部都是闲的~
有兴趣的话赶紧尝试一下吧~
分享到:
相关推荐
Oracle-NUMA绑定脚本Oracle-NUMA绑定脚本Oracle-NUMA绑定脚本Oracle-NUMA绑定脚本Oracle-NUMA绑定脚本Oracle-NUMA绑定脚本
本篇文章将深入探讨如何完美获取 CPU 的 NUMA 节点数、CPU 插槽个数、核心数、逻辑处理器数(线程数)、名字、制造商、指令集以及主频等关键信息。 首先,让我们理解这些概念: 1. **NUMA节点数**:NUMA(Non-...
NUMA(Non-Uniform Memory Access)是现代多处理器系统中的一种内存访问架构,它旨在提高大规模多核心系统的性能。在NUMA系统中,每个处理器都有其本地内存,访问本地内存的速度通常比访问远程处理器的内存快。NUMA...
在这样的背景下,虚拟处理器调度方法的目标是确保工作负载被合理地分配到各个处理器核心,减少跨NUMA节点的数据传输,以最大化性能。一种可能的策略是尽量将同一服务实例或玩家连接相关的线程绑定在同一NUMA节点上,...
1. **进程绑定**:通过numactl等工具,将进程绑定到特定的处理器节点,确保大部分内存访问发生在本地。 2. **数据布局**:尽量使数据与处理它的代码在同一节点上,减少跨节点的数据传输。 3. **库和框架优化**:...
【基于CC-NUMA的多处理器系统研究】 随着计算机技术的发展,多处理器系统已经成为高性能计算领域的重要组成部分。本文主要探讨了一种新型的CC-NUMA(Clustered Cache-Coherent Non-Uniform Memory Access)架构,该...
SMP架构涉及一种多处理器计算机硬件架构,在这种架构中两个或多个相同的处理器通过单一共享主内存连接,并由单一操作系统实例控制。在SMP架构中,每个CPU都可以访问系统中的任何内存,因此它们访问任何内存位置的...
随着处理器技术的飞速发展,多核处理器已经成为计算机硬件的主流,尤其是cc-NUMA(Cache-Coherent Non-Uniform Memory Access,缓存一致性的非一致性内存访问)架构,它允许处理器在不同的内存节点之间进行高效的...
在讨论基于NUMA架构的TCMalloc内存管理算法之前,我们先来深入了解NUMA架构和...开发者在进行多处理器软件开发时,考虑NUMA特性并进行相应的内存管理优化,可以避免常见的性能瓶颈,从而充分利用现代服务器硬件的潜力。
- 当一个进程被绑定到特定节点时,尽可能地使用该节点的内存。 - 适用于固定CPU访问和足够的页面分配场景。 - **多节点应用程序的最佳分配** - 对于需要跨越多个节点的应用程序,需要考虑复杂的内存分配策略。 -...
5. **缓存亲和性**:NUMA模拟可能会考虑缓存一致性,确保数据访问尽可能保持在处理器的高速缓存内,避免频繁的缓存失效。 6. **I/O设备分配**:对于具有多个I/O设备的系统,NUMA模拟可能会影响设备的分配,以减少跨...
在讨论NUMA之前,我们需要了解多处理器系统的性能评判标准。性能评判的标准有三个:可扩展性(Scalability)、延迟(Latency)和带宽(Bandwidth)。可扩展性指的是系统随着处理器数量增加而展现出的并行加速比例...
多核心处理意味着在一个封装内集成多个处理器核心,每个核心都能独立执行任务,从而提高了计算机的并发处理能力。这在解决复杂的计算问题和提升系统性能方面具有显著优势。 NUMA(Non-Uniform Memory Access)架构...
NUMA架构设计的目标是解决多处理器系统中内存访问延迟的问题,通过将物理CPU、内存和I/O资源组织成更小的计算节点,从而提高数据处理效率。 在一个单服务器的NUMA架构中,本地内存和远程内存的概念至关重要。每个...
- **物理核心与虚拟核心映射**:物理核心与虚拟核心之间建立映射关系,以确保虚拟机的vCPU能正确地绑定到物理NUMA节点。 - **内存分配策略**:为了提高性能,内存调度器尽可能地将虚拟机的内存分配到其vCPU所在物理...
NUMA(Non-Uniform Memory Access)是现代多处理器系统中的一种架构设计,其中不同的处理器对内存的访问速度不同,这主要是因为内存被物理上分布在多个节点上,距离处理器近的内存访问更快。NUMA仿真技术在Linux内核...
NUMA(Non-Uniform Memory Access)系统是一种设计用于多处理器架构的内存管理技术,它允许每个CPU核心优先访问与其物理位置相近的内存,以减少内存访问延迟,从而提高系统性能。这种技术尤其对那些主要利用单个或...
使用GetLogicalProcessorInformation获取逻辑处理器的详细信息(NUMA节点数、物理CPU数、CPU核心数、逻辑CPU数、各级Cache) 使用GetLogicalProcessorInformation获取逻辑处理器的详细信息(NUMA节点数、物理CPU数...