Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 142e2fa

Browse files
committed
[orabos] Tune vm.watermark_scale_factor
The value is scaling with the amount of RAM in the system, but we take a way a large chunk for huge-pages.
1 parent 9414d64 commit 142e2fa

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

features/orabos/file.include/usr/lib/dracut/modules.d/99ensure-hugepages/ensure-hugepages.sh

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,37 @@
44

55
hugepages=$(getarg hugepages=) || hugepages=0
66

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
827
exit 0
928
fi
1029

1130
non_hugepages_mb=$(getarg rd.non_hugepages_mb=) || non_hugepages_mb=32768
31+
hugepages=$((($mem_total_mb - $non_hugepages_mb) / $hugepagesize_mb))
1232

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
1834
exit 0
1935
fi
2036

21-
cmdline="$(</proc/cmdline) hugepages=$nr_hugepages"
37+
cmdline="$(</proc/cmdline) hugepages=$hugepages"
2238
release=$(uname -r)
2339

2440
NEWROOT=${NEWROOT:-/sysroot}

0 commit comments

Comments
 (0)