PAE(物理地址扩展)于1994年在CPU中引入.这允许32位处理器访问64 GB内存而不是4 GB.从2.3.23开始,Linux内核为此提供支持.假设我正在启动其中一个内核,并希望在C中编写一个可以访问超过3 GB内存的应用程序(为什么3 GB? 请参阅此内容).
我如何访问超过3 GB的内存?当然,我可以分叉多个过程; 每个人都可以访问3 GB,并可以相互通信.但对于大多数用例而言,这不是一个现实的解决方案.还有哪些其他选择?
显然,在大多数情况下,最好的解决方案是简单地以64位模式启动,但我的问题是严格关于如何在启用PAE的32位内核上运行的应用程序中使用4 GB以上的物理内存.
你不直接 - 只要你在32位上运行,每个进程都将受到内核构建的VM拆分(2GB,3GB,或者如果你有4GB的补丁内核)/4GB分割,4GB).
使进程处理更多数据并将其保留在RAM中的最简单方法之一是创建a shmfs
然后将数据放在fs上的文件中,使用普通的seek/read/write原语访问它们,或将它们映射到一次一个内存mmap
(基本上相当于做你自己的分页).但无论你做什么,它都需要比使用前3GB更多的工作.
或者,您可以根据需要启动尽可能多的memcached实例,直到映射完所有物理内存.每个memcached实例可以在32位机器上提供3GiB.
然后通过API和 memcached的语言绑定以块的形式访问内存.根据应用程序的不同,它可能几乎与直接在64位平台上工作一样快.对于某些应用程序,您可以获得创建可伸缩程序的额外好处.没有多少主板可以处理超过64GiB的RAM,但是使用memcached,您可以轻松访问尽可能多的RAM.
编辑注意,这种方法当然也适用于Windows,或任何可以运行memcached的平台.