icepick/tools/check_support.sh
2026-01-17 23:34:52 +00:00

110 lines
3.1 KiB
Bash
Executable file

#!/bin/bash
set -e
echo "icepick hardware support check"
echo
check_cpuid() {
if ! command -v cpuid &> /dev/null; then
echo "- cpuid command not found. install cpuid package for detailed info."
return 1
fi
echo "checking cat support via cpuid..."
if cpuid -1 -l 0x10 -s 0 2>/dev/null | grep -q "L3 CAT"; then
echo "+ l3 cat supported"
cpuid -1 -l 0x10 -s 1 2>/dev/null | grep -E "(ways|CLOS)" || true
else
echo "- l3 cat not supported on this cpu"
fi
echo
}
check_msr_module() {
echo "checking msr kernel module..."
if lsmod | grep -q "^msr "; then
echo "+ msr module loaded"
else
echo "- msr module not loaded"
echo " run: sudo modprobe msr"
fi
if [ -e /dev/cpu/0/msr ]; then
echo "+ /dev/cpu/0/msr exists"
if [ -r /dev/cpu/0/msr ]; then
echo "+ msr device readable"
else
echo "- msr device not readable (need root or cap_sys_rawio)"
fi
else
echo "- /dev/cpu/0/msr does not exist"
fi
echo
}
check_resctrl() {
echo "checking resctrl filesystem..."
if mount | grep -q "resctrl"; then
echo "+ resctrl mounted"
mount | grep resctrl
else
echo "- resctrl not mounted"
echo " run: sudo mount -t resctrl resctrl /sys/fs/resctrl"
fi
if [ -d /sys/fs/resctrl/info/L3 ]; then
echo
echo "l3 cat info from resctrl:"
echo " cbm mask: $(cat /sys/fs/resctrl/info/L3/cbm_mask 2>/dev/null || echo 'n/a')"
echo " min cbm: $(cat /sys/fs/resctrl/info/L3/min_cbm_bits 2>/dev/null || echo 'n/a')"
echo " num clos: $(cat /sys/fs/resctrl/info/L3/num_closids 2>/dev/null || echo 'n/a')"
fi
echo
}
check_hugepages() {
echo "checking huge pages..."
local nr_hugepages=$(cat /proc/sys/vm/nr_hugepages 2>/dev/null || echo "0")
local free_hugepages=$(grep HugePages_Free /proc/meminfo 2>/dev/null | awk '{print $2}' || echo "0")
local hugepage_size=$(grep Hugepagesize /proc/meminfo 2>/dev/null | awk '{print $2, $3}' || echo "n/a")
echo " configured: $nr_hugepages"
echo " free: $free_hugepages"
echo " size: $hugepage_size"
if [ "$free_hugepages" -gt 0 ]; then
echo "+ huge pages available"
else
echo "- no free huge pages"
echo " run: sudo sh -c 'echo 64 > /proc/sys/vm/nr_hugepages'"
fi
echo
}
cpu_info() {
echo "cpu information:"
grep -m1 "model name" /proc/cpuinfo | cut -d: -f2 | xargs echo " model:"
local vendor=$(grep -m1 "vendor_id" /proc/cpuinfo | cut -d: -f2 | xargs)
echo " vendor: $vendor"
if [ "$vendor" = "AuthenticAMD" ]; then
local family=$(grep -m1 "cpu family" /proc/cpuinfo | cut -d: -f2 | xargs)
local model=$(grep -m1 "^model" /proc/cpuinfo | head -1 | cut -d: -f2 | xargs)
echo " family: $family"
echo " model: $model"
if [ "$family" -ge 23 ]; then
echo "+ zen architecture (cat likely supported)"
fi
fi
echo
}
cpu_info
check_cpuid
check_msr_module
check_resctrl
check_hugepages
echo "check complete"