windows平台对NUMA的支持

2023-11-16

 

微软官网链接:https://docs.microsoft.com/en-us/windows/win32/procthread/numa-support

 

译文如下:

        多处理器支持的传统模型是对称多处理器(SMP)。在这种模型中,每个处理器对内存和输入/输出有平等的访问权。随着处理器数量的增加,处理器总线成为系统性能的一个限制。

        系统设计人员使用非均匀内存访问(NUMA)来提高处理器速度,而不增加处理器总线上的负载。体系结构是不统一的,因为每个处理器靠近内存的某些部分,而远离内存的其他部分。处理器可以快速访问它附近的内存,而访问更远的内存可能需要更长的时间。

        在NUMA系统中,中央处理器被安排在称为节点。每个节点都有自己的处理器和内存,并通过高速缓存相关的互连总线连接到更大的系统。

        系统试图通过在处理器上调度线程来提高性能,这些处理器与正在使用的内存在同一个节点上。它试图满足节点内部的内存分配请求,但在必要时会从其他节点分配内存。它还提供了一个应用程序接口,使应用程序可以使用系统的拓扑结构。通过使用NUMA函数优化调度和内存使用,您可以提高应用程序的性能。

        首先,您需要确定系统中节点的布局。要检索系统中编号最高的节点,请使用getnumahighetestnodeNumber功能。请注意,这个数字不能保证等于系统中的节点总数。此外,具有序列号的节点不能保证靠得很近。要检索系统上的处理器列表,请使用GetProcessAffinityMask功能。您可以使用来确定列表中每个处理器的节点getnumapprocessornode功能。或者,要检索节点中所有处理器的列表,请使用GetNumaNodeProcessorMask功能。

        在确定了哪些处理器属于哪些节点之后,您可以优化应用程序的性能若要确保进程的所有线程都在同一个节点上运行,请使用SetProcessAffinityMask函数使用指定同一节点中的处理器的进程相似性掩码。这提高了线程需要访问相同内存的应用程序的效率。或者,要限制每个节点上的线程数,请使用SetThreadAffinityMask功能。

        内存密集型应用程序需要优化它们的内存使用。若要检索节点可用的可用内存量,请使用GetNumaAvailableMemoryNode功能。这VirtualAllocExNuma函数使应用程序能够为内存分配指定一个首选节点VirtualAllocExNuma不分配任何物理页面,因此无论页面是否在该节点或系统中的其他地方可用,它都将成功。物理页面是按需分配的。如果首选节点的页面不足,内存管理器将使用其他节点的页面。如果内存被换出,当它被带回来时,使用相同的过程。

NUMA支持超过64个逻辑处理器的系统

        在具有64个以上逻辑处理器的系统上,节点被分配给处理器组根据节点的容量来确定。节点的容量是系统启动时存在的处理器数量,以及系统运行时可以添加的任何其他逻辑处理器。

Windows Server 2008、Windows Vista、Windows Server 2003和Windows XP:不支持处理器组。

        每个节点必须完全包含在一个组中。如果节点的容量相对较小,系统会将多个节点分配给同一个组,选择物理上彼此靠近的节点以获得更好的性能。如果一个节点的容量超过了一个组中处理器的最大数量,系统会将该节点分成多个较小的节点,每个节点都小到足以容纳一个组。

        可以使用请求新进程的理想NUMA节点进程线程属性首选节点创建流程时的扩展属性。像线程理想处理器一样,理想节点是对调度器的一个提示,调度器在可能的情况下将新进程分配给包含所请求节点的组。

        扩展的NUMA函数GetNumaAvailableMemoryNodeEx,getnumanodeproprocessormaskex,getnumapprocessornodeex,和GetNumaProximityNodeEx与未扩展的对应节点的不同之处在于节点号是aUSHORT值而不是UCHAR,以容纳具有超过64个逻辑处理器的系统上可能更多的节点。此外,由扩展功能指定或检索的处理器包括处理器组;未扩展函数指定或检索的处理器是组相关的。有关详细信息,请参见单个函数参考主题。

        群组感知应用程序可以使用相应的扩展NUMA函数,以类似于本主题前面所述的方式将其所有线程分配给特定节点。应用程序使用GetLogicalProcessorInformationEx获取系统上所有处理器的列表。请注意,除非将进程分配给单个组,并且目标节点位于该组中,否则应用程序无法设置进程关联掩码。通常应用程序必须调用SetThreadGroupAffinity将其线程限制在预期的节点上。

NUMA原料药

下表描述了NUMA空气污染指数。

NUMA原料药
功能 描述
allocateuserserphysicalpagesunuma 分配要在任何中映射和取消映射的物理内存页面地址窗口扩展(AWE)指定进程的区域,并为物理内存指定NUMA节点。
CreateFileMappingNuma 为指定文件创建或打开命名或未命名的文件映射对象,并为物理内存指定NUMA节点。
GetLogicalProcessorInformation 检索有关逻辑处理器和相关硬件的信息。
GetLogicalProcessorInformationEx 检索关于逻辑处理器和相关硬件的关系的信息。
GetNumaAvailableMemoryNode 检索指定节点中的可用内存量。
GetNumaAvailableMemoryNodeEx 检索指定为的节点中的可用内存量USHORT价值。
getnumahighetestnodeNumber 检索当前具有最高数目的节点。
GetNumaNodeProcessorMask 检索指定节点的处理器掩码。
getnumanodeproprocessormaskex 检索指定为的节点的处理器掩码USHORT价值。
getnumapprocessornode 检索指定处理器的节点号。
getnumapprocessornodeex 将节点号检索为USHORT指定处理器的值。
GetNumaProximityNode 检索指定邻近标识符的节点号。
GetNumaProximityNodeEx 将节点号检索为USHORT指定邻近标识符的值。
MapViewOfFileExNuma 将文件映射视图映射到调用进程的地址空间,并为物理内存指定NUMA节点。
VirtualAllocExNuma 在指定进程的虚拟地址空间中保留或提交一个内存区域,并为物理内存指定NUMA节点。

 

QueryWorkingSetEx函数可用于检索分配了页面的NUMA节点。如需范例,请参阅从NUMA节点分配内存

从NUMA节点分配内存

多处理器

处理器组

 

总结:

根据文中描述,以及编码实验,处理器组结构图,如下所示:

 


若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows平台对NUMA的支持 的相关文章

  • SQL 查询指定行数的数据。

    今天遇到一个关于 查询指定行数的数据 的sql查询语句问题 突然发现以前没怎么接触过 刚才想起来了 赶紧看了下文档 又上网搜了下 有了下面的东西 不知道有没有什么地方不对 oracle 先看一下文档中关于any和all的例子 很不错噢 An
  • C++ 中的虚函数及虚函数表

    C 中的虚函数及虚函数表 一 虚函数及虚函数表的定义 二 虚函数表指针和虚函数表的创建时机 三 虚函数实现多态的原理 一 虚函数及虚函数表的定义 虚函数 虚函数就是在基类中定义一个未实现的函数名 使用虚函数的核心目的就是通过基类访问派生类定
  • 多线程系列之——事件内核对象

    所有内核对象里面事件内核对象是最简单的一个 它包括一个使用计数 还有两个布尔值 一个布尔值用来表示事件是手动重置事件还是自动重置事件 另一个布尔值表示当前是否处于触发状态 当一个手动重置事件被触发的时候 所有等待该事件的线程都能变成调度状态
  • C语言pcre库的使用及验证IP地址的合法性

    PCRE是一个用C语言编写的正则表达式函数库 它十分易用 同时功能也很强大 性能超过了POSIX正则表达式库和一些经典的正则表达式库 在使用PCRE库时 首先肯定是需要安装pcre的 不过一般的系统都会有自带的PCRE库 不过如果想使用最新
  • C/C++ 引用作为函数的返回值

    语法 类型 函数名 形参列表 函数体 特别注意 1 引用作为函数的返回值时 必须在定义函数时在函数名前将 2 用引用作函数的返回值的最大的好处是在内存中不产生返回值的副本 代码来源 RUNOOB include
  • dev-c++官网位置和源码/库位置

    1 http devpaks org 2 http www bloodshed net 3 http www bloodshed net dev 转载于 https www cnblogs com vilyLei articles 1812
  • ATL字符串转换宏

    有比MultiByteToWideChar和WideCharToMultiByte更简单的字符串转换宏 你相信吗 头文件 d program files microsoft visual studio 8 vc atlmfc include
  • stat 函数解析

    stat 函数的简单使用 stat 函数是用来获取文件的各种属性的一个linux下的常用API函数 函数原型为int stat const char path struct stat buf stat定义如下 struct stat dev
  • 检查内存泄露

    自己编写的视频处理程序出现了一个问题 每帧的运行时间随着运行时间在不断增长 很大可能是出现了内存泄露 于是学习了一些查看内存泄露的方法 做了两种尝试 一是VS自带的DEBUG下的检测 view pl html view plain copy
  • NUMA 获取当前节点/核心

    我在 Linux 上使用 libnuma 我的线程应该知道它们正在运行的节点 核心 是否有可能以某种方式获取当前线程的节点 核心 我已经浏览了文档 但没有找到这样的功能 我找到了这个解决方案 include
  • OpenMP 和 NUMA 的关系?

    我有一台双路 Xeon E5522 2 26GHZ 机器 禁用超线程 在支持 NUMA 的 Linux 内核 3 0 上运行 ubuntu 服务器 架构布局为每个插槽 4 个物理核心 OpenMP 应用程序在这台机器上运行 我有以下问题 在
  • NUMA:如何检查 C++ 数组分配在 RAM 的哪一部分?

    我有一台带有 2 个 CPU 和 64GB RAM 的服务器 每个 CPU 32GB 我知道每个 CPU 都有自己的 RAM 部分 我们称它们为 RAM1 和 RAM2 我想让我的程序知道它在哪个 RAM RAM1 或 RAM2 上分配数据
  • C++中的并发多线程网络通讯

    C 中的并发多线程网络通讯 一 引言 C 作为一种高效且功能强大的编程语言 为开发者提供了多种工具来处理多线程和网络通信 多线程编程允许多个任务同时执行 而网络通信则是现代应用程序的基石 本文将深入探讨如何使用C 实现并发多线程网络通信 并
  • C/C++编程中的算法实现技巧与案例分析

    C C 编程语言因其高效 灵活和底层的特性 被广大开发者用于实现各种复杂算法 本文将通过10个具体的算法案例 详细探讨C C 在算法实现中的技巧和应用 一 冒泡排序 Bubble Sort 冒泡排序 Bubble Sort 是一种简单的排序
  • 有没有在 C/C++ 代码中使用 mbind 的示例?

    我正在尝试使用mbind http man7 org linux man pages man2 mbind 2 html在我的 C 代码中 为了跨 4 个 NUMA 域重新排列虚拟页面 不幸的是我是这个函数的新手 long mbind vo
  • 现代 Linux 中是否有 NUMA 下次接触策略

    当我们在 NUMA 系统上工作时 内存相对于当前 NUMA 节点可以是本地的或远程的 为了使内存更加本地化 有一个 首次接触 策略 默认的内存到节点绑定策略 http lse sourceforge net numa status desc
  • 我如何知道我的服务器是否有 NUMA?

    从 Java 垃圾收集中跳出来 我遇到了NUMA 的 JVM 设置 http www slideshare net ludomp gc tuning in the hotspot java vm a fisl 10 presentation
  • 如何强制两个进程在同一个CPU上运行?

    Context 我正在编写一个由多个进程组成的软件系统 它是在Linux下用C 编写的 它们之间使用 Linux 共享内存进行通信 通常 在软件开发中 性能优化是在最后阶段进行的 在这里我遇到了一个大问题 该软件对性能要求较高 但在 4 或
  • 哪种架构称为非均匀内存访问(NUMA)?

    根据wiki http en wikipedia org wiki Non uniform memory access 非均匀内存访问 NUMA 是一种用于多处理的计算机内存设计 其中内存访问时间取决于相对于处理器的内存位置 但尚不清楚它是
  • C中的内存使用问题

    请帮忙 操作系统 Linux 其中 sleep 1000 中 此时 top 显示Linux任务 给我写了7 7 MEM使用 valgrind 未发现内存泄漏 我明白 写得正确 所有 malloc 结果都是 NULL 但是为什么这次 睡眠 我

随机推荐

  • 深入浅出的讲解傅里叶变换

    作 者 韩 昊 知 乎 Heinrich 微 博 花生油工人 知乎专栏 与时间无关的故事 谨以此文献给大连海事大学的吴楠老师 柳晓鸣老师 王新年老师以及张晶泊老师 转载的同学请保留上面这句话 谢谢 如果还能保留文章来源就更感激不尽了 其实学
  • Ubuntu 安装 CUDA(附测试)

    为深度学习所用 博主预想在Ubuntu16 04上安装 显卡驱动 CUDA cuDNN Tensorflow gpu Keras PyCharm 参考了众多资料 最终成功将所有软件安装完毕 且能成功运行使用 该篇博客介绍了CUDA的安装教程
  • 2023-详解实时数仓建设

    一 实时数仓建设背景 1 实时需求日趋迫切 目前各大公司的产品需求和内部决策对于数据实时性的要求越来越迫切 需要实时数仓的能力来赋能 传统离线数仓的数据时效性是 T 1 调度频率以天为单位 无法支撑实时场景的数据需求 即使能将调度频率设置成
  • 接口优化从哪些方面入手?

    关注公众号 1024个为什么 及时接收最新推送文章 1 背景 新接手的一个服务 对整个服务熟悉后 发现调用量 TOP1 的一个接口 完全超乎我对这个接口使用场景的预期 预期几万的接口 实际调用量近 400万 和调用方交涉后 暂时无法推动调用
  • Conexant Bt878驱动及视频软件开发

    目录 1 前言 2 驱动开发 3 视频软件开发 3 1 DX SDK版本选择 3 2 directshow开发 4 寄存器配置 5 参考资料 1 前言 本文是对基于Conexant Bt878进行的驱动开发和软件开发进行的整理论述 驱动是基
  • java项目如何远程调试

    唠嗑部分 很多java开发的小伙伴不知道java项目如何远程调试 每次出现环境问题都会十分纠结 只能在源代码中通过一行一行的日志去排查 即没有技术含量也浪费时间 今天来说一说 java项目如何远程debug Java XDebug 远程de
  • <微机与接口技术>51单片机的指令系统——数据传送与交换指令

    重要指令符号 Rn 当前工作寄存器组中的R0 R7 Ri 当前工作寄存器组中的R0 R1 rel 相对偏移量 在相对转移指令中使用 位一字节补码 寻址方式 七种分别是立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址
  • 超详细的springBoot学习教程

    springBoot学习 https docs spring io spring boot docs 2 2 6 RELEASE reference html index html 官方文档 1 搭建springBoot项目架构 2 spr
  • C#执行JavaScript脚本

    目录 安装和配置 执行 JavaScript 脚本 与脚本交互 JS 调用 C 方法 多线程使用 总结 ClearScript 是一个 NET 平台下的开源库 用于在 C 和其他 NET 语言中执行脚本代码 它提供了一种方便和安全的方法来将
  • Windows操作系统知识合集

    Windows操作系统的权限 Guest权限 User权限 人类可用普通权限 Administrator 人类可用最高权限的用户 System 系统 机器可用最高权限 比人类权限高更多 TrustInstaller 操作系统的最高权限 比S
  • Aggressive cows-疯牛POJ(2456)-详解

    描述 农夫 John 建造了一座很长的畜栏 它包括N 2 lt N lt 100 000 个隔间 这些小隔间依次编号为x1 xN 0 lt xi lt 1 000 000 000 但是 John的C 2 lt C lt N 头牛们并不喜欢这
  • verilog-mode的简要介绍

    verilog mode是什么 官网的介绍 https www veripool org wiki verilog mode Verilog mode el is the extremely popular free Verilog mod
  • 静态代理模式

    1 所谓的静态代理模式应该就是把大家都会做的相同的事情交给代理去做 2 而一定要自己做的事就在代理中传入一个自己的对象再在代理的类中的该方法中调用自己的方法 3 将所有需要自己完成的方法放在一个接口中然后自己和代理都去继承他 代理还会添加一
  • invalid resource directory name

    遇到错误 当有res navigation的时候 反编译打包回apk的时候会报错 invalid resource directory name res navigation 或者是 invalid resource directory n
  • 【CV】第 15 章:结合计算机视觉和 NLP 技术

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • pc微信禁止启动小程序

    场景 最近 Windows 微信的更新了可以访问小程序的功能 但还不完善 如 尝试播放激励视频时 会直接跳过视频并作为已完成处理等 身为开发者的我们可能需要做一些处理 禁止pc的微信访问小程序 以达到减小损失的目的 提要 App onLau
  • Google Cast(Chromecast)浏览器 SDK 学习笔记(一)

    前几天因为京东打折 买了个索尼的 SRS X77 音箱 看说明书说支持 Google Cast 试了试感觉还挺好用 于是研究了一下 Google Cast 的 SDK Chromecast Google Cast 傻傻分不清楚 Google
  • Python迭代器及其用法

    列表 list 元组 tuple 字典 dict 集合 set 这些序列式容器有一个共同的特性 它们都支持使用 for 循环遍历存储的元素 都是可迭代的 因此它们又有一个别称 即迭代器 从字面来理解 迭代器指的就是支持迭代的容器 更确切的说
  • Umi4各种运行报错排查

    使用 Umi4 搭建项目 选择antd pro模版 pnpm 运行起来以后VScode编译器中出现报红 但是项目正常运行 现在强迫症处理各种报红 如果有用请点个赞 o 1 Cannot find module umi or its corr
  • windows平台对NUMA的支持

    微软官网链接 https docs microsoft com en us windows win32 procthread numa support 译文如下 多处理器支持的传统模型是对称多处理器 SMP 在这种模型中 每个处理器对内存和