当前位置: 首页 > news >正文

【内存】Linux 内核优化实战 - kernel.numa_balancing

目录

      • 一、NUMA 架构的背景
      • 二、`kernel.numa_balancing` 的作用
      • 三、参数取值与配置
        • 配置方式:
      • 四、何时需要开启/关闭?
        • 建议开启的场景:
        • 建议关闭的场景:
      • 如何查看NUMA节点数
        • 使用 lscpu 命令(最直接)
      • 五、注意事项
      • 总结

kernel.numa_balancing 是 Linux 内核中的一个重要参数,用于控制 NUMA(非统一内存访问)平衡机制 的开启与关闭。NUMA 是多处理器系统中常见的内存架构,其核心特点是:CPU 访问本地内存(同一 NUMA 节点)的速度远快于访问远程内存(其他 NUMA 节点)。numa_balancing 机制的作用是自动优化进程与内存的亲和性,减少远程内存访问,提升系统性能。

一、NUMA 架构的背景

在多 CPU 系统中,内存通常被划分为多个 NUMA 节点,每个节点关联一组 CPU 和本地内存:

  • 当进程的内存数据存储在其运行的 CPU 所在的 NUMA 节点时,访问速度最快(本地访问)。
  • 若内存数据存储在其他 NUMA 节点,访问速度会显著下降(远程访问,可能慢几倍甚至几十倍)。

如果进程频繁访问远程内存,会严重影响性能。numa_balancing 就是为解决这一问题而设计的自动优化机制。

二、kernel.numa_balancing 的作用

该参数控制内核是否自动执行 NUMA 平衡,具体行为包括:

  1. 检测内存访问位置:跟踪进程访问的内存页属于哪个 NUMA 节点。
  2. 迁移内存页:若进程频繁访问远程节点的内存页,内核会将这些内存页迁移到进程当前运行的 NUMA 节点(本地节点)。
  3. 调度进程亲和性:尽可能将进程调度到其内存页所在的 NUMA 节点的 CPU 上,减少远程访问。

简单来说,numa_balancing 是一种“自动优化内存与 CPU 绑定关系”的机制,无需人工干预。

三、参数取值与配置

kernel.numa_balancing 是一个布尔值参数,取值为:

  • 0:关闭 NUMA 平衡机制(默认值,部分系统可能默认开启,需根据实际环境确认)。
  • 1:开启 NUMA 平衡机制。
配置方式:
  1. 临时生效(重启后失效):
    通过 sysctl 命令实时修改:

    # 开启 NUMA 平衡
    sysctl -w kernel.numa_balancing=1# 关闭 NUMA 平衡
    sysctl -w kernel.numa_balancing=0
    
  2. 永久生效
    /etc/sysctl.conf/etc/sysctl.d/ 目录下的配置文件中添加:

    kernel.numa_balancing = 1  # 开启
    

    保存后执行 sysctl -p 生效。

四、何时需要开启/关闭?

建议开启的场景:
  • 多 NUMA 节点的服务器(如 2 个以上 NUMA 节点的物理机或虚拟机)。
  • 进程内存访问模式动态变化:例如进程可能在不同 NUMA 节点的 CPU 上调度,或内存页分布分散。
  • 性能敏感型应用:如数据库、虚拟化平台(KVM)、高性能计算(HPC)等,减少远程内存访问能显著提升性能。
建议关闭的场景:
  • 单 NUMA 节点系统(如普通笔记本、单 CPU 服务器):此时无“远程内存”概念,开启会增加额外开销。
  • 手动优化 NUMA 亲和性:若已通过工具(如 numactl)手动绑定进程到特定 NUMA 节点和内存,numa_balancing 可能干扰手动配置,导致性能下降。
  • 低延迟要求极高的场景numa_balancing 的检测和迁移操作会带来少量开销(如页面迁移时的短暂阻塞),对微秒级延迟敏感的应用可能不适用。

如何查看NUMA节点数

使用 lscpu 命令(最直接)
lscpu | grep "NUMA node(s)"

在这里插入图片描述

五、注意事项

  1. 性能开销:开启 numa_balancing 会增加内核的计算和内存迁移开销,在某些场景下(如内存页频繁迁移)可能抵消其带来的收益,需实际测试验证。
  2. 与其他工具的配合:若使用 numactltaskset 等工具手动设置进程的 NUMA 亲和性,建议关闭 numa_balancing,避免冲突。
  3. 监控效果:可通过 numastat 命令查看 NUMA 节点的内存访问统计(如 numa_hit 本地访问、numa_miss 远程访问),评估 numa_balancing 的优化效果:
    numastat  # 查看各节点的内存访问情况
    

总结

kernel.numa_balancing 是 Linux 内核针对 NUMA 架构的自动优化开关,核心目标是减少远程内存访问。在多 NUMA 节点的系统中,若应用内存访问模式复杂且无手动优化,开启它通常能提升性能;反之,在单节点或手动优化场景下,关闭可能更合适。实际使用中需结合系统架构和应用特性,通过测试选择最佳配置。

http://www.dtcms.com/a/266815.html

相关文章:

  • [Linux]内核态与用户态详解
  • 1.1_3_2 三种交换方式的性能分析
  • PHP从字符串到数值的类型转换
  • 后端密码加密:守护用户数据的钢铁长城
  • 第三章 基于rtthread标准库的串口和shell应用
  • vue 循环无限滚动表格
  • 用distance_transform 检测线性凸包
  • Java项目:基于SSM框架实现的忘忧小区物业管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
  • 双因子认证(2FA)是什么?从零设计一个安全的双因子登录接口
  • Linux-进程概念(3)
  • 在HP暗影精灵Ubuntu20.04上修复IntelAX211Wi-Fi不可用的全过程记录——系统安装以后没有WIFI图标无法使用无线网
  • RabbitMQ 高级特性之 TTL
  • Spring Boot 应用启动时,端口 8080 已被其他进程占用,怎么办
  • 物联网中的Unity/Unreal引擎集成:数字孪生与可视化控制
  • 【Spring Boot】HikariCP 与 Druid 连接池全面对比
  • OpenCV中超分辨率(Super Resolution)模块类cv::dnn_superres::DnnSuperResImpl
  • 数字工厂的核心引擎:物联网驱动生产智能化升级
  • 前端查询条件加密传输方案(SM2加解密)
  • Flink SQLServer CDC 环境配置与验证
  • vue3 el-table 行筛选 设置为单选
  • Oreacle(SQL语言基础)
  • 【问题解决】VSCode终端中看不到Git-Bash
  • XILINX Kintex 7系列FPGA的全局时钟缓冲器(BUFG)和区域时钟缓冲器(BUFR/BUFH)的区别
  • 【PyTorch】PyTorch预训练模型缓存位置迁移,也可拓展应用于其他文件的迁移
  • HTTP协议利用TCP的特性来实现长连接
  • Compose笔记(三十)--图片选择器
  • 【Spring Boot】HikariCP 连接池 YAML 配置详解
  • 洛谷P1941 [NOIP 2014 提高组] 飞扬的小鸟
  • vue3 获取选中的el-table行数据
  • MySQL 查询进阶指南:子查询、多表连接与 UNION 操作全解析