2008年1月15日星期二

多线程写同一个目录导致磁盘碎片问题

多进程同时写导致磁盘碎片问题
     在建库程序中或用多个wget从远程服务器拷贝数据的时候,经常存在多个进程同时写多个文件
的情况,而这些文件恰好都在同一个目录中,这样导致的后果就是ext2文件系统交替给这几个文件分配
大小为8块的磁盘空间,这样所有的文件在磁盘上的分布就是由一个个8块的磁盘碎片组成,最终会导致
对文件进行读取操作的时候性能下降。

    其实这个问题可以通过下面的方法来解决:
     1 将每次写文件的buff增大,如将要写的数据缓存到1M甚至更多才写到磁盘上去,这样就不用每次产生
    一点数据就立即写到磁盘上去,从而降低碎片的严重性。

     2 将文件分布在不同的目录中,因为不同的目录按照ext2算法是尽量分布在不同的块组中(每个块组大小为128M),
    在给文件分配的磁盘空间时,首先从该文件所在目录的块组中开始分配,从而避免了磁盘碎片的产生。

    当然避免磁盘碎片的最好方法还是尽量只用一个进程同时进行写操作,尤其是在网络带宽是瓶颈的wget操作中。



--
With regards

没有评论: