110 lines
3.1 KiB
Bash
Executable file
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"
|