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