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