Skip to content

Commit 57f0c85

Browse files
committed
Add hugepages_diag.sh
1 parent 254d287 commit 57f0c85

1 file changed

Lines changed: 82 additions & 0 deletions

File tree

sysadmin/hugepages_diag.sh

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
echo "=== HugePages Diagnostic ==="
5+
echo
6+
7+
echo "[1] /proc/meminfo"
8+
grep -i huge /proc/meminfo || echo "No hugepage-related fields found"
9+
echo
10+
11+
echo "[2] Static hugepage reservation"
12+
if [[ -r /proc/sys/vm/nr_hugepages ]]; then
13+
echo -n "nr_hugepages: "
14+
cat /proc/sys/vm/nr_hugepages
15+
else
16+
echo "Cannot read /proc/sys/vm/nr_hugepages"
17+
fi
18+
echo
19+
20+
echo "[3] Transparent Huge Pages (THP)"
21+
THP_BASE="/sys/kernel/mm/transparent_hugepage"
22+
if [[ -r "$THP_BASE/enabled" ]]; then
23+
echo -n "enabled: "
24+
cat "$THP_BASE/enabled"
25+
else
26+
echo "THP status file not found"
27+
fi
28+
29+
if [[ -r "$THP_BASE/defrag" ]]; then
30+
echo -n "defrag: "
31+
cat "$THP_BASE/defrag"
32+
fi
33+
echo
34+
35+
echo "[4] CPU support flags"
36+
CPU_FLAGS=$(grep -m1 '^flags' /proc/cpuinfo || true)
37+
38+
if echo "$CPU_FLAGS" | grep -qw pse; then
39+
echo "2 MB hugepages supported (pse)"
40+
else
41+
echo "2 MB hugepages flag NOT found"
42+
fi
43+
44+
if echo "$CPU_FLAGS" | grep -qw pdpe1gb; then
45+
echo "1 GB hugepages supported (pdpe1gb)"
46+
else
47+
echo "1 GB hugepages flag NOT found"
48+
fi
49+
echo
50+
51+
echo "[5] Per-size hugepage pools"
52+
HP_DIR="/sys/kernel/mm/hugepages"
53+
if [[ -d "$HP_DIR" ]]; then
54+
for d in "$HP_DIR"/hugepages-*; do
55+
[[ -d "$d" ]] || continue
56+
size=$(basename "$d")
57+
free=$(cat "$d/free_hugepages" 2>/dev/null || echo "?")
58+
total=$(cat "$d/nr_hugepages" 2>/dev/null || echo "?")
59+
reserved=$(cat "$d/resv_hugepages" 2>/dev/null || echo "?")
60+
echo "$size -> total=$total free=$free reserved=$reserved"
61+
done
62+
else
63+
echo "Hugepage sysfs directory not found"
64+
fi
65+
echo
66+
67+
echo "[6] Quick verdict"
68+
TOTAL=$(grep '^HugePages_Total:' /proc/meminfo 2>/dev/null | awk '{print $2}')
69+
THP=$(cat /sys/kernel/mm/transparent_hugepage/enabled 2>/dev/null || true)
70+
71+
if [[ "${TOTAL:-0}" -gt 0 ]]; then
72+
echo "Explicit hugepages AVAILABLE"
73+
else
74+
echo "Explicit hugepages NOT reserved"
75+
fi
76+
77+
if echo "$THP" | grep -q '\['; then
78+
ACTIVE=$(echo "$THP" | grep -o '\[[^]]*\]' | tr -d '[]')
79+
echo "THP active mode: $ACTIVE"
80+
else
81+
echo "THP status unknown"
82+
fi

0 commit comments

Comments
 (0)