[LU-12051] ldiskfs directory shrink Created: 07/Mar/19 Updated: 23/Oct/23 |
|
| Status: | Open |
| Project: | Lustre |
| Component/s: | None |
| Affects Version/s: | Lustre 2.12.0 |
| Fix Version/s: | None |
| Type: | Improvement | Priority: | Minor |
| Reporter: | Andreas Dilger | Assignee: | WC Triage |
| Resolution: | Unresolved | Votes: | 0 |
| Labels: | ldiskfs | ||
| Issue Links: |
|
||||||||||||
| Rank (Obsolete): | 9223372036854775807 | ||||||||||||
| Description |
|
Shrinking directories in ldiskfs would be desirable for cases where a directory had a large number of files created, but the files are deleted and the directory is empty and could be deallocated. There is a patch submitted to upstream ext4 that is the start of the support for this functionality, but it is not very aggressive about removing directory blocks: https://patchwork.ozlabs.org/patch/1048658/ There is intended to be additional work in this area to improve the directory shrinking functionality. In addition to the directory shrinking, removal of old OST object directory trees (O/*/d*) is also useful, and could potentially be a substitute for having online directory shrink once the directories are completely empty. |
| Comments |
| Comment by Andreas Dilger [ 20/Mar/19 ] |
|
I suspect that there isn't a lot of work we need to do in this area, but some review and testing of the upstream patch linked in the description (with feedback directly to linux-ext4@kernel.vger.org and the author) would probably speed things up. After the code is landed upstream, or is at least showing good benefits and is robust, we could backport it to ldiskfs/kernel_patches for use until we catch up with a newer kernel. |
| Comment by Andreas Dilger [ 08/Apr/20 ] |
|
The upstream ext4 directory shrink patches have been refreshed:
The most complexity will be around integration of the "shrink directories on dentry delete" patches with the ext4-pdirop.patch patch, especially related to locking order as levels of the htree are removed. We will also need to disable the htree dx_root removal in make_unindexed() in the same way we do for ext4_update_dx_flag() because this would break htree locking and is of marginal benefit. At the point where all objects in a {SEQ}/d*/ directory tree have been removed on an OST, we can just delete the whole sequence directory tree rather than worry about the few remaining blocks for dx_root. These will mostly only shrink the directory when it is almost completely empty, but for
|