日期:2014-05-16  浏览次数:20757 次

mmap()在内存小时的性能
本人做流媒体开发的,工作中需要将mpg文件转化成一定格式发送到网络,由于文件太大,程序用mmap()来实现文件的读取,但在实测过程中发现一个大问题,如下:

服务器配置:
CPU:两颗至强3.0
内存:2G
磁盘:3个SATA硬盘组成磁盘阵列

测试时同时运行30个播放程序读取30个不同的mpg文件,程序起初运行画面播放非常流畅,几分钟过后,内存剩下15MB左右时,mmap()就开始不停的进行页面置换,将新的数据读入内存,老的数据置换出去,这时的磁盘利用率不到1%,但CPU耗在iowait上的时间却有90%多

各位大侠我该怎么办,如果不用内存映射还有没有其他的办法处理大文件???

------解决方案--------------------
开个4G的swap分区挂上去试试看
或者,把文件分段mmap(),如100M的文件做10次mmap(),并且要求在播放1段完前做好下段准备工作
------解决方案--------------------
你挂mmap不释放怎么行.
你mmap一个大文件, 要在这个大文件播放完后才能释放.
要把大文件分小
------解决方案--------------------
你可以分段映射试试看,比如一次映射2M,并跟踪程序在这个映射内的使用情况,如果这此映射的数据快用完时,就提前映射下一段.在上一段用完后,就释放掉其映射.
------解决方案--------------------
最好下2.6.23以下的内核,因为2.6.23把进程调度全改了,我觉得会有很多bug
------解决方案--------------------
是不是DMA没打开??