[Ocfs2-devel] what is global bitmap, block group, suballocator, etc

Tao Ma tao.ma at oracle.com
Tue Nov 24 23:59:46 PST 2009


Hi Coly,

Coly Li wrote:
> Hi list,
> 
> There are some ocfs2 terminologies that I don't understand very well. After checking the ocfs2 wiki and kernel/tools
> code, I am still not sure whether I understand them correctly.
> 
> - Global bitmap
>   What's the usage of global bitmap? Which kind of resource allocation will set global bitmap?
global bitmap is a system file which indicates the usage of clusters in 
  the whole volume. It is a chain file. So it has a ocfs2_chain_list in 
its ocfs2_dinode.id2. And the chain_list is a chain of many groups. A 
group is a range of clusters and the 1st block of a group has a bitmap 
to indicate which cluster(or block, cpg is used here) is allocated or not.
> 
> - Cluster group
>   It seems cluster group is similar to block group of ext3/4. Does each node of the cluster has its own data/metadata
> bitmap inode in every cluster group ?
See group above.
> 
> - Block group
>   From Tiger's slide, I don't find block group. But from fs/ocfs2 code, I see block group. Is it same to cluster group ?
you mean ocfs2_block_group_alloc? Actually we allocates clusters from 
the allocators(see ocfs2_claim_clusters) and then call 
ocfs2_block_group_fill to fill it into different system 
file(inode_alloc, extent_alloc).
> 
> - Suballocator & Suballocator slot
>   I don't find related document explains what is suballocator and how it works. I am checking the code now, but not
> clear to me yet.
suballocator is used so that when a node try to get some resource, it 
will try its own suballocator first. If it can't get the resource it 
wants, we have to lock the global_bitmap(there are some cases we can try 
local_alloc first and if it fails, then try global_bitmap) and ask from 
that(it will need a global lock which needs more time). We we the 
suballocator grows, it will request a large hunk from the global bitmap 
so that the next attempt can success in suballocator. There are 
inode_alloc for inode, extent_alloc for extent, and local_alloc(it can 
be used by extent_alloc allocation or cluster allocation).

Regards,
Tao



More information about the Ocfs2-devel mailing list