我正在做一些生物信息学工作,其中限制是内存量(即,该过程不可并行化).我看到像戴尔R715这样的服务器有两个用于Opteron 6100
cpu的插槽和128GB的RAM,可能配备16 x 8GB DIMM.
每个cpu都有一组与之关联的DIMM.
我的问题是,如果我将Linux放在这样的机器上,每个cpu只能寻址一半的RAM吗?换句话说,如果我在Linux下运行单线程程序,该进程是否可以访问128GB的RAM或只有64GB的RAM?
严格地说,单线程进程可以访问服务器可用的所有内存.你不必担心.
该进程可以访问RAM中的所有内存,但访问其中一半(理论上)将比访问另一半更慢.我知道VMWare-ESX知道内存局部性,因为它试图将特定VM的所有内存保留在与流程执行相同的内存节点上,以保持良好的性能.
该技术称为非统一内存访问(NUMA).有可能你的Linux机器已经有了它的位(numastat应该返回数据). numactl程序为您的进程分配内存策略,如果您编写自己的代码并希望优化内存速度,这可能非常有用. cpu本地内存将比另一个cpu的内存节点中的内存获取更快,这可能对您有用,具体取决于您正在使用它做什么.