更改内存页面大小

时间:2014-12-02 09:51:00

标签: linux memory paging frames

我在那里读到,虚拟内存页面的数量等于物理内存帧的数量,并且帧的大小和页面的大小相等,就像我的32位系统一样,页面大小是4096.

我觉得有没有办法改变页面大小或帧大小?

我正在使用Linux操作系统。我搜索了很多,我找到的是,我们可以更改页面大小,或者实际上我们可以通过转移到大页面来增加页面大小。是否有任何其他方式来更改(增加或减少)或设置页面大小我们的选择?

(不编码,一般问题)

1 个答案:

答案 0 :(得分:1)

在实践中,(几乎)不可能改变"内存页面大小,因为page大小已知&由MMU硬件确定,因此操作系统正在考虑这一点。但是,请注意某些 Linux系统(和硬件!)具有hugetlbpage而Linux mmap(2)可能接受MAP_HUGETLB(但您的代码应处理处理器或没有巨大页面支持的内核,例如,当第一个mmap MAP_HUGETLB失败时,通过 mmap再次调用 MAP_HUGETLB

根据我的阅读,在某些 Linux系统上,您可以使用各种大小的hugetlbpage。但系统管理员可以限制这些(或某些内核禁用它),因此您的代码应始终准备好mmap MAP_HUGETLB失败。

即使使用那些"大页面",页面大小也不是任意的。在POSIX系统上使用sysconf(_SC_PAGE_SIZE)来获取标准页面大小(通常为4K字节)。另请参阅sysconf(3)

AFAIK,即使在具有hugetlbpage功能的系统上,mmap也可以称为,不含 MAP_HUGETLB和页面大小(由sysconf(_SC_PAGE_SIZE)报告)仍然是4Kbytes。也许一些最近的内核有一些奇怪的配置,到处都在使用大页面,而IIRC的某些内核可能配置了1Mbyte页面(我不确定,我可能错了)......