scripts: dbgbmap[d3].py: Moved rbyd/bptr checks behind --no-ckmeta/ckdata
Checking every data block for errors really slows down dbgbmap.py, which is unfortunate for realtime rendering. To be fair, the real issue is our naive crc32c impl, but the mindset of these scripts is if you want speed you really shouldn't be using Python and should rewrite the script in Rust/C/something (see prettyasserts for example). You _could_ speed things up with a table-based crc32c, but at that point you should probably just find C-bindings for crc32c (maybe optional like inotify?... actually that's not a bad idea...). At least --no-ckmeta/--no-ckdata allow for the previous behavior of not checking for relevant errors for a bit of speed. --- Note that --no-ckmeta currently doesn't really do anything. I toyed with adding a non-fetching Rbyd.fetchtrunk method, but this seems out of scope for these scripts.
This commit is contained in:
+21
-2
@@ -4249,6 +4249,8 @@ def main_(f, disk, mroots=None, *,
|
||||
block_size=None,
|
||||
block_count=None,
|
||||
blocks=None,
|
||||
no_ckmeta=False,
|
||||
no_ckdata=False,
|
||||
mtree_only=False,
|
||||
chars=[],
|
||||
colors=[],
|
||||
@@ -4427,8 +4429,17 @@ def main_(f, disk, mroots=None, *,
|
||||
range(block_size))
|
||||
corrupted = True
|
||||
|
||||
# corrupt block?
|
||||
elif not child:
|
||||
# corrupt metadata?
|
||||
elif (not no_ckmeta
|
||||
and isinstance(child, (Mdir, Rbyd))
|
||||
and not child):
|
||||
bmap[b] = BmapBlock(b, 'corrupt', child, range(block_size))
|
||||
corrupted = True
|
||||
|
||||
# corrupt data?
|
||||
elif (not no_ckdata
|
||||
and isinstance(child, Bptr)
|
||||
and not child):
|
||||
bmap[b] = BmapBlock(b, 'corrupt', child, range(block_size))
|
||||
corrupted = True
|
||||
|
||||
@@ -4778,6 +4789,14 @@ if __name__ == "__main__":
|
||||
if ',' in x
|
||||
else int(x, 0)),
|
||||
help="Show a specific block, may be a range.")
|
||||
parser.add_argument(
|
||||
'--no-ckmeta',
|
||||
action='store_true',
|
||||
help="Don't check metadata blocks for errors.")
|
||||
parser.add_argument(
|
||||
'--no-ckdata',
|
||||
action='store_true',
|
||||
help="Don't check metadata + data blocks for errors.")
|
||||
parser.add_argument(
|
||||
'--mtree-only',
|
||||
action='store_true',
|
||||
|
||||
+21
-2
@@ -4578,6 +4578,8 @@ def main(disk, output, mroots=None, *,
|
||||
block_size=None,
|
||||
block_count=None,
|
||||
blocks=None,
|
||||
no_ckmeta=False,
|
||||
no_ckdata=False,
|
||||
mtree_only=False,
|
||||
quiet=False,
|
||||
labels=[],
|
||||
@@ -4754,8 +4756,17 @@ def main(disk, output, mroots=None, *,
|
||||
range(block_size))
|
||||
corrupted = True
|
||||
|
||||
# corrupt block?
|
||||
elif not child:
|
||||
# corrupt metadata?
|
||||
elif (not no_ckmeta
|
||||
and isinstance(child, (Mdir, Rbyd))
|
||||
and not child):
|
||||
bmap[b] = BmapBlock(b, 'corrupt', child, range(block_size))
|
||||
corrupted = True
|
||||
|
||||
# corrupt data?
|
||||
elif (not no_ckdata
|
||||
and isinstance(child, Bptr)
|
||||
and not child):
|
||||
bmap[b] = BmapBlock(b, 'corrupt', child, range(block_size))
|
||||
corrupted = True
|
||||
|
||||
@@ -5727,6 +5738,14 @@ if __name__ == "__main__":
|
||||
if ',' in x
|
||||
else int(x, 0)),
|
||||
help="Show a specific block, may be a range.")
|
||||
parser.add_argument(
|
||||
'--no-ckmeta',
|
||||
action='store_true',
|
||||
help="Don't check metadata blocks for errors.")
|
||||
parser.add_argument(
|
||||
'--no-ckdata',
|
||||
action='store_true',
|
||||
help="Don't check metadata + data blocks for errors.")
|
||||
parser.add_argument(
|
||||
'--mtree-only',
|
||||
action='store_true',
|
||||
|
||||
Reference in New Issue
Block a user