当前位置: 技术问答>linux和unix
求助:Linux下写文件的导致其他进程的IO延迟
来源: 互联网 发布时间:2016-04-19
本文导语: 现在有一个程序,运行在SUSE 9 Linux上,程序启动两分钟后会写文件,文件个数在(60~160)个之间,文件总大小(2.1G~7.9G)之间。硬盘是40G的,内存2G,四核CPU。 写文件的过程大致是: 1、循环打开所有...
现在有一个程序,运行在SUSE 9 Linux上,程序启动两分钟后会写文件,文件个数在(60~160)个之间,文件总大小(2.1G~7.9G)之间。硬盘是40G的,内存2G,四核CPU。
写文件的过程大致是:
1、循环打开所有的文件;
2、写文件
for (循环写文件N次 (N 在6~2000之间))
{
2.1) 读输入文件file_i
2.2) 对读入的文件做处理,转换数据
2.3) 写文件
for (循环写每个一文件)
{
每次写文件数据量不确定,最大数据量可能是64M,最小的可能不到1K,但是一般情况下都是几十K。
}
}
3、关闭所有的文件;
问题是:这个期间,系统上运行的其他进程可能会处理缓慢或者存在延迟,我就试验过,程序运行是,在写文件的目录下执行ls命令,有的时候延迟达8秒。如果其他进程存在读写文件,程序可能会延迟很久,目前已经发现过另外一个应用进程的读文件操作延迟了3分钟。
请各位高人给帮忙分析一下,给些建议,谢谢大家!
写文件的过程大致是:
1、循环打开所有的文件;
2、写文件
for (循环写文件N次 (N 在6~2000之间))
{
2.1) 读输入文件file_i
2.2) 对读入的文件做处理,转换数据
2.3) 写文件
for (循环写每个一文件)
{
每次写文件数据量不确定,最大数据量可能是64M,最小的可能不到1K,但是一般情况下都是几十K。
}
}
3、关闭所有的文件;
问题是:这个期间,系统上运行的其他进程可能会处理缓慢或者存在延迟,我就试验过,程序运行是,在写文件的目录下执行ls命令,有的时候延迟达8秒。如果其他进程存在读写文件,程序可能会延迟很久,目前已经发现过另外一个应用进程的读文件操作延迟了3分钟。
请各位高人给帮忙分析一下,给些建议,谢谢大家!
|
fwrite这是写入到标准IO管理的缓冲区,fflush是把用户缓冲区的数据写入到内核buffer cache,fsync后才是真正写入到磁盘
你现在的问题不是IO效率低,而是没有很好的控制进程IO的资源利用率
解决方法:看机器磁盘IO的写入能力,这是个固定数据,直接看硬件参数,你写入数据的速率要小于该值,留出一定的带宽,每秒写入一个固定大小的数据块就休眠可以控制速率。或写入一块数据后,调用fsync使对应文件的数据由buffer cache写入到磁盘,此时buffer cache留出的空间也能够给其它进程有机会执行磁盘写入.
你现在的问题不是IO效率低,而是没有很好的控制进程IO的资源利用率
解决方法:看机器磁盘IO的写入能力,这是个固定数据,直接看硬件参数,你写入数据的速率要小于该值,留出一定的带宽,每秒写入一个固定大小的数据块就休眠可以控制速率。或写入一块数据后,调用fsync使对应文件的数据由buffer cache写入到磁盘,此时buffer cache留出的空间也能够给其它进程有机会执行磁盘写入.