我们正在设计一种 CPU,它将受益于 16KB 的虚拟内存页面大小(这将使缓存访问降低功耗并提高目标工作负载的性能,内存碎片不是问题)。标准页面大小为 4KB。内核源代码是否有一个简单的方法将默认页面大小配置为 16KB?或者我们是否需要修改内核源代码才能从 4KB 更改为 16KB?对于文件系统来说,如果虚拟内存页面大小为 16KB,会产生哪些意想不到的副作用?
如果您有任何更深入了解 Linux 内核的 URL,那就太好了。
谢谢 :-)
答案1
是的,Linux 内核支持 4KB 以外的页面大小,并且在某些情况下默认为这些页面大小。
在 x86_64 架构上,仅支持 4KB(AFAIK),因为这是这些芯片唯一可以做的事情......
举个例子,ppc64 架构默认为 64KB 页面,尽管有一个内核编译时配置使用 4KB 页面(尽管它比 64KB 页面测试较少,因此可能因此不推荐。)
对于 aarch64 平台 (ARM),我相信内核支持 4KB、16KB 和 64KB 页面大小,因为在运行 Linux 的 ARM 上看到了这些页面大小。 (我相信这些都来自上游内核。)
你说“我们正在设计一个CPU”并谈论内核源代码修改...好吧,如果它是一个新的架构,那么你需要在内核中添加对它的支持,其中包括页面大小支持!如果它是现有架构(例如 aarch64)的实现,那么您可能能够使用现有的支持,尽管您可能需要向内核添加有关特定 CPU 的某些内容以使其支持它......
对于文件系统,文件系统的块大小不需要与页面大小匹配。在页面大小为 16KB 或 64KB 的计算机上,可以使用默认 4KB 块大小的 ext4 格式。
这两者往往相互关联的地方是在读/写文件系统时使用 O_DIRECT 绕过页面缓存。但这仍然有效,较新的内核通常只需要在 512 字节边界对齐。
换句话说,不要求页面大小和文件系统块大小以任何方式匹配。