要查询内存的实际带宽(也就是系统运行时的内存读写速度),可以使用以下方法:
---
1. 使用 `dmidecode` 查看内存规格(理论带宽)
如果你想知道的是理论带宽,可以用 `dmidecode` 命令:
```bash
sudo dmidecode --type memory
```
可以看到:
- 频率(Speed):如 3200 MT/s
- 宽度(Data Width):如 64-bit
- 通道(Channel):单通道/双通道/四通道等
计算理论带宽公式:
$$
\text{带宽 (GB/s)} = \frac{\text{频率 (MT/s)} \times \text{通道数} \times 64}{8 \times 10^3}
$$
比如:
- 单通道 DDR4-3200: \( 3200 \times 64 / 8 / 10^3 = 25.6 \) GB/s
- 双通道 DDR4-3200: \( 25.6 \times 2 = 51.2 \) GB/s
但这只是理论值,实际带宽需要跑测试。
---
2. 使用 `memtester` 进行内存带宽测试
Linux 下可以使用 `memtester` 进行压力测试:
```bash
sudo apt install memtester # Ubuntu/Debian
sudo yum install memtester # CentOS
```
运行测试:
```bash
sudo memtester 2G 5
```
它会在 RAM 中进行读/写操作,可以观察性能情况。
---
3. 使用 `sysbench` 进行内存吞吐量测试
安装 `sysbench`:
```bash
sudo apt install sysbench # Ubuntu/Debian
sudo yum install sysbench # CentOS
```
测试内存带宽(读写速度):
```bash
sysbench memory --memory-block-size=1M --memory-total-size=10G run
```
示例输出:
```
Operations performed: 10000 (198515.25 ops/sec)
Read 10.00GiB (1800.48 MiB/sec)
```
这里的 1800.48 MiB/sec 就是内存的实际带宽。
---
4. 使用 `stream` 测试内存带宽
`STREAM` 是一个专业的内存带宽测试工具,可以测出 `copy`, `scale`, `add`, `triad` 等操作的真实带宽。
安装 STREAM
```bash
git clone https://github.com/jeffhammond/STREAM.git
cd STREAM
make
./stream
```
输出示例:
```
Function Rate (MB/s)
Copy: 25548.8
Scale: 25318.5
Add: 27645.2
Triad: 27821.3
```
带宽取 Triad 最高值,这里是 27.8 GB/s。
---
5. 使用 `perf` 监控内存带宽
如果你的 CPU 支持 `perf`(Intel/AMD 处理器),可以使用 `perf` 监控实际的内存带宽:
```bash
sudo perf stat -e cache-misses,cache-references,L1-dcache-load-misses,LLC-load-misses -a sleep 5
```
它可以监控缓存命中率,如果 L3 缓存失效率较高,说明内存带宽可能成为瓶颈。
---
6. 在 Windows 下测试内存带宽
(1) AIDA64
AIDA64 是一个专业的硬件检测工具,它可以直接显示内存读、写、拷贝的带宽,单位通常是 MB/s 或 GB/s。
- 下载 AIDA64 并运行 Cache & Memory Benchmark
- 结果示例:
```
Memory Read: 50000 MB/s
Memory Write: 48000 MB/s
Memory Copy: 47000 MB/s
```
(2) SiSoftware Sandra
另一款专业工具,可以测量内存延迟、带宽、缓存性能等。
---
总结
| 方法 | 适用平台 | 作用 |
|------|--------|------|
| `dmidecode` | Linux | 查看理论带宽(内存规格) |
| `memtester` | Linux | 内存压力测试 |
| `sysbench` | Linux | 计算实际内存吞吐 |
| `STREAM` | Linux | 专业带宽测试 |
| `perf` | Linux | 监控缓存/内存带宽 |
| AIDA64 | Windows | 测试读/写/拷贝带宽 |
| Sandra | Windows | 详细分析内存性能 |
如果你想测试真实应用中的带宽,推荐 `STREAM` 或 `sysbench`。如果只是想知道大致规格,用 `dmidecode` 就行。
你是想测哪种情况?