1==================
2HugeTLB Controller
3==================
4
5The HugeTLB controller allows to limit the HugeTLB usage per control group and
6enforces the controller limit during page fault. Since HugeTLB doesn't
7support page reclaim, enforcing the limit at page fault time implies that,
8the application will get SIGBUS signal if it tries to access HugeTLB pages
9beyond its limit. This requires the application to know beforehand how much
10HugeTLB pages it would require for its use.
11
12HugeTLB controller can be created by first mounting the cgroup filesystem.
13
14# mount -t cgroup -o hugetlb none /sys/fs/cgroup
15
16With the above step, the initial or the parent HugeTLB group becomes
17visible at /sys/fs/cgroup. At bootup, this group includes all the tasks in
18the system. /sys/fs/cgroup/tasks lists the tasks in this cgroup.
19
20New groups can be created under the parent group /sys/fs/cgroup::
21
22  # cd /sys/fs/cgroup
23  # mkdir g1
24  # echo $$ > g1/tasks
25
26The above steps create a new group g1 and move the current shell
27process (bash) into it.
28
29Brief summary of control files::
30
31 hugetlb.<hugepagesize>.limit_in_bytes     # set/show limit of "hugepagesize" hugetlb usage
32 hugetlb.<hugepagesize>.max_usage_in_bytes # show max "hugepagesize" hugetlb  usage recorded
33 hugetlb.<hugepagesize>.usage_in_bytes     # show current usage for "hugepagesize" hugetlb
34 hugetlb.<hugepagesize>.failcnt		   # show the number of allocation failure due to HugeTLB limit
35
36For a system supporting three hugepage sizes (64k, 32M and 1G), the control
37files include::
38
39  hugetlb.1GB.limit_in_bytes
40  hugetlb.1GB.max_usage_in_bytes
41  hugetlb.1GB.usage_in_bytes
42  hugetlb.1GB.failcnt
43  hugetlb.64KB.limit_in_bytes
44  hugetlb.64KB.max_usage_in_bytes
45  hugetlb.64KB.usage_in_bytes
46  hugetlb.64KB.failcnt
47  hugetlb.32MB.limit_in_bytes
48  hugetlb.32MB.max_usage_in_bytes
49  hugetlb.32MB.usage_in_bytes
50  hugetlb.32MB.failcnt
51