linux 巨頁使用測試
這裏記錄測試巨頁的mmap使用,測試代碼和《linux 巨頁使用測試以及勘誤1》類似。
跟蹤腳本如下:
probe kernel.function("hugetlb_reserve_pages").return
{
printf("hugetlb_reserve_pages pid=%d,ret=%d\r\n",pid(),$return);
}
probe kernel.function("hugetlb_acct_memory").return
{
print_backtrace();
printf("hugetlb_acct_memory pid=%d,ret=%d\r\n",pid(),$return);
}
probe kernel.function("gather_surplus_pages").inline
{
print_backtrace();
printf("gather_surplus_pages pid=%d,resv_huge_pages=%d,delta=%d,free_=%d,order=%d\r\n",pid(),$h->resv_huge_pages,$delta,$h->free_huge_pages,$h->order);
}
probe kernel.function("__alloc_buddy_huge_page").return
{
print_backtrace();
printf("gather_surplus_pages pid=%d\r\n,nr_huge_pages=%d,surplus_huge_pages=%d,order=%d,nr_overcommit_huge_pages=%d,ret=%d\r\n",pid(),$h->nr_huge_pages,$h->surplus_huge_pages,$h->order,$h->nr_overcommit_huge_pages,$return);
}
跟蹤結果如下:
當/proc/sys/vm/nr_hugepages設置為0,則由於__alloc_buddy_huge_page分配內存失敗而報內存不足,將其設置為我們測試代碼想要分配的內存除以2M,圓整再加1,則可以分配到內存。
當mmap分配成功之後的addr,則可以使用memcpy或者read系統調用去使用。但write調用因為沒有實現,而不能執行。
linux 巨頁使用測試