Details
-
Improvement
-
Resolution: Unresolved
-
Minor
-
None
-
None
-
9223372036854775807
Description
In order to more efficiently test mballoc performance in the face of full and fragmented filesystems, it would be useful to be able to efficiently fill a newly-formatted filesystem with a realistic block and inode allocation pattern, without having to write a large amount of data, or create millions of files. This should be done using an actual allocation pattern quickly, rather than just using a synthetic ratio of free blocks.
It should be possible to take the output from "dumpe2fs <dev>" as the input to "debugfs --import-bitmaps <input_file>" to have it set the block and inode bitmaps in the new target filesystem that are set in the source filesystem. This process shouldn't clear any bits in the bitmap, to avoid corrupting existing files and directories by double-allocating the blocks and inodes during testing. The kernel would skip those blocks and inodes for allocation until e2fsck is run on the filesystem. This would normally be used only for test filesystems.
For source filesystems smaller than the target filesystem, it can repeat the allocation pattern for the block groups as needed until all of the groups in the target filesystem has been "filled".
Rather than setting each bit in the bitmap separately, which would be billions of operations for a large filesystem, the code should use the free bitmap ranges provided by debugfs to set contiguous ranges of bits in the bitmap.