cache line locking on AMD x86_64 utilising L3 CAT pseudo-locking
26

Configure Feed

Select the types of activity you want to include in your feed.

icepick / tools / check_support.sh
3.2 kB 110 lines
1#!/bin/bash 2 3set -e 4 5echo "icepick hardware support check" 6echo 7 8check_cpuid() { 9 if ! command -v cpuid &> /dev/null; then 10 echo "- cpuid command not found. install cpuid package for detailed info." 11 return 1 12 fi 13 14 echo "checking cat support via cpuid..." 15 if cpuid -1 -l 0x10 -s 0 2>/dev/null | grep -q "L3 CAT"; then 16 echo "+ l3 cat supported" 17 cpuid -1 -l 0x10 -s 1 2>/dev/null | grep -E "(ways|CLOS)" || true 18 else 19 echo "- l3 cat not supported on this cpu" 20 fi 21 echo 22} 23 24check_msr_module() { 25 echo "checking msr kernel module..." 26 if lsmod | grep -q "^msr "; then 27 echo "+ msr module loaded" 28 else 29 echo "- msr module not loaded" 30 echo " run: sudo modprobe msr" 31 fi 32 33 if [ -e /dev/cpu/0/msr ]; then 34 echo "+ /dev/cpu/0/msr exists" 35 if [ -r /dev/cpu/0/msr ]; then 36 echo "+ msr device readable" 37 else 38 echo "- msr device not readable (need root or cap_sys_rawio)" 39 fi 40 else 41 echo "- /dev/cpu/0/msr does not exist" 42 fi 43 echo 44} 45 46check_resctrl() { 47 echo "checking resctrl filesystem..." 48 if mount | grep -q "resctrl"; then 49 echo "+ resctrl mounted" 50 mount | grep resctrl 51 else 52 echo "- resctrl not mounted" 53 echo " run: sudo mount -t resctrl resctrl /sys/fs/resctrl" 54 fi 55 56 if [ -d /sys/fs/resctrl/info/L3 ]; then 57 echo 58 echo "l3 cat info from resctrl:" 59 echo " cbm mask: $(cat /sys/fs/resctrl/info/L3/cbm_mask 2>/dev/null || echo 'n/a')" 60 echo " min cbm: $(cat /sys/fs/resctrl/info/L3/min_cbm_bits 2>/dev/null || echo 'n/a')" 61 echo " num clos: $(cat /sys/fs/resctrl/info/L3/num_closids 2>/dev/null || echo 'n/a')" 62 fi 63 echo 64} 65 66check_hugepages() { 67 echo "checking huge pages..." 68 local nr_hugepages=$(cat /proc/sys/vm/nr_hugepages 2>/dev/null || echo "0") 69 local free_hugepages=$(grep HugePages_Free /proc/meminfo 2>/dev/null | awk '{print $2}' || echo "0") 70 local hugepage_size=$(grep Hugepagesize /proc/meminfo 2>/dev/null | awk '{print $2, $3}' || echo "n/a") 71 72 echo " configured: $nr_hugepages" 73 echo " free: $free_hugepages" 74 echo " size: $hugepage_size" 75 76 if [ "$free_hugepages" -gt 0 ]; then 77 echo "+ huge pages available" 78 else 79 echo "- no free huge pages" 80 echo " run: sudo sh -c 'echo 64 > /proc/sys/vm/nr_hugepages'" 81 fi 82 echo 83} 84 85cpu_info() { 86 echo "cpu information:" 87 grep -m1 "model name" /proc/cpuinfo | cut -d: -f2 | xargs echo " model:" 88 89 local vendor=$(grep -m1 "vendor_id" /proc/cpuinfo | cut -d: -f2 | xargs) 90 echo " vendor: $vendor" 91 92 if [ "$vendor" = "AuthenticAMD" ]; then 93 local family=$(grep -m1 "cpu family" /proc/cpuinfo | cut -d: -f2 | xargs) 94 local model=$(grep -m1 "^model" /proc/cpuinfo | head -1 | cut -d: -f2 | xargs) 95 echo " family: $family" 96 echo " model: $model" 97 if [ "$family" -ge 23 ]; then 98 echo "+ zen architecture (cat likely supported)" 99 fi 100 fi 101 echo 102} 103 104cpu_info 105check_cpuid 106check_msr_module 107check_resctrl 108check_hugepages 109 110echo "check complete"