计算服务器的内存的理论带宽

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值