ext4 bigalloc 答疑

问题都来自 pamirs 的信,感谢他对bigalloc特性的关注。


问:文件分配的时候,ext4文件系统请求的时候是按照blocks来请求,但是ext4文件系统自己会按照cluster来分配(这个的理解是否正确呢?)

答:应该说,不太准确,事实上, ext4文件系统请求分配磁盘空间的时候也是按照cluster来请求的了,ext4_ext_map_blocks() 函数是用来检查文件的逻辑位置对应的物理块的,里面申请新磁盘空间的调用是:

        ar.len = EXT4_NUM_B2C(sbi, offset+allocated);
        ......
        newblock = ext4_mb_new_blocks(handle, &ar, &err);

ar.len的单位是cluster,所以实际上申请空间就是以cluster为单位


问:如果cluster为32K(8个blocks), 那么对于一个3k的文件来说,一次就分配了一个cluster,这样就有7个blocks不能在被其他文件使用了。group desc中的block_bitmap中将cluster对应的bit位置1,那么后续这个文件在增加的时候,是否按照增加的blocks数量,以及当前该文件占用的cluster,计算出已经占用的cluster中有多少blocks是空闲的,还可以继续分配呢?

答:是的,需要一些琐碎的计算,这些计算的代码都放在了函数get_implied_cluster_alloc()里


问:ext4_group_desc中的bg_free_blocks_count_lo字段表示当前group中有多少空闲的blocks,使用了bigalloc之后,该字段的意义并没有发生变化吧?好像没有看到有新增一个字段来表示free_clusters数量,这个是否不需要保存这样的变量?通过bitmap查询得知呢?

答:bg_free_blocks_count_lo的含义实际是空闲的cluster的数量,看这个函数
ext4_free_group_clusters_set被调用的地方就知道了。这个变量名比较误导,Ted在添加bigalloc特性的时候更多的想到的是完成google gfs所需要的功能,所以代码上没有那么完备和整洁。


相关文章

分类

留言:

关于文章

This page contains a single entry by DongHao published on 02 21, 2013 12:59 PM.

压测Cubieboard was the previous entry in this blog.

iothrottle测试报告 is the next entry in this blog.

Find recent content on the main index or look in the 存档 to find all content.