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

UMA 与 MESI 详细技术笔记

一、基本背景
现代计算机 CPU 通常包含多个处理核心(core)。为了提升性能,每个核心都配有高速缓存(cache),用于临时存储从主内存(DRAM)读取的数据。当多个核心同时访问同一内存地址时,必须确保它们看到的是一致的数据,否则程序行为将不可预测。
此外,在具有多个物理 CPU(即多个 CPU 插槽)的服务器中,每个 CPU 直接连接一部分物理内存。这种设计会影响内存访问的延迟和带宽。
为解决上述两类问题,计算机系统引入了两个关键技术:
MESI 协议:用于维护单个 CPU 内部多个核心之间的缓存一致性。
NUMA 架构:用于组织多个 CPU 及其本地内存的访问结构。
二者作用于不同层级,但共同保障多处理器系统的正确性和性能。
二、MESI 协议详解
. 作用范围
仅在同一个物理 CPU 封装内部生效。
适用于该 CPU 内所有共享缓存子系统的逻辑核心(包括超线程)。
. 解决的问题
多个核心可能各自缓存了同一物理内存地址的内容。
如果某个核心修改了该数据,其他核心的缓存副本必须失效或更新,以保证缓存一致性(Cache Coherence)。
. 工作机制
MESI 是一种基于状态机的缓存一致性协议,每个缓存行(cache line,通常 64 字节)被标记为以下四种状态之一:
表格
状态 含义
M (Modified) 当前核心拥有该缓存行的最新数据,且该数据与主内存不一致(“脏”数据)。其他核心不能持有该行的有效副本。
E (Exclusive) 当前核心拥有该缓存行,且主内存中的数据是最新的。其他核心没有该行的副本。
S (Shared) 当前核心拥有该缓存行的只读副本。其他核心也可能有 S 状态的副本。主内存数据是最新的。
I (Invalid) 该缓存行无效,不能使用。
. 通信方式:总线嗅探(Bus Snooping)
所有核心通过片上互连网络(如 Intel 的 Ring Bus 或 Mesh)监听彼此的缓存操作(如读、写、失效请求)。
当一个核心要写入某地址时,它会广播“使该地址在其他核心中失效”的消息。
其他核心收到后,将对应缓存行置为 Invalid 状态。
. 限制
嗅探机制的通信开销随核心数量增加而显著上升(近似 O(N²))。
因此,MESI 只适用于小规模、低延迟的共享缓存域,即单个物理 CPU。
三、NUMA 架构详解
. 作用范围
整个计算机系统,特别是包含多个物理 CPU 插槽(socket)的服务器。
每个插槽构成一个 NUMA 节点(NUMA Node)。
. 核心特征
每个 NUMA 节点包含:
一个物理 CPU(含多个核心)
一个集成的内存控制器(Integrated Memory Controller, IMC)
直接连接的一组 DRAM 模块(称为“本地内存”)
节点之间通过高速互连总线连接(如 Intel 的 UPI、AMD 的 Infinity Fabric)。
. 内存访问特性
本地访问:核心访问本节点的内存 → 延迟低(例如 80 ns)
远程访问:核心访问其他节点的内存 → 需经过互连总线 → 延迟高(例如 140 ns)
尽管访问延迟不同,整个系统仍提供统一的物理地址空间(Unified Memory Address Space),程序无需显式区分本地/远程内存。
. 是否启用 NUMA?
在单插槽系统中,通常只有一个 NUMA 节点,此时系统表现为 UMA(Uniform Memory Access)。
在多插槽系统中,自动启用 NUMA。
某些高端单插槽 CPU(如 AMD EPYC、Intel Xeon Scalable)支持通过 BIOS 设置(如 NPS、SNC、Cluster-on-Die)将单个 CPU 划分为多个 NUMA 节点。
✅ 验证方法(Linux):
bash

编辑

 

numactl --hardware
若输出 available: 1 node(s),则为 UMA;若 ≥2,则为 NUMA。
四、NUMA 与 MESI 的关系
. 层级关系
MESI 属于缓存一致性协议层,作用于单个 NUMA 节点内部。
NUMA 属于内存访问架构层,定义多个节点之间的内存组织方式。
. 一致性范围
节点内一致性:由 MESI(或其变种如 MESIF、MOESI)通过嗅探机制实现。
跨节点一致性:由于嗅探在多节点间不可扩展,系统改用目录协议(Directory-based Coherence Protocol)。
每个内存块维护一个“目录”,记录哪些节点缓存了该数据。
写操作时,仅通知相关节点,而非广播全系统。
. 协同工作流程示例
假设 Core A(Node 0)和 Core B(Node 1)都读取地址 X:
两者各自在其本地缓存中保存 X 的副本,状态为 Shared。
若 Core A 修改 X:
它首先通知 Node 0 内其他核心(通过 MESI 嗅探)。
同时,通过目录协议通知 Node 1 中的 Core B,使其缓存行失效。
此后,只有 Core A 拥有 Modified 状态的 X。
五、对软件开发的影响
. 性能敏感应用需考虑 NUMA 亲和性
操作系统调度器和内存分配器应尽量将线程与其访问的数据分配在同一 NUMA 节点。
否则会导致频繁远程内存访问,降低带宽、增加延迟。
. 缓存一致性开销
若多个线程在不同 NUMA 节点上频繁写同一缓存行(即使不同字段),会触发跨节点缓存同步,造成严重性能下降(称为 False Sharing + Remote Coherence Penalty)。
. 工具支持
numactl:控制进程的 NUMA 内存分配策略和 CPU 绑定。
taskset / pthread_setaffinity_np:设置线程 CPU 亲和性。
/proc/pid/numa_maps:查看进程的 NUMA 内存分布。
perf + mem_load_l3_miss_retired.remote_pmm(Intel):分析远程内存访问。
六、常见误区澄清
表格
说法 正确性 说明
“单 CPU 就没有 NUMA” ❌ 不完全正确 某些服务器 CPU 可在单插槽下配置为多 NUMA 节点
“MESI 用于整个系统” ❌ 错误 MESI 仅限单节点内部;跨节点用目录协议
“NUMA 是一种缓存协议” ❌ 错误 NUMA 是内存访问架构,与缓存一致性协议正交
“所有多核 CPU 都是 NUMA” ❌ 错误 消费级多核 CPU(如 i9、Ryzen)通常是 UMA
七、总结(技术要点)
MESI 是缓存一致性协议,确保单个 CPU 内多个核心的缓存数据一致,依赖总线嗅探。
NUMA 是内存架构,描述多 CPU 系统中内存访问延迟的非均匀性。
单插槽系统默认为 UMA(1 个 NUMA 节点),无需 NUMA 优化;但需确认 BIOS 设置。
跨 NUMA 节点的缓存一致性不由 MESI 实现,而由更可扩展的目录协议处理。
高性能程序应同时考虑:
线程与数据的 NUMA 亲和性(减少远程访问)
避免跨核心/跨节点的写共享(减少一致性流量)

http://www.jsqmd.com/news/654939/

相关文章:

  • 探寻2026年适合女生的专业,成都新东方高级技工学校有哪些热门专业 - 工业设备
  • 别只盯着密码破解!用Python+NumPy逆向分析CTF图片隐写术:从‘随机打乱’中恢复原始图像
  • 终极游戏串流革命:Sunshine跨平台游戏共享深度解析
  • 3分钟免费激活Windows和Office:KMS智能激活工具终极指南
  • 2026佛山鼎钻钢业不锈钢拉丝板无指纹表面工艺与现代装饰应用白皮书 - 博客万
  • 从零玩转工业树莓派:手把手教你用CODESYS V3.5配置EtherCAT主站,驱动台达ASDA-A2伺服
  • WebAssembly多线程与SharedArrayBuffer避坑指南:从COOP/COEP配置到C++递归线程安全
  • 成都市蜀宏吊装工程有限责任公司:郫都区设备吊装搬运公司 - LYL仔仔
  • 若依框架的权限系统怎么用?我用一个医院管理系统给你讲明白(SpringBoot+Vue版)
  • 避坑指南:解决MFA安装后最常见的FileNotFoundError和Kaldi编译失败问题
  • AGM Supra vs. Intel Quartus:国产CPLD开发环境搭建与项目迁移实操指南
  • 2026美国EB5移民项目怎么选?关键考量因素与机构分析 - 品牌排行榜
  • 不同发质护发精油推荐:来自护发精油排行榜的6款 - 博客万
  • 盒马鲜生购物卡回收技巧,简单又划算! - 团团收购物卡回收
  • 深度实战:猫抓浏览器扩展的3大核心功能与M3U8流媒体解析终极方案
  • STM32F446+DMA+空闲中断:精准捕获DDSM115电机与IMU数据的实战解析
  • 别只埋头写代码!读懂Keil工程窗口的图标,让你的开发效率翻倍
  • 从安装到部署:Guppy一站式React项目管理教程
  • 掌握B站视频本地化:bilibili-downloader高效下载4K高清内容完全指南
  • Android MQTT开发实战:Hivemq Client的配置与自动重连优化
  • VMware 17 Player 部署 Windows 7 经典系统:从零到可用的完整指南
  • UI设计中的空间分配:利用Storyboard实现动态布局
  • 新疆玻璃钢冷却塔厂家推荐:2026新疆玻璃钢管道/冷却塔厂家实力深度解析 - 栗子测评
  • 别再被‘失效文件句柄’搞懵了!手把手教你用fsid=0解决NFS挂载疑难杂症
  • C-Shopping管理后台开发:完整的权限控制与数据管理
  • Qwerty Learner终极指南:如何通过打字练习快速提升英语词汇量与键盘肌肉记忆
  • 避开这些坑!Fiddler Everywhere抓包微信小程序时,请求头与证书设置的完整指南
  • 3步解锁Windows和Office完整功能:智能激活脚本KMS_VL_ALL_AIO详解
  • NFD云解析实战案例:如何快速集成到现有下载系统中
  • 拆解WD MyCloud Gen2分区‘黑盒’:从救砖命令到理解其Linux系统设计