Answers:
您可以通过以下getconf
命令查询系统的配置来找出系统的默认页面大小:
$ getconf PAGE_SIZE
4096
要么
$ getconf PAGESIZE
4096
注意:上述单位通常以字节为单位,因此4096等于4096字节或4kB。
这是Linux内核的源代码中的硬连线:
$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#ifdef __ASSEMBLY__
#define PAGE_SIZE (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK (~(PAGE_SIZE-1))
移位位时,您将执行2的二进制乘法。因此,实际上,将位向左移(1 << PAGE_SHIFT
)就是2 ^ 12 = 4096的乘法。
$ echo "2^12" | bc
4096
硬件(特别是CPU的一部分MMU)确定可能的页面大小。与处理器寄存器的大小无关,而与地址空间的大小间接相关(因为MMU决定了两者)。
几乎所有架构都支持4kB页面大小。有些架构支持较大的页面(有些还支持较小的页面),但是4kB是非常普遍的默认设置。
Linux支持两种页面大小:
CONFIG_HUGETLB_PAGE
必须,并且CONFIG_HUGETLBFS
对于大多数使用也是)编译的。这对应于MMU描述符的第二个最深层次(Linux称为PMD)(或者至少通常如此,我不知道这是否适用于所有体系结构)。页面大小是内存使用量,内存使用量和速度之间的折衷。
对于大多数应用程序而言,较大页面大小的收益很小,而成本却很高。这就是为什么大多数系统仅使用普通大小的页面的原因。
您可以使用getconf
实用程序或C函数查询系统上的(正常)页面大小sysconf
。
$ getconf PAGE_SIZE
4096
使用大页面需要挂载hugetlbfs
文件系统并mmap
在此处ping文件。
页面大小主要取决于处理器体系结构。在x86上,从引入保护模式的386处理器开始,页面大小一直为4 kB。
在x64模式下,也可能会有大页面,大小为2 MB。但是,使用它们有点复杂。
您可以在Wikipedia文章中找到有关页面大小的更多信息。