【存储基础】NUMA架构

article/2025/7/28 10:58:33

文章目录

  • 1. 前置知识:物理CPU和CPU核心
    • 物理CPU
    • CPU核心
    • 关系
  • 2. NUMA架构
    • 2.1 NUMA架构是什么?
    • 2.2 NUMA架构详解
    • 2.3 查看NUMA信息
    • 2.4 NUMA架构在分布式存储中的应用
      • 数据本地化 Data Locality
      • 计算与存储协同调度
      • NUMA感知的网络通信
      • 内存池优化与跨节点均衡
  • 3 补充:线程绑核

1. 前置知识:物理CPU和CPU核心

物理CPU

物理CPU是指独立的物理处理器芯片,通过插槽安装在主板上。一个物理CPU可能包含多个CPU核心、缓存、内存控制器等组件。服务器主板可支持多个物理CPU,比如双路就表明支持两个物理CPU。

CPU核心

CPU核心是物理CPU内部的独立计算单元,每个核心具备完整的执行能力,有自己的ALU、寄存器、L1/L2缓存等。CPU核心是物理CPU内部的子单元,不可物理拆分,每个核心可独立运行一个线程(单线程核心)或通过超线程支持多线程

关系

可以把物理CPU理解成一个容器,一个物理CPU可以包含多个CPU核心;核心是执行单元,实际执行指令的最小物理单位。
多个核心可同时处理不同任务;同一个物理CPU内的核心共享L3缓存、内存控制器、PCIe通道。

特性物理CPUCPU核心
本质物理硬件设备(芯片)物理CPU内部的子计算单元
数量层级服务器常见1-8个每个物理CPU含4-128个核心
功能集成核心、缓存、I/O控制器执行指令和运算
超线程影响不直接受影响1个物理核心可虚拟为2个逻辑核心
资源隔离不同物理CPU之间资源完全隔离(如缓存)同物理CPU的核心共享L3缓存和内存通道

2. NUMA架构

2.1 NUMA架构是什么?

NUMA(Non-Uniform Memory Access非统一内存访问)是一种多处理器计算机系统设计架构,旨在解决传统对称多处理器(SMP)架构中内存访问延迟和带宽瓶颈的问题。

NUMA的核心思想是将多个CPU和内存资源划分为多个节点 Node,每个结点内的CPU可以直接访问本地内存(延迟低、带宽高),而访问其他节点的内存(远端内存)则需要经过互联总线(延迟高、带宽低)。

2.2 NUMA架构详解

numa架构的组成:

  • 节点Node:每个节点包括
    • 一组CPU核心,称为Socket或NUMA Node;
    • 本地内存;
    • 互联总线
  • 内存访问模式:
    • 访问本地内存:CPU直接访问本节点内存,速度快;
    • 远端内存访问:CPU跨节点访问其他节点的内存

NUMA架构的特点:

  • 非对称延迟:本地内存访问快,远端内存访问慢;
  • 扩展性优势:支持更多CPU和内存,避免SMP架构的总线争用问题;
  • 本地化优化:操作系统和应用程序需尽量使用本地内存,减少跨节点访问;
  • 硬件透明性:对应用程序透明

2.3 查看NUMA信息

numactl --hardware # 查看numa节点拓扑

在这里插入图片描述

lscpu

在这里插入图片描述

2.4 NUMA架构在分布式存储中的应用

数据本地化 Data Locality

将数据存储在处理它的NUMA节点的本地内存中,减少跨节点访问。
实现方式:

  • 存储分片策略:将数据分片(shard)绑定到特定NUMA节点,例如numa_0处理shard_0的数据,numa_1处理shard_1的数据;
  • 元数据管理:记录数据分片与NUMA节点的映射关系,确保读写请求优先路由到本地结点

计算与存储协同调度

将计算任务调度到数据所在的NUMA节点,实现“存算一体”。
实现方式:

  • 任务绑定:将存储服务的进程/线程绑定到特定NUMA节点的CPU核心;
  • 内存分配策略:强制进程从本地NUMA节点分配内存。

NUMA感知的网络通信

减少网络数据包处理中的跨节点内存复制。
实现方式:

  • 网卡绑定到NUMA节点:将网卡与NUMA节点关联,确保网卡的中断和DMA内存区域位于同一节点;
  • 零拷贝技术:避免数据在用户态和内核态间的多次复制
    例如高性能存储网络(如IB, InfiniBand)通过RDMA直接访问远端NUMA节点的内存,绕过操作系统和CPU干预。

内存池优化与跨节点均衡

在NUMA节点间动态平衡内存使用,避免热点和资源耗尽。
实现方式:

  • 内存交错:将内存分配均匀分散到多个NUMA节点(牺牲局部性换取均衡);
  • 动态迁移:监控NUMA节点的内存压力,将冷数据迁移到空闲节点

3 补充:线程绑核

线程绑核是将特定线程/进程绑定到指定CPU核心上运行的机制,目的是减少上下文切换、提升缓存命中率、避免跨核心/跨NUMA节点的性能损失。

线程绑核的优势:

  • 减少上下文切换:操作系统默认动态调度线程到不同的核心,频繁切换可能导致缓存失效和延迟;
  • 提升缓存利用率:线程固定在某个核心之后,其缓存(L1/L2/L3)中的数据可长期保留;
  • 避免NUMA延迟:绑核可强制线程在本地NUMA结点运行;
  • 实时性需求:某些应用场景下要求严格的任务响应时间。

可使用Linux的taskset工具将线程绑定到核心;或numactl工具将线程绑定到NUMA节点。


http://www.hkcw.cn/article/JPrdrWFuFb.shtml

相关文章

HTTP协议解析

HTTP(超文本传输协议)是万维网的基础协议,自1991年诞生以来,已成为最广泛使用的应用层协议。本文将深入解析HTTP协议的核心概念、工作原理及实际应用。 HTTP协议基础 什么是HTTP? HTTP (全称为 "超文本传输协…

小麦“颗粒归仓”有了“最强大脑”

全国小麦主产区自南向北陆续进入紧张抢收阶段,夏种也全面展开。河南夏种已完成四成,以玉米、花生为主。安徽夏种已完成近三成,以水稻和玉米为主。各地如何针对天气情况抢抓收获“窗口期”,确保粮食“颗粒归仓”?目前,安徽4300多万亩的小麦收获已接近尾声。当记者来到安徽…

数据结构:递归(Recursion)

目录 示例1:先打印,再递归 示例2:先递归,再打印 递归的两个阶段 递归是如何使用栈内存 复杂度分析 递归中的静态变量 内存结构图解 递归:函数调用自己 必须有判断条件来使递归继续或停止 我们现在通过这两个示…

Python入门手册:类和对象

在Python中,面向对象编程(OOP)是一种核心的编程范式。通过类和对象,我们可以模拟现实世界中的事物和行为,使代码更加模块化、可复用和易于维护。今天,就让我们深入探讨Python中的类和对象,包括它…

从冷上电到main()函数,Bootloader都做了什么?

目录 1、硬件初始化 2、引导模式与应用模式的抉择 3、启动代码 在嵌入式系统中,从设备上电到执行应用程序的main()函数,Bootloader扮演着至关重要的角色。作为系统启动的首个程序,Bootloader负责初始化硬件、设置运行环境,并最…

电路图识图基础知识-保护环节、自锁环节及互锁环节(十)

1 电路中的自锁环节 自锁环节是指继电器得电后能通过自身的常开触点闭合,给其线圈供电的环节。如图所示的电路图中,辅助电路中并联于启动按钮开关SB2 旁边的KM 常开触点就是自锁环节(此触 电称为自锁触电)。 图中所示的自锁过程是:当QK 闭合后…

Linux Windows之wsl安装使用简介

参考资料 如何使用 WSL 在 Windows 上安装 Linuxwindows11 安装WSL2全流程旧版 WSL 的手动安装步骤 目录 一. 前期准备1.1 确认windows的版本1.2 开启Linux子系统的支持1.2.1 图形化方式1.2.2 命令行方式 1.3 安装wsl软件1.4 安装Linux分发版 二. 基本配置2.1 Windows Termina…

网红家装企业上海总部人去楼空 欠款风波引关注

端午节放假前,每天有上百人来找住范儿,因为公司欠了不少钱。6月1日下午,记者来到住范儿上海公司所在地,发现公司大门被木板封得严严实实。守在门口的保安指着木板上的通知对记者说:“也省得你报警了,直接打派出所电话吧。”据官网介绍,住范儿是家居建材新零售服务商,成…

正则表达式笔记

正则表达式笔记 前言一、基本字符匹配二、字符类三、量词四、定位符五、贪婪匹配和非贪婪匹配六、旗标七、分组和引用八、前瞻九、后顾 前言 参考GeekHour视频和资料,讲的挺好的,B站有[GeekHour正则表达式] 正则表达式在线工具网站:https://…

齐达内拒利雅得新月一亿欧年薪合同 静候法国国家队帅位

齐达内拒绝了利雅得新月开出的1亿欧元年薪合同。沙特球队利雅得新月正在寻找新主帅,并希望邀请赋闲在家的齐达内。利雅得新月愿意为齐达内支付一亿欧元年薪,签约一年,让他率队参加今夏世俱杯。然而,齐达内已经拒绝了这份高薪邀请。随后,利雅得新月开始联系国米主帅小因扎吉…

【论文解读】DETR | End-to-End Object Detection with Transformers

论文地址:https://arxiv.org/pdf/2005.12872 代码地址:https://github.com/facebookresearch/detr 摘要 本研究提出了一种新的方法,该方法将目标检测视为一个直接的集合预测问题。本研究的方法简化了检测流程,有效地消除了对许多…

(C++)STL:string类(三)非成员重载函数和类型转化函数解析使用

string类&#xff08;三&#xff09; 非成员重载函数relational operaters 关系运算符operatoroperator<< operator>>getline <string>头文件内的函数string转化为数字类型其他数值类型转化为string练习&#xff1a;字符串最后一个单词的长度 非成员重载函数…

[Python] Python运维:系统性能信息模块psutil和系统批量运维管理器paramiko

初次学习&#xff0c;如有错误还请指正 目录 系统性能信息模块psutil 获取系统性能信息 CPU信息 内存信息 磁盘信息 网络信息 其他信息 进程信息 实用的IP地址处理模块IPy IP地址、网段的基本处理 多网络计算方法 系统批量运维管理器paramiko paramiko 的安装 Li…

声光控灯电路Multisim仿真

5V交流源充当声音信号源&#xff0c;可调电阻充当光敏电阻。 白天&#xff0c;不管是否有声音&#xff0c;灯都不会亮。 夜晚&#xff0c;当有声音时&#xff0c;灯亮一段时间&#xff0c;然后熄灭。 仿真时遇到的问题&#xff1a; 问题1、必须按照一定的流程才能正常运行。…

Blueprints - List View Widget

一些学习笔记归档&#xff1b; 需要读取动态数据把多个条目显示在UI上的时候&#xff0c;可能用到List View组件&#xff1b;假如有Widget要使用在List View中&#xff0c;此Widget需要继承相关接口&#xff1a; 这样就能在List View控件中选择已经继承接口的Widget组件了&…

七.MySQL内置函数

1.日期函数 MySQL 日期与时间函数对照表 函数名称描述current_date()当前日期&#xff08;格式&#xff1a;YYYY-MM-DD&#xff09;current_time()当前时间&#xff08;格式&#xff1a;HH:MM:SS&#xff09;current_timestamp()当前日期和时间&#xff08;等同于 now()&#x…

神经网络与Transformer详解

1. 一个模型的典型场景 对用户咨询的法律问题做自动归类: 婚姻纠纷、劳动纠纷、合同纠纷、债权债务、房产纠纷、交通事故、医疗纠纷、版权纠纷 2. 模型就是一个数学公式 我们一般将这样的问题描述为:给定一组输入数据,经过一系列数学公式计算后,输出n个概率,分别代表该…

《Python基础》第2期:环境搭建

在开始编写 Python 代码前&#xff0c;还需要搭建 Python 的开发环境。 电脑是没办法直接读懂 Python 代码的&#xff0c;而是需要一个解释器&#xff0c;实时把代码翻译成字节码&#xff0c;字节码再转换成 0 和 1&#xff0c;电脑就能读懂了。 Python 的运行过程就是翻译一行…

多线程——定时任务ScheduledThreadPoolExecutor用法

创建 同样是用Executors工具类&#xff1a; 创建定时任务线程池 还有一个重载方法 接收一个额外的参数&#xff1a;线程工厂 创建单个定时任务执行器&#xff1a; 重载&#xff1a;也接收一个线程工厂 区别说明 singleThread&#xff1a; 这里可以new, 说明他是一个类 传…

AI 代理框架:使用正确的工具构建更智能的系统

AI 代理框架&#xff1a;使用正确的工具构建更智能的系统 探索 AI 代理框架如何支持从单代理设置到复杂的多代理编排的自主工作流。了解它们有何不同、何时使用它们以及如何开始使用实际工具。 AI 代理框架 从本质上讲&#xff0c;AI 代理是可以感知、计划和行动的程序。它们旨…