【问题标题】:NUMA memory regions allocation in Windows 7Windows 7 中的 NUMA 内存区域分配
【发布时间】:2011-04-13 19:49:08
【问题描述】:

我们的应用是:

  1. 硬件配置是运行 Windows 7/64 位的双 Xeon 服务器。每个 Xeon 都有自己的 12gb RAM,采用 [NUMA][1] 配置,并带有将两个内存区域连接在一起的桥接器。
  2. 所有软件均使用 VS2008 用 c++ 编写,并编译为 64 位应用程序。
  3. Generation 应用会创建一个大型共享内存 (4-6gb) 区域,该区域只能由设置为在第一个 Xeon 处理器上运行的处理器关联的进程访问。
  4. 接收应用程序会创建一个大型共享内存区域 (2-4gb),该区域主要由具有处理器亲和性的进程使用,以在第二个 Xeon 处理器上运行。但是,当 Generation App 完成构建一组数据(32mb 到 128mb)时,它会将这些信息传输到在此 Xeon 上运行的共享内存区域。
  5. 我们正在使用 Boost Interprocess 库来管理我们的共享内存区域。

我的问题是,当创建它的每个进程都是共享内存区域时,Windows 是否在创建它的同一个 Xeon 芯片上分配该内存?或者我应该使用 Numa 内存功能之一将内存明确分配给特定的 Xeon 芯片吗?


编辑 - 帮助澄清 NUMA 是什么,来自维基百科 -

非统一内存访问或 非统一内存架构 (NUMA) 是一种计算机内存设计,用于 多处理器,其中内存 访问时间取决于内存 相对于处理器的位置。 在 NUMA 下,处理器可以访问其 拥有本地内存比非本地更快 内存,即本地内存 另一个处理器或内存共享 处理器之间。处理器之间。

链接是http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access了解更多详情。对我来说,随着多处理变得越来越普遍,这是我们所有人都必须了解更多的事情之一。

[1]:http://msdn.microsoft.com/en-us/library/aa363804%28VS.85%29.aspxbetween 处理器。

【问题讨论】:

  • 我不了解这个话题,但我看不出向操作系统提供有关您的内存使用模式的更多信息会如何损害任何东西。
  • 我也不知道蹲在这件事上,所以向我 +1。一个问题:“在创建它的同一个 Xeon 芯片上分配内存”是什么意思?

标签: c++ visual-studio-2008 windows-7 numa


【解决方案1】:

Windows 将为请求线程分配本地内存;但是,本地不是 Microsoft 指定的。本地可能是三个选项之一:线程的理想处理器、线程的处理器关联掩码或线程的当前处理器(我忘记了当前的实现是什么)。

本质上,答案是肯定的;然而,一个常见的问题是从没有关联的“控制器线程”分配所有内存,因此内存靠近控制器而不是具有特定关联的线程。

【讨论】:

猜你喜欢
  • 2012-11-28
  • 2011-12-30
  • 2017-07-11
  • 2011-12-08
  • 2021-04-18
  • 1970-01-01
  • 2011-09-21
  • 2018-02-04
  • 2014-06-26
相关资源
最近更新 更多