mirror of
https://github.com/Zygo/bees.git
synced 2025-07-01 00:02:27 +02:00
scan_one_extent: eliminate nuisance dedupes, drop caches after reading data
A laundry list of problems fixed: * Track which physical blocks have been read recently without making any changes, and don't read them again. * Separate dedupe, split, and hole-punching operations into distinct planning and execution phases. * Keep the longest dedupe from overlapping dedupe matches, and flatten them into non-overlapping operations. * Don't scan extents that have blocks already in the hash table. We can't (yet) touch such an extent without making unreachable space. Let them go. * Give better information in the scan summary visualization: show dedupe range start and end points (<ddd>), matching blocks (=), copy blocks (+), zero blocks (0), inserted blocks (.), unresolved match blocks (M), should-have-been-inserted-but-for-some-reason-wasn't blocks (i), and there's-a-bug-we-didn't-do-this-one blocks (#). * Drop cached data from extents that have been inserted into the hash table without modification. * Rewrite the hole punching for uncompressed extents, which apparently hasn't worked properly since the beginning. Nuisance dedupe elimination: * Don't do more than 100 dedupe, copy, or hole-punch operations per extent ref. * Don't split an extent or punch a hole unless dedupe would save at least half of the extent ref's size. * Write a "skip:" summary showing the planned work when nuisance dedupe elimination decides to skip an extent. Signed-off-by: Zygo Blaxell <bees@furryterror.org>
This commit is contained in:
@ -749,7 +749,7 @@ class BeesContext : public enable_shared_from_this<BeesContext> {
|
||||
|
||||
BeesResolveAddrResult resolve_addr_uncached(BeesAddress addr);
|
||||
|
||||
BeesFileRange scan_one_extent(const BeesFileRange &bfr, const Extent &e);
|
||||
void scan_one_extent(const BeesFileRange &bfr, const Extent &e);
|
||||
void rewrite_file_range(const BeesFileRange &bfr);
|
||||
|
||||
public:
|
||||
@ -842,7 +842,7 @@ public:
|
||||
BeesFileRange find_one_match(BeesHash hash);
|
||||
|
||||
void replace_src(const BeesFileRange &src_bfr);
|
||||
BeesFileRange replace_dst(const BeesFileRange &dst_bfr);
|
||||
BeesRangePair replace_dst(const BeesFileRange &dst_bfr);
|
||||
|
||||
bool found_addr() const { return m_found_addr; }
|
||||
bool found_data() const { return m_found_data; }
|
||||
|
Reference in New Issue
Block a user