目录
- 1. 问题概述
- 2. stress 内存压力原理
- 2. cache 因素2.1 未加压2.2 加压(cpu/io)
- 3. 内存管理因素3.1 内存分配/释放3.2 MMU拥塞4 总结
1. 问题概述
对ti am5728 xenomai系统latency测试时,在测试过程中发现,内存压力对latency影响极大,未添加内存压力下数据如下(注:文中所有测试使用默认gravity,对实时任务cpu已使用isolcpus=1隔离,另外文中的结论可能只对ARM平台有效):
stress -c 16 -i 4 -d 2 --hdd-bytes 256M
user-task ltaencykernel-task ltaencyTimerIRQ最小值0.621-0.795-1.623平均值3.0720.970-0.017最大值16.13312.9667.736
添加参数--vm 2 --vm-bytes 128M模拟内存压力。(创建2个进程模拟内存压力,不断重复:申请内存大小128MB,对申请的内存每隔4096字节处写入一个字符’Z‘,然后读取检查是否还是’Z‘,校查后释放,回到申请操作)
stress -c 16 -i 4 -d 2 --hdd-bytes 256M --vm 2 --vm-bytes 128M
添加内存压力后的latency,测试10分钟(因时间原因未测1小时),测试数据如下:
user-task ltaencykernel-task ltaencyTimeIRQ最小值0.915-1.276-1.132平均值3.4510.6370.530最大值30.91825.3038.240标准差0.6260.6680.345
可以看到,添加内存压力后,latency最大值是未加内存压力最大值的2倍。
2. stress 内存压力原理
stress工具对内存压力相关参数有:
-m, --vm N fork N个进程对内存malloc()/free()
--vm-bytes B 每个进程操作的内存大小为B bytes (默认 256MB)
--vm-stride B 每隔B字节访问一个字节 (默认4096)
--vm-hang N malloc睡眠N秒后free (默认不睡眠)
--vm-keep 仅分配一次内存,直到进程结束时释放
这参数可用来模拟不同的压力,--vm-bytes表示每次分配的内存大小。--vm-stride每隔B字节访问一个字节,主要模拟cache miss的情况。--vm-hang指