[ext4]空间管理 - 分配机制



 Ext4系统中,存在很多分配策略,比如预分配、多块分配、延迟分配等

 

Prealloc预分配

ext4系统中,对于小文件和大文件的空间申请请求,都有不同的分配策略。对用小文件的空间请求,ext4尝试从一种叫per-CPU local group中分配空间。Per-CPU Local group就是有所有该CPU所执行的分配行为共享的空间,目的是保证这些小文件的聚集在一起,便于访问。对于大文件的空间请求,ext4尝试从一种叫per-inode preallocation中分配。这点就像Ext3系统的保留空间一样,Ext4为每个文件在内存中维护一段预分配空间,用于解决并发分配情况下的碎片问题。。

 

多块分配

Ext3中,将新的数据写入磁盘的哪些空闲块是由块分配器来控制的。但是Ext3的块分配器存在一定缺陷,那就是它一次只能够分配一个数据块(4KB),这就意味着,如果系统需要向磁盘中写入100MB的数据,那么需要调用块分配器25600次,而且由于块分配器无法获知总的分配块数,所以也无法对分配空间和分配位置进行优化。

Ext4中,使用了多块分配器,即一次调用可以分配多个数据块,这种机制提高了系统的性能,而且使得分配器有了充足的优化空间。

延迟分配

延迟分配(Delayed allocation)是一项仅仅少数现代文件系统才具有的优秀特性,比如XFSZFSbtrfs(betterFS)以及Reiser4。它能够尽可能的积累更多的数据块再分配出去,相对比,传统的文件系统则会尽快的将数据块分配出去,如Ext3reiser3等。

这项特性会和Extents特性以及多块分配特性相结合,使得磁盘IO性能得到显著提高。

持久预分配(Persistent preallocation

P2P软件为了保证下载文件有足够的空间存放,常常会预先创建一个与所下载文件大小相同的空文件,以免未来的数小时或数天之内磁盘空间不足导致下载失败。 Ext4在文件系统层面实现了持久预分配并提供相应的 APIlibc中的 posix_fallocate()),比应用软件自己实现更有效率。


作者:Younger Liu,

本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。



 

posted on 2014-04-01 22:34  YoungerChina  阅读(1756)  评论(0编辑  收藏  举报

导航