内存性能测试方法

写于 2022 年 6 月 24 日

dd方法测试cat proc/meminfo

12345678910111213141516171819202122232425262728293031323334353637383940console:/ # cat proc/meminfo MemTotal: 3858576 kBMemFree: 675328 kBMemAvailable: 1142452 kBBuffers: 65280 kBCached: 992252 kBSwapCached: 40 kBActive: 1144480 kBInactive: 923220 kBActive(anon): 875244 kBInactive(anon): 667400 kBActive(file): 269236 kBInactive(file): 255820 kBUnevictable: 4436 kBMlocked: 4436 kBSwapTotal: 614396 kBSwapFree: 601596 kBDirty: 4 kBWriteback: 0 kBAnonPages: 1014744 kBMapped: 301460 kBShmem: 530712 kBKReclaimable: 39912 kBSlab: 142104 kBSReclaimable: 39912 kBSUnreclaim: 102192 kBKernelStack: 33088 kBShadowCallStack: 2078 kBPageTables: 39964 kBNFS_Unstable: 0 kBBounce: 0 kBWritebackTmp: 0 kBCommitLimit: 2263732 kBCommitted_AS: 47064316 kBVmallocTotal: 262930368 kBVmallocUsed: 56632 kBVmallocChunk: 0 kBPercpu: 2768 kBCmaTotal: 1921024 kBCmaFree: 158092 kB

剩1.1G左右,所以,我们创建一个挂载在内存上面的分区,大小为可用内存的一半左右。

123mount -o rw,remount /mkdir memtestmount -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

123456789101112console:/ # dd if=/dev/zero of=/memtest/testfile bs=1M count=500500+0 records in500+0 records out524288000 bytes (500 M) copied, 0.782312 s, 639 M/sconsole:/ # dd if=/dev/zero of=/memtest/testfile bs=500M count=11+0 records in1+0 records out524288000 bytes (500 M) copied, 1.272919 s, 393 M/sconsole:/ # dd if=/dev/zero of=/memtest/testfile bs=512K count=10001000+0 records in1000+0 records out524288000 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

123456789101112console:/ # dd if=/memtest/testfile of=/dev/null bs=1M count=500 500+0 records in500+0 records out524288000 bytes (500 M) copied, 0.340277 s, 1.4 G/sconsole:/ # dd if=/memtest/testfile of=/dev/null bs=500M count=1 <1+0 records in1+0 records out524288000 bytes (500 M) copied, 0.682501 s, 733 M/sconsole:/ # dd if=/memtest/testfile of=/dev/null bs=512K count=1000 <1000+0 records in1000+0 records out524288000 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目录,赋予执行权限

12345678910111213141516171819202122232425262728293031console:/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 thatyou 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 theprecision of your system timer.-------------------------------------------------------------Function Best Rate MB/s Avg time Min time Max timeCopy: 10748.4 0.015937 0.014886 0.017156Scale: 8149.9 0.020030 0.019632 0.020463Add: 9070.6 0.027085 0.026459 0.028024Triad: 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 ) ,将运算结果写入到另一个内存单元。

2026-02-17 02:17:44