How can I see the number of transparent hugepages that are actually in use on the system (either globally or by individual processes)? How do I check transparent hugepage usage per process in Linux. How to check which application or process is using which amount of HugePages. How to find per-process hugepages utilization.

In this article I will share the steps to check Transparent HugePage usage per process in Linux with examples.
First of all you must check if system is configured with hugepages:
# grep -i huge /proc/meminfo
AnonHugePages: 835584 kB
HugePages_Total: 12850
HugePages_Free: 13
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Used hugepages can be calculated by below method.
HugePages_Total- HugePages_Free = HugePages_Used
Check system-wide Transparent HugePage Usage
Before we check transparent hugepage per process, let us check system
wife THP usage. The number of anonymous transparent huge pages currently
used by the system is available by reading the AnonHugePages field in
/proc/meminfo.
# grep AnonHugePages /proc/meminfo
AnonHugePages: 835584 kB
Check Transparent HugePage usage per process
/proc/[pid]/smaps (since Linux 2.6.14) shows memory consumption for
each of the process’s mappings. For each mapping there is a series of
lines.
To identify what applications are using anonymous transparent huge
pages, it is necessary to read /proc/PID/smaps and count the
AnonHugePages fields for each mapping. “AnonHugePages” shows the
amount of memory backed by transparent hugepage. If you already have the
process information for which you wish to collect the THP usage
# grep -e AnonHugePages /proc/10723/smaps | awk '{ if($2>4) print $0} ' | awk -F "/" '{print $0; system("ps -fp 10723")} '
AnonHugePages: 2048 kB
UID PID PPID C STIME TTY TIME CMD
polkitd 10723 1 0 Jul29 ? 00:00:08 /usr/lib/polkit-1/polkitd --no-debug
AnonHugePages: 6144 kB
UID PID PPID C STIME TTY TIME CMD
polkitd 10723 1 0 Jul29 ? 00:00:08 /usr/lib/polkit-1/polkitd --no-debug
ShmemPmdMapped and ShmemHugePages fields in
/proc/meminfo. To identify what applications are mapping file
transparent huge pages, it is necessary to read /proc/PID/smaps and
count the FileHugeMapped fields for each mapping.
Here 10723 is the PID for which I wish to get the transparent hugepage
usage. To get only limited (brief) information about the command we will
use “-o comm="
# grep -e AnonHugePages /proc/10723/smaps | awk '{ if($2>4) print $0} ' | awk -F "/" '{print $0; system("ps -fp 10723 -o comm=")} '
AnonHugePages: 2048 kB
polkitd
AnonHugePages: 6144 kB
polkitd
So I see for two of the mappings for polkitd process, it is using
transparent hugepage. Now to get the total amount of THP usage for this
process you can run following command
# grep -e AnonHugePages /proc/10709/smaps | awk '{ if($2>4) print $0} ' | awk -F ":" '{print $2}' | awk '{Total+=$1} END {print "Total AnonHugePages: " Total" Kb -"}' | awk -F "/" '{printf $0; system("ps -fp 10709 -o comm= ")} '
Total AnonHugePages: 6144 Kb -polkitd
To check transparent hugepage usage per process (for all the processes) on the system which is using THP
# grep -e AnonHugePages /proc/*/smaps | awk '{ if($2>4) print $0} ' | awk -F "/" '{print $0; system("ps -fp " $3)} '
Lastly I hope the steps from the article to check transparent hugepage usage per process on Linux was helpful. So, let me know your suggestions and feedback using the comment section.
References
Red Hat Knowledgebase


