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所需要的功能,所以代码上没有那么完备和整洁。
相关文章
- 美剧《黑名单》 - 09 28, 2007
- 时间 - 09 02, 2007
- 编写blowfish的PHP module (续) - 09 01, 2007
留言: