#!/bin/sh ######################################## # Description: This script is used to get cpu information on x86 and x64 systems. ######################################## #################### # Set variables #################### PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin dmesg_file=/var/run/dmesg.boot ######################### # Main ######################### cpu_model=`sysctl -n hw.model | sed 's/^ *//;s/ *$//' | sed 's/ */\ /g'` model=`echo $cpu_model` echo $cpu_model | grep Hz > /dev/null 2>&1 if [ $? -eq 1 ] then dmidecode -V > /dev/null 2>&1 if [ $? -eq 0 ] then dmidecode | grep 'No SMBIOS nor DMI' > /dev/null 2>&1 if [ $? -eq 1 ] then cpuspeed=`dmidecode -t 4 | sed -r 's/^[[:space:]]+//' | grep '^Current Speed:' | uniq | awk '{print $3}'` if [ $cpuspeed -lt 1000 ] then cpuspeed_pretty=`echo $cpuspeed'MHz'` else cpuspeed_ghz=$(echo "scale=2; $cpuspeed / 1000" | bc) cpuspeed_pretty=`echo $cpuspeed_ghz'GHz'` fi else cpuspeed=`sysctl -n hw.cpuspeed` if [ $cpuspeed -lt 1000 ] then cpuspeed_pretty=`echo $cpuspeed'MHz'` else cpuspeed_ghz=$(echo "scale=2; $cpuspeed / 1000" | bc) cpuspeed_pretty=`echo $cpuspeed_ghz'GHz'` fi fi fi cpu_model=`echo $model @ $cpuspeed_pretty` fi logical_cpus=`sysctl -n hw.ncpu` grep '^cpu.*: smt ' $dmesg_file > /dev/null 2>&1 if [ $? -eq 0 ] then physical_cpus=`grep '^cpu.*: smt ' $dmesg_file | uniq | cut -d : -f 2- | cut -d , -f 1 | uniq | wc -l` cores_per_cpu=$((`grep '^cpu.*: smt ' $dmesg_file | uniq | cut -d : -f 2- | cut -d , -f 2 | awk '{print $2}' | sort | tail -n 1` + 1)) threads_per_cpu=$(($logical_cpus / $physical_cpus)) else physical_cpus=1 cores_per_cpu=1 threads_per_cpu=1 fi if [ "$threads_per_cpu" -gt "$cores_per_cpu" ] then hyper_threading="Yes" else hyper_threading="No" fi echo Model: $cpu_model echo Hyper-Threading: $hyper_threading echo Physical CPU\'s: $physical_cpus echo Cores per CPU: $cores_per_cpu echo Threads per CPU: $threads_per_cpu echo Logical CPU\'s: $logical_cpus exit 0