fsck.gfs2: memory reduction patches
Get series with b4
b4 am [email protected]Versions newest first
- v2 Latest1 of 40 patches 0 repliesNew
1 of 40 patches is in this archive. The cover letter announces 40.
Patches in v2 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 12/40 | fsck.gfs2: Separate out functions that may only be done after pass1 | +0 | 1 reply |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.
Cover letter [Cluster-devel] [fsck.gfs2 v2 PATCH 00/40] fsck.gfs2: memory reduction patches
Hi Bob,
Quoted 25 lines · Bob Peterson
On 15 April, I posted a set of 30 patches for fsck.gfs2 to reduce its memory requirements. Since that time, I've been testing and fixing problems. Here is version 2.
---
Right now, fsck.gfs2 is a memory hog with regard to very large file systems. A file system of 250TB would require an absurd about of memory. That's because it uses memory for (1) rgrp bitmaps, (2) its own internal blockmap, (3) a directory tree, and (4) a tree of ALL inodes in the file system, for reconciling link counts.This series of 40 patches is designed to reduce the memory footprint of fsck.gfs2. It does so by almost entirely eliminating the inode tree in favor of two much smaller bitmaps. In order to do that, I rearranged the order in which things are done.
In order to save on memory, some things will be slower, so this will cause a performance hit to fsck.gfs2. However, I'm confident that we can fix them and make it fast again. The slowness is caused because most bitmap manipulation is now done on the bitmaps in the resource groups, which means the code needs to search out the rgrp for these operations. This can be optimized to pass in the rgrp, since it will be known in most cases (for example, pass1 operates on one rgrp at a time, and chances are quite good that the rgrp needed will be that one.) These further optimizations will be done in later patches.
Quoted 2 lines
I'm still testing these changes against my collection of gfs2 and gfs1 metadata, but the results are good so far. So there may be changes.
I've read through the patches and the code looks good to me. It's difficult to comment on the design of the solution but nothing scary jumped out at me, and the test results look promising. There's some really good refactoring work in this set too.
Quoted 30 lines
Signed-off-by Bob Peterson <[email protected]>---
Bob Peterson (40):
fsck.gfs2: Move pass5 to immediately follow pass1 fsck.gfs2: Convertblock_typetobitmap_typeafter pass1 and 5 fsck.gfs2: Changebitmap_typevariables to int
fsck.gfs2: Usedi_entriesto determine if lost+found was created fsck.gfs2: pass1b shouldn't complain about non-bitmap blocks fsck.gfs2: Change allfsck_blockmap_settofsck_bitmap_setfsck.gfs2: Moveset_ip_blockmapto pass1
fsck.gfs2: Remove unneeded parameter instree fromset_ip_blockmapfsck.gfs2: Move leaf repair to pass2
fsck.gfs2: Eliminate astate code
fsck.gfs2: Move reprocess code to pass1
fsck.gfs2: Separate out functions that may only be done after pass1 fsck.gfs2: Divestcheck_metatreefromfsck_blockmap_setfsck.gfs2: eliminatefsck_blockmap_setfromcheck_eattr_entriesfsck.gfs2: Move blockmap stuff topass1.c
fsck: make pass1 call bitmap reconciliation AKA pass5 fsck.gfs2: make blockmap global variable only to pass1 fsck.gfs2: Add wrapper functionpass1_check_metatreefsck.gfs2: passcounted_linksintofix_link_countin pass4 fsck.gfs2: refactor pass4 functionscan_inode_listfsck.gfs2: More refactoring of pass4 functionscan_inode_listfsck.gfs2: Fix white space problems
fsck.gfs2: move link count info for directories to directory tree fsck.gfs2: Use bitmaps instead of linked list for inodes w/nlink == 1 fsck.gfs2: Refactorcheck_n_fix_bitmapto make it more readable fsck.gfs2: adjust rgrp inode count when fixing bitmap fsck.gfs2: blocks cannot be UNLINKED in pass1b or after that
Quoted 8 lines
fsck.gfs2: Add error checks to
get_next_leaffsck.gfs2: re-add a non-allocatingrepair_leafto pass1
libgfs2: Allocate new GFS1 metadata as type 3, not type 1 fsck.gfs2: Undo partially done metadata records fsck.gfs2: Eliminate redundant code in_fsck_bitmap_setfsck.gfs2: Fix inode counting bug
fsck.gfs2: Adjust bitmap for lost+found after adding to dirtree
GFS2: Add initialization checks for GFS1 used metadata
s/GFS2/fsck.gfs2/ :)
Thanks,
Andy
Quoted 31 lines
fsck.gfs2: Use BLKST constants to make pass5 more clear fsck.gfs2: Fix GFS1 "used meta" accounting bug fsck.gfs2: pass1b is too noisy wrt gfs1 non-dinode metadata fsck.gfs2: Fix rgrp dinode accounting bug fsck.gfs2: Fix rgrp accounting in
check_n_fix_bitmapgfs2/fsck/Makefile.am | 1 + gfs2/fsck/afterpass1_common.c | 319 ++++++++++++++++ gfs2/fsck/afterpass1_common.h | 31 ++ gfs2/fsck/fsck.h | 26 +- gfs2/fsck/initialize.c | 63 +++- gfs2/fsck/inode_hash.c | 3 +- gfs2/fsck/link.c | 139 ++++++- gfs2/fsck/link.h | 6 +- gfs2/fsck/lost_n_found.c | 17 +- gfs2/fsck/main.c | 38 +- gfs2/fsck/metawalk.c | 847 ++++++++---------------------------------- gfs2/fsck/metawalk.h | 59 +-- gfs2/fsck/pass1.c | 479 ++++++++++++++++++++++-- gfs2/fsck/pass1b.c | 148 +++++--- gfs2/fsck/pass2.c | 276 ++++++++++---- gfs2/fsck/pass3.c | 52 +-- gfs2/fsck/pass4.c | 339 ++++++++++------- gfs2/fsck/pass5.c | 60 +-- gfs2/fsck/util.c | 171 +++------ gfs2/fsck/util.h | 70 ++-- gfs2/libgfs2/fs_ops.c | 33 +- 21 files changed, 1849 insertions(+), 1328 deletions(-)create mode 100644
gfs2/fsck/afterpass1_common.ccreate mode 100644gfs2/fsck/afterpass1_common.h