我正在做一些生物信息学的工作,其中的限制是内存量(即过程不可并行化)。 我看到戴尔R715这样的服务器有两个用于Opteron 6100 CPU的插槽,而128GB的RAM可能用16个8GB的DIMM。
每个CPU都有一组DIMM与之关联。
我的问题是,如果我把Linux放在这样的机器上,那么每个CPU只有一半的内存地址。 换句话说,如果我在Linux下运行一个单线程程序,那么这个进程就可以访问128GB的RAM或64GB的RAM了吗?
严格来说,这个单线程进程将有权访问服务器可用的所有内存。 你不必担心这一点。
这个过程可以访问RAM中的所有内存,但访问其中一半将(理论上)比访问另一半慢。 我知道VMWare-ESX知道内存局部性,因为它试图将特定虚拟机的所有内存保留在与进程执行相同的内存节点上,以保持性能。
这项技术被称为非均匀内存访问(NUMA)。 机会是你的Linux机器已经有了它的位( numastat应该返回数据)。 numactl程序为你的进程分配一个内存策略,如果你正在编写你自己的代码并且想要优化内存的速度,这可能是非常有用的。 CPU本地内存将比另一个CPU的内存节点的内存获取更快,这对你来说可能是有用的,这取决于你在做什么。
Linux是一个需求分页的系统,在64位系统上提供2 ^ 64 -1的虚拟地址空间。 VMM将可以访问所有内存中的内存。 linux内核处理创build页表而不是进程。