写于 2022 年 6 月 24 日
内存性能测试方法 - Wesley’s Blog
dd方法测试
cat proc/meminfo
console:/ # cat proc/meminfo
MemTotal: 3858576 kB
MemFree: 675328 kB
MemAvailable: 1142452 kB
Buffers: 65280 kB
Cached: 992252 kB
SwapCached: 40 kB
Active: 1144480 kB
Inactive: 923220 kB
Active(anon): 875244 kB
Inactive(anon): 667400 kB
Active(file): 269236 kB
Inactive(file): 255820 kB
Unevictable: 4436 kB
Mlocked: 4436 kB
SwapTotal: 614396 kB
SwapFree: 601596 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 1014744 kB
Mapped: 301460 kB
Shmem: 530712 kB
KReclaimable: 39912 kB
Slab: 142104 kB
SReclaimable: 39912 kB
SUnreclaim: 102192 kB
KernelStack: 33088 kB
ShadowCallStack: 2078 kB
PageTables: 39964 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2263732 kB
Committed_AS: 47064316 kB
VmallocTotal: 262930368 kB
VmallocUsed: 56632 kB
VmallocChunk: 0 kB
Percpu: 2768 kB
CmaTotal: 1921024 kB
CmaFree: 158092 kB
剩1.1G左右,所以,我们创建一个挂载在内存上面的分区,大小为可用内存的一半左右。
mount -o rw,remount /
mkdir memtest
mount -t tmpfs tmpfs /memtest -o size=600m
内存写测试
dd if=/dev/zero of=/memtest/testfile bs=1M count=500
dd if=/dev/zero of=/memtest/testfile bs=500M count=1
dd if=/dev/zero of=/memtest/testfile bs=512K count=1000
console:/ # dd if=/dev/zero of=/memtest/testfile bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (500 M) copied, 0.782312 s, 639 M/s
console:/ # dd if=/dev/zero of=/memtest/testfile bs=500M count=1
1+0 records in
1+0 records out
524288000 bytes (500 M) copied, 1.272919 s, 393 M/s
console:/ # dd if=/dev/zero of=/memtest/testfile bs=512K count=1000
1000+0 records in
1000+0 records out
524288000 bytes (500 M) copied, 0.794319 s, 629 M/s
内存读测试
dd if=/memtest/testfile of=/dev/null bs=1M count=500
dd if=/memtest/testfile of=/dev/null bs=500M count=1
dd if=/memtest/testfile of=/dev/null bs=512K count=1000
console:/ # dd if=/memtest/testfile of=/dev/null bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (500 M) copied, 0.340277 s, 1.4 G/s
console:/ # dd if=/memtest/testfile of=/dev/null bs=500M count=1 <
1+0 records in
1+0 records out
524288000 bytes (500 M) copied, 0.682501 s, 733 M/s
console:/ # dd if=/memtest/testfile of=/dev/null bs=512K count=1000 <
1000+0 records in
1000+0 records out
524288000 bytes (500 M) copied, 0.226277 s, 2.1 G/s
Steam benchmark(推荐)
source/stream_benchmark at main · wesley666/source
Adb push到data/local/tmp目录,赋予执行权限
console:/data/local/tmp # ./stream_benchmark
-------------------------------------------------------------
STREAM version $Revision: 5.10 $
-------------------------------------------------------------
This system uses 8 bytes per array element.
-------------------------------------------------------------
Array size = 10000000 (elements), Offset = 0 (elements)
Memory per array = 76.3 MiB (= 0.1 GiB).
Total memory required = 228.9 MiB (= 0.2 GiB).
Each kernel will be executed 10 times.The *best* time for each kernel (excluding the first iteration)will be used to compute the reported bandwidth.
-------------------------------------------------------------
Your clock granularity/precision appears to be 1 microseconds.
Each test below will take on the order of 21376 microseconds.(= 21376 clock ticks)
Increase the size of the arrays if this shows that
you are not getting at least 20 clock ticks per test.
-------------------------------------------------------------
WARNING -- The above is only a rough guideline.
For best results, please be sure you know the
precision of your system timer.
-------------------------------------------------------------
Function Best Rate MB/s Avg time Min time Max time
Copy: 10748.4 0.015937 0.014886 0.017156
Scale: 8149.9 0.020030 0.019632 0.020463
Add: 9070.6 0.027085 0.026459 0.028024
Triad: 8255.9 0.029891 0.029070 0.030490
-------------------------------------------------------------
Solution Validates: avg error less than 1.000000e-13 on all three arrays
-------------------------------------------------------------
Copy操作最为简单,它先访问一个内存单元读出其中的值,再将值写入到另一个内存单元。
Scale操作先从内存单元读出其中的值,作一个乘法运算,再将结果写入到另一个内存单元。
Add操作先从内存单元读出两个值,做加法运算, 再将结果写入到另一个内存单元。
Triad的中文含义是将三个组合起来,在本测试中表示的意思是将Copy、Scale、Add三种操作组合起来进行测试。具体操作方式是:先从内存单元中中读两个值a、b,对其进行乘加混合运算(a + 因子 * b ) ,将运算结果写入到另一个内存单元。