当前位置: 技术问答>linux和unix
mmap()在内存小时的性能
来源: 互联网 发布时间:2016-02-08
本文导语: 本人做流媒体开发的,工作中需要将mpg文件转化成一定格式发送到网络,由于文件太大,程序用mmap()来实现文件的读取,但在实测过程中发现一个大问题,如下: 服务器配置: CPU:两颗至强3.0 内存:2G 磁盘:3个SATA...
本人做流媒体开发的,工作中需要将mpg文件转化成一定格式发送到网络,由于文件太大,程序用mmap()来实现文件的读取,但在实测过程中发现一个大问题,如下:
服务器配置:
CPU:两颗至强3.0
内存:2G
磁盘:3个SATA硬盘组成磁盘阵列
测试时同时运行30个播放程序读取30个不同的mpg文件,程序起初运行画面播放非常流畅,几分钟过后,内存剩下15MB左右时,mmap()就开始不停的进行页面置换,将新的数据读入内存,老的数据置换出去,这时的磁盘利用率不到1%,但CPU耗在iowait上的时间却有90%多
各位大侠我该怎么办,如果不用内存映射还有没有其他的办法处理大文件???
服务器配置:
CPU:两颗至强3.0
内存:2G
磁盘:3个SATA硬盘组成磁盘阵列
测试时同时运行30个播放程序读取30个不同的mpg文件,程序起初运行画面播放非常流畅,几分钟过后,内存剩下15MB左右时,mmap()就开始不停的进行页面置换,将新的数据读入内存,老的数据置换出去,这时的磁盘利用率不到1%,但CPU耗在iowait上的时间却有90%多
各位大侠我该怎么办,如果不用内存映射还有没有其他的办法处理大文件???
|
开个4G的swap分区挂上去试试看
或者,把文件分段mmap(),如100M的文件做10次mmap(),并且要求在播放1段完前做好下段准备工作
或者,把文件分段mmap(),如100M的文件做10次mmap(),并且要求在播放1段完前做好下段准备工作
|
你可以分段映射试试看,比如一次映射2M,并跟踪程序在这个映射内的使用情况,如果这此映射的数据快用完时,就提前映射下一段.在上一段用完后,就释放掉其映射.
|
是不是DMA没打开??
|
你挂mmap不释放怎么行.
你mmap一个大文件, 要在这个大文件播放完后才能释放.
要把大文件分小
你mmap一个大文件, 要在这个大文件播放完后才能释放.
要把大文件分小
|
最好下2.6.23以下的内核,因为2.6.23把进程调度全改了,我觉得会有很多bug