有/proc/buddyinfo
一个非常有用的。良好的输出格式更有用,例如此Python脚本可以做到:
https://gist.github.com/labeneator/9574294
对于大页面,您需要一些2097152(2MiB)或更大的免费片段。对于透明的大页面,当请求内核时,它将自动压缩,但是如果要查看可以获取的数量,请以root身份运行:
echo 1 | sudo tee /proc/sys/vm/compact_memory
同样可以,巨大的页面会导致较大的碎片问题。您可能无法获得任何大页面,或者它们的存在会导致内核花费大量额外时间来尝试获取一些页面。
我有一个适合我的解决方案。我在几台服务器和笔记本电脑上使用它。它非常适合虚拟机。
将kernelcore=4G
选项添加到Linux内核命令行。在我的服务器上,我使用8G。请小心该数字,因为它会阻止内核在该内存之外分配任何内容。需要大量套接字缓冲区或将磁盘流写入数百个驱动器的服务器不会像这样受到限制。必须为平板或DMA“固定”的任何内存分配都在此类别中。
然后,所有其他内存将变为“可移动”,这意味着可以将其压缩为漂亮的块,以进行大量页面分配。现在,透明的大页面可以真正起飞并按预期工作。每当内核需要更多2M页面时,它都可以将4K页面重新映射到其他地方。
而且,我不太确定这与零拷贝直接IO如何相互作用。不应固定“可移动区域”中的内存,但是直接IO请求将完全针对DMA。它可能会复制它。无论如何,它可能会将其固定在可移动区域中。无论哪种情况,它可能都不是您想要的。