#!/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"