Filesystems track where data is stored in memory and where free or available space exists in memory. Bitmaps are one way to track this free space.
A bitmap is an array of bits in which each bit corresponds to a block of memory. A logical 1 or 0 indicates whether the block of memory is available for storage or full. Bitmaps generally require low overhead since each bit represents a relatively large block of memory, for example 1 bit for each 4K block size.
The size of the bitmap is easily managed for smaller filesystems but can become inefficient or unmanageable for much larger filesystems. For example, a 32 KB bitmap could be used for a 1 GB filesystem, or a 23 MB bitmap used for a 1 TB filesystem. These bitmaps are small and easily managed. For a much larger filesystem, such as a 1 PB filesystem, 32 GB bitmap would be needed. Managing and scanning a bitmap of this size is time consuming and costly.
Furthermore, traditional bitmaps do not perform well when directly applied to a symmetric clustered file system. Performance is degraded due to cross-server contention over the shared allocation data structures as the servers in the cluster concurrently allocate and free space from the file system. An extension to this approach is a dynamic partition scheme, where the cluster nodes agree to allocate from separate regions of the file system to avoid cross-server contention over the allocation data structures. This approach, however, degenerates as the file system becomes full. As the nodes concurrently search for the remaining free space on the file system, lock contention occurs which slows the performance of the file system.