linux文件系统分配策略
背景
如果fdatasync涉及到meta-data的写(例如改变了文件大小),一样需要等data先落盘,再写meta-data。
这里如果data sync很慢,那就会影响其他人写metadata,例如创建新文件的操作。
writeback除外,因为它不保证data比metadata先落盘。
有效降低metadata等待刷data的文件操作顺序如下:
文件预分配大小,write,fdatasync,fsync。
原文
http://www.vip-tarena.com/qianrushipeixun/537.html#6d
块分配( block allocation ) 和 扩展分配 ( extent allocation )
块分配:磁盘上的文件块根据需要分配给文件,避免了存储空间的浪费。但当文件扩充时,会造成文件中文件块的不连续,从而导致过多的磁盘寻道时间。
每一次文件扩展时,块分配算法就需要写入文件块的结构信息,也就是 meta-dada 。meta-data总是与文件一起写入存储设备,改变文件的操作要等到所有meta-data的操作都完成后才能进行,
因此,meta-data的操作会明显降低整个文件系统的性能。
扩展分配: 文件创建时,一次性分配一连串连续的块,当文件扩展时,也一次分配很多块。meta-data在文件创建时写入,当文件大小没有超过所有已分配文件块大小时,就不用写入meta-data,直到需要再分配文件块的时候。
扩展分配采用成组分配块的方式,减少了SCSI设备写数据的时间,在读取顺序文件时具有良好的性能,但随机读取文件时,就和块分配类似了。
文件块的组或块簇 ( block cluster) 的大小是在编译时确定的。簇的大小对文件系统的性能有很大的影响。
meta-data 元信息是指和文件有关的信息,比如权限、所有者以及创建、访问或更改时间等。