-
Notifications
You must be signed in to change notification settings - Fork 6k
add script to check the cpu env #6291
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,167 @@ | ||
| #!/bin/bash | ||
|
|
||
| if [ "`uname -s`" != "Linux" ]; then | ||
| echo "Current scenario only support in Linux yet!" | ||
| exit 0 | ||
| fi | ||
|
|
||
| echo "========================= Hardware Information =========================" | ||
| sockets=`grep 'physical id' /proc/cpuinfo | sort -u | wc -l` | ||
| cores_per_socket=`grep 'core id' /proc/cpuinfo | sort -u | wc -l` | ||
| ht=`lscpu |grep "per core" |awk -F':' '{print $2}'|xargs` | ||
| physical_cores=$((sockets * cores_per_socket)) | ||
| virtual_cores=`grep 'processor' /proc/cpuinfo | sort -u | wc -l` | ||
| numa_nodes=`lscpu |grep "NUMA node(s)"|awk -F':' '{print $2}'|xargs` | ||
| echo "CPU Name : `lscpu |grep \"name\" |awk -F':' '{print $2}'|xargs`" | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. CPU Name,我试了两台机器,打出来都是空? |
||
| echo "CPU Family : `lscpu |grep \"CPU family\" |awk -F':' '{print $2}'|xargs`" | ||
| echo "Socket Number : $sockets" | ||
| echo "Cores Per Socket : $cores_per_socket" | ||
| echo "Total Physical Cores : $physical_cores" | ||
| echo "Total Virtual Cores : $virtual_cores" | ||
| if [ $ht -eq 1 ]; then | ||
| echo "Hyper Threading : OFF" | ||
| if [ $physical_cores -ne $virtual_cores ]; then | ||
| echo "Error: HT logical error" | ||
| fi | ||
| else | ||
| echo "Hyper Threading : ON" | ||
| if [ $physical_cores -ge $virtual_cores ]; then | ||
| echo "Error: HT logical error" | ||
| fi | ||
| fi | ||
| echo "NUMA Nodes : $numa_nodes" | ||
| if [ $numa_nodes -lt $sockets ]; then | ||
| echo "Warning: NUMA node is not enough for the best performance,\ | ||
| at least $sockets" | ||
| fi | ||
|
|
||
| echo "-------------------------- Memory Information --------------------------" | ||
| # dmidecode support start from 2.11 | ||
| max_dimms=0 | ||
| num_dimms_installed=0 | ||
| for dimm_id in `dmidecode |grep Locator|sort -u | awk -F ':' '{print $2}'`; do | ||
| num_refered=`dmidecode |grep -c "$dimm_id"` | ||
| # the acutal dimm id should be refered only once | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. acutal笔误:Actual |
||
| if [ $num_refered -eq 1 ]; then | ||
| num_unknown=`dmidecode | awk '/'$dimm_id'/ {s=1}; {if (s==1) {a[NR]=$0}}; | ||
| /Manufacturer/ {s=0; for (i in a) print a[i]; delete a}' |grep -ic unknown` | ||
| if [ $num_unknown -eq 0 ]; then | ||
| dimms_installed="$dimms_installed \n $dimm_id" | ||
| ((num_dimms_installed++)) | ||
| else | ||
| dimms_uninstalled="$dimms_uninstalled \n $dimm_id" | ||
| fi | ||
| ((max_dimms++)) | ||
| fi | ||
| done | ||
| echo "Installed DIMM number : $num_dimms_installed" | ||
| num_dimms_mapped=`dmidecode | grep "Memory Device Mapped" | wc -l` | ||
| if [ $num_dimms_installed -ne $num_dimms_mapped ]; then | ||
| echo "Error: The installed DIMMs number does ont match the mapped memory device: $num_dimms_mapped" | ||
| fi | ||
| num_clock_configed=`dmidecode | grep -i "Configured Clock Speed" |grep -ic "Hz"` | ||
| if [ $num_dimms_installed -ne $num_clock_configed ]; then | ||
| echo "Error: The installed DIMMs number does ont match configured clocks: $num_clock_configed" | ||
| fi | ||
| echo -e "Installed DIMMs Locator: $dimms_installed" | ||
| echo -e "Not installed DIMMs : $dimms_uninstalled" | ||
| max_dimm_slots=`dmidecode | grep -c "Bank Locator"` | ||
| echo "DIMMs max slots : $max_dimm_slots" | ||
| if [ $max_dimms -ne $max_dimm_slots ]; then | ||
| echo "Error: The max dimm slots do not match the max dimms: $max_dimms" | ||
| fi | ||
| echo "Memory Size : `free -h |grep -i mem |awk -F' ' '{print $2}'|xargs`" | ||
| echo "Swap Memory Size : `free -h |grep -i swap |awk -F' ' '{print $2}'|xargs`" | ||
| echo "Total Memory Size : `free -th |grep -i total |tail -n 1| awk -F' ' '{print $2}'|xargs`" | ||
| echo "Max Memory Capacity : `dmidecode |grep -i \"maximum capacity\"|sort -u|awk -F':' '{print $2}'|xargs`" | ||
| # DIMMs fequency | ||
| clock_speeds=`dmidecode | grep -i "Configured Clock Speed" | grep -i "Hz" |sort -u | awk -F':' '{print $2}'|xargs` | ||
| echo "Configed Clock Speed : $clock_speeds" | ||
| num_clock_type=`dmidecode | grep -i "Configured Clock Speed" | grep -i "Hz" |sort -u | wc -l` | ||
| if [ $num_clock_type -ne 1 ]; then | ||
| echo "Warning: Have more than 1 speed type, all DIMMs should have same fequency: $clock_speeds" | ||
| fi | ||
|
|
||
| echo "-------------------------- Turbo Information --------------------------" | ||
| scaling_drive=`cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver` | ||
| echo "Scaling Driver : $scaling_drive" | ||
| if [ $scaling_drive == "intel_pstate" ] && [ -e /sys/devices/system/cpu/intel_pstate/no_turbo ]; then | ||
| turbo=`cat /sys/devices/system/cpu/intel_pstate/no_turbo` | ||
| if [ $turbo -eq 1 ]; then | ||
| echo "Turbo Status : OFF" | ||
| else | ||
| echo "Turbo Status : ON" | ||
| fi | ||
| else | ||
| echo "Warning: Scaling driver is not intel_pstarte, maybe should enable it in BIOS" | ||
| echo "Turbo Status : Unknown" | ||
| fi | ||
| # cpu frequency | ||
| num_max_freq=`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq| sort -u |wc -l` | ||
| num_min_freq=`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq| sort -u |wc -l` | ||
| if [ $num_max_freq -ne 1 ]; then | ||
| echo "Error: the max_frequency of all CPU should be equal" | ||
| fi | ||
| if [ $num_min_freq -ne 1 ]; then | ||
| echo "Error: the min_frequency of all CPU should be equal" | ||
| fi | ||
| max_freq=`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq| uniq|xargs` # kHz | ||
| max_freq=`awk 'BEGIN{printf "%.2f",('$max_freq' / 1000000)}'` # GHz | ||
| min_freq=`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq| uniq|xargs` # kHz | ||
| min_freq=`awk 'BEGIN{printf "%.2f",('$min_freq' / 1000000)}'` # GHz | ||
| echo "CPU Max Frequency : $max_freq GHz" | ||
| echo "CPU Min Frequency : $min_freq GHz" | ||
| # cpu governor | ||
| num_governor=`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor| sort -u |wc -l` | ||
| if [ $num_governor -ne 1 ]; then | ||
| echo "Error: the governor of all CPU should be the same" | ||
| fi | ||
| governor=`cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor| sort -u |uniq` | ||
| echo "CPU Freq Governor : $governor" | ||
|
|
||
|
|
||
| echo "========================= Software Information =========================" | ||
| echo "BIOS Release Date : `dmidecode | grep "Release Date"|awk -F ':' '{print $2}'|xargs`" | ||
| echo "OS Version : `cat /etc/redhat-release`" | ||
| echo "Kernel Release Version : `uname -r`" | ||
| echo "Kernel Patch Version : `uname -v`" | ||
| echo "GCC Version :`gcc --version | head -n 1|awk -F '\\\(GCC\\\)' '{print $2}'`" | ||
| echo "CMake Version :`cmake --version | head -n 1 | awk -F 'version' '{print $2}'`" | ||
| echo "------------------ Environment Variables Information -------------------" | ||
| kmp_affinity=`env | grep KMP_AFFINITY` | ||
| omp_dynamic=`env | grep OMP_DYNAMIC` | ||
| omp_nested=`env | grep OMP_NESTED` | ||
| omp_num_threads=`env | grep OMP_NUM_THREADS` | ||
| mkl_num_threads=`env | grep MKL_NUM_THREADS` | ||
| mkl_dynamic=`env | grep MKL_DYNAMIC` | ||
| if [ ! $kmp_affinity ]; then kmp_affinity="unset"; fi | ||
| if [ ! $omp_dynamic ]; then omp_dynamic="unset"; fi | ||
| if [ ! $omp_nested ]; then omp_nested="unset"; fi | ||
| if [ ! $omp_num_threads ]; then omp_num_threads="unset"; fi | ||
| if [ ! $mkl_num_threads ]; then mkl_num_threads="unset"; fi | ||
| if [ ! $mkl_dynamic ]; then mkl_dynamic="unset"; fi | ||
| echo "KMP_AFFINITY : $kmp_affinity" | ||
| echo "OMP_DYNAMIC : $omp_dynamic" | ||
| echo "OMP_NESTED : $omp_nested" | ||
| echo "OMP_NUM_THREADS : $omp_num_threads" | ||
| echo "MKL_NUM_THREADS : $mkl_num_threads" | ||
| echo "MKL_DYNAMIC : $mkl_dynamic" | ||
| # Check if any MKL related libraries have been installed in LD_LIBRARY_PATH | ||
| for path in `echo $LD_LIBRARY_PATH | awk -F ':' '{for(i=1;i<=NF;++i)print $i}'`; do | ||
| mkldnn_found=`find $path -name "libmkldnn.so"` | ||
| if [ "$mkldnn_found" ]; then | ||
| echo "Found MKL-DNN : $mkldnn_found" | ||
| fi | ||
| mklml_found=`find $path -name "libmklml_intel.so"` | ||
| if [ "$mklml_found" ]; then | ||
| echo "Found MKLML : $mklml_found" | ||
| fi | ||
| iomp_found=`find $path -name "libiomp5.so"` | ||
| if [ "$iomp_found" ]; then | ||
| echo "Found IOMP : $iomp_found" | ||
| fi | ||
| done | ||
|
|
||
| # dump all details for fully check | ||
| lscpu > lscpu.dump | ||
| dmidecode > dmidecode.dump | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 可以在脚本后面列一下正确的输出么?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 没有完全正确的输出,因为不同平台需要的结果可能不一样。
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 不需要正确的输出,只是给一个输出的例子。 |
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mac上的docker环境也不适用?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
我试过, 主要是
dmidecode这个指令没有,所以不支持,如果在docker里面加进去就可以了。There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
可以新开一个issue,在docker环境下加入dmidecode指令?