|
4 | 4 |
|
5 | 5 | hugepages=$(getarg hugepages=) || hugepages=0 |
6 | 6 |
|
7 | | -if [ $hugepages -gt 0 ]; then |
| 7 | +mem_total_mb=$(($(sed -rn 's/MemTotal:\s+(.*) kB/\1/p' /proc/meminfo) / 1024 )) |
| 8 | +hugepagesize_mb=$(($(sed -rn 's/Hugepagesize:\s+(.*) kB/\1/p' /proc/meminfo) / 1024 )) |
| 9 | + |
| 10 | +function adopt_watermark_scale_factor() { |
| 11 | + # On a 3TiB host, the default watermark_scale_factor=10 was exactly that |
| 12 | + # that the kswapd0 was running permanently. Setting it to 5 was solving the |
| 13 | + # issue, but is likely a suboptimal value, but a first start. |
| 14 | + # The value 500 reproduces exactly that value for that scale, and hopefully |
| 15 | + # also holds for larger hosts. |
| 16 | + max_watermark_scale_factor=$(($non_hugepages_mb * 500 / $mem_total_mb)) |
| 17 | + watermark_scale_factor=$(</proc/sys/vm/watermark_scale_factor) |
| 18 | + if [ $max_watermark_scale_factor -lt $watermark_scale_factor ]; then |
| 19 | + echo $max_watermark_scale_factor > /proc/sys/vm/watermark_scale_factor |
| 20 | + fi |
| 21 | +} |
| 22 | + |
| 23 | +if [ ${hugepages:-0} -gt 0 ]; then |
| 24 | + hugepages_mb=$(($hugepages * $hugepagesize_mb)) |
| 25 | + non_hugepages_mb=$(($mem_total_mb - $hugepages_mb)) |
| 26 | + adopt_watermark_scale_factor |
8 | 27 | exit 0 |
9 | 28 | fi |
10 | 29 |
|
11 | 30 | non_hugepages_mb=$(getarg rd.non_hugepages_mb=) || non_hugepages_mb=32768 |
| 31 | +hugepages=$((($mem_total_mb - $non_hugepages_mb) / $hugepagesize_mb)) |
12 | 32 |
|
13 | | -mem_total_mb=$(($(sed -rn 's/MemTotal:\s+(.*) kB/\1/p' /proc/meminfo) / 1024 )) |
14 | | -hugepagesize_mb=$(($(sed -rn 's/Hugepagesize:\s+(.*) kB/\1/p' /proc/meminfo) / 1024 )) |
15 | | -nr_hugepages=$((($mem_total_mb - $non_hugepages_mb) / $hugepagesize_mb)) |
16 | | - |
17 | | -if [ $nr_hugepages -le 0 ]; then |
| 33 | +if [ $hugepages -le 0 ]; then |
18 | 34 | exit 0 |
19 | 35 | fi |
20 | 36 |
|
21 | | -cmdline="$(</proc/cmdline) hugepages=$nr_hugepages" |
| 37 | +cmdline="$(</proc/cmdline) hugepages=$hugepages" |
22 | 38 | release=$(uname -r) |
23 | 39 |
|
24 | 40 | NEWROOT=${NEWROOT:-/sysroot} |
|
0 commit comments