最近在总结之前THP引出的一个问题,发现了一个让人迷惑的问题,记录总结一下过程。
参考文档:
https://lwn.net/Articles/423584/ 这里记录了引入THP的原因历史。
源码:transhuge.rst
从文档里说:Should the allocation succeed, the huge page will be filled, any existing small pages in the new page’s address range will be released, and the huge page will be inserted into the VMA. If no huge pages are available, the kernel falls back to small pages and the application never knows the difference.
这里是说一开始就按照巨页分配,如果找不到合适的巨页才falls-back到之前的逻辑分配4KB小页。而且有相关的fall-back的计数。
但是当看具体的计数的时候,发现对不起来,自己写一个小程序申请不超过2M的内存,从计数上看:AnonHugePages这个没有值,也就是没有申请到巨页,但是thp_fault_fallback计数依然是0。所以说为什么没有fallback计数呢?
[root@10 15881]# cat smaps | grep -A 13 heap
013d8000-013f9000 rw-p 00:00 0 [heap]
Size: 132 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Rss: 4 kB
Pss: 4 kB
Private_Dirty: 4 kB
Referenc