#!/bin/bash
##############################################
# 自动获取 CPU/内存信息 + 理论带宽 + STREAM 实测脚本
# 作者:ChatGPT
##############################################
echo "==============================="
echo " CPU / Memory 信息收集"
echo "==============================="
# CPU 型号
CPU_MODEL=$(lscpu | grep "Model name" | awk -F: '{print $2}' | xargs)
# CPU 数量
CPU_COUNT=$(lscpu | grep "Socket(s)" | awk '{print $2}')
# 每 CPU 内存通道(推断:DDR5=8通道,DDR4=6通道)
# 读取 dimm 数量
DIMM_COUNT=$(dmidecode -t memory | grep -i "Size:" | grep -v "No Module" | wc -l)
# 读取 每条内存的类型
MEM_TYPE=$(dmidecode -t memory | grep -i "Type:" | grep -m1 -E "DDR4|DDR5" | awk '{print $2}')
# 总内存大小
TOTAL_MEM=$(free -h | grep Mem | awk '{print $2}')
# 自动判断通道数
if [[ "$MEM_TYPE" == "DDR5" ]]; then
CHANNEL_PER_CPU=8
elif [[ "$MEM_TYPE" == "DDR4" ]]; then
CHANNEL_PER_CPU=6
else
CHANNEL_PER_CPU=8 # 如果识别不到默认8通道
fi
TOTAL_CHANNELS=$((CHANNEL_PER_CPU * CPU_COUNT))
# 读取 DIMM 频率
MEM_FREQ=$(dmidecode -t memory | grep -i "Speed:" | grep -m1 "MT/s" | awk '{print $2}')
MEM_ACT_FREQ=$(dmidecode -t memory | grep "Configured Memory Speed" | awk '{print $4}' | sort -n | head -1)
echo "CPU 型号: $CPU_MODEL"
echo "CPU 数量: $CPU_COUNT"
echo "每 CPU 通道数: $CHANNEL_PER_CPU"
echo "总通道数: $TOTAL_CHANNELS"
echo "DIMM 数量: $DIMM_COUNT"
echo "总内存容量: $TOTAL_MEM"
echo "DIMM 频率: ${MEM_FREQ} MT/s"
echo "DIMM 实际频率: ${MEM_ACT_FREQ} MT/s"
echo "内存类型: $MEM_TYPE"
echo ""
echo "==============================="
echo " 计算理论带宽"
echo "==============================="
# 单通道理论带宽 = 频率 × 8 Bytes
# (注意:MT/s 已经是双倍数据率)
BW_SINGLE=$(echo "$MEM_FREQ * 8 / 1000" | bc -l)
BW_SINGLE=$(printf "%.2f" $BW_SINGLE)
BW_ACT_SINGLE=$(echo "$MEM_ACT_FREQ * 8 / 1000" | bc -l)
BW_ACT_SINGLE=$(printf "%.2f" $BW_ACT_SINGLE)
# 单 CPU 理论带宽
BW_CPU=$(echo "$BW_SINGLE * $CHANNEL_PER_CPU" | bc -l)
BW_CPU=$(printf "%.2f" $BW_CPU)
BW_ACT_CPU=$(echo "$BW_ACT_SINGLE * $CHANNEL_PER_CPU" | bc -l)
BW_ACT_CPU=$(printf "%.2f" $BW_ACT_CPU)
# 双 CPU 总理论带宽
BW_TOTAL=$(echo "$BW_CPU * $CPU_COUNT" | bc -l)
BW_TOTAL=$(printf "%.2f" $BW_TOTAL)
BW_ACT_TOTAL=$(echo "$BW_ACT_CPU * $CPU_COUNT" | bc -l)
BW_ACT_TOTAL=$(printf "%.2f" $BW_ACT_TOTAL)
echo "单通道理论带宽: $BW_SINGLE GB/s"
echo "单通道理论实际带宽: $BW_ACT_SINGLE GB/s"
echo "单 CPU 理论带宽: $BW_CPU GB/s"
echo "单 CPU 理论实际带宽: $BW_ACT_CPU GB/s"
echo "总理论带宽: $BW_TOTAL GB/s"
echo "总理论实际带宽: $BW_ACT_TOTAL GB/s"
07-07
1115
1115
03-24
4973
4973

被折叠的 条评论
为什么被折叠?



