From 0f4cded8cec21924037e39fd1b6fde30ba6f353b Mon Sep 17 00:00:00 2001 From: Seonpyo Kim Date: Thu, 30 May 2019 18:12:16 +0900 Subject: [PATCH] Make the sync module release memory aggressively Shrink HashMaps and Vectors of downloaders and Verification queue to reduce the memory usage when syncing. --- core/src/verification/queue/mod.rs | 2 ++ sync/src/block/downloader/body.rs | 7 +++++++ sync/src/block/downloader/header.rs | 2 ++ 3 files changed, 11 insertions(+) diff --git a/core/src/verification/queue/mod.rs b/core/src/verification/queue/mod.rs index b089a4c3be..2521d41820 100644 --- a/core/src/verification/queue/mod.rs +++ b/core/src/verification/queue/mod.rs @@ -408,6 +408,7 @@ impl VerificationQueue { *td -= score; } } + processing.shrink_to_fit(); processing.is_empty() } @@ -444,6 +445,7 @@ impl VerificationQueue { new_verified.push_back(output); } } + processing.shrink_to_fit(); self.verification.sizes.verified.fetch_sub(removed_size, AtomicOrdering::SeqCst); *verified = new_verified; diff --git a/sync/src/block/downloader/body.rs b/sync/src/block/downloader/body.rs index af3fd86581..e9c1885f76 100644 --- a/sync/src/block/downloader/body.rs +++ b/sync/src/block/downloader/body.rs @@ -69,6 +69,7 @@ impl BodyDownloader { self.downloaded.insert(hash, body); } } + self.downloading.shrink_to_fit(); } pub fn add_target(&mut self, header: &Header, parent: &Header) { @@ -93,6 +94,9 @@ impl BodyDownloader { self.downloading.remove(hash); self.downloaded.remove(hash); } + self.targets.shrink_to_fit(); + self.downloading.shrink_to_fit(); + self.downloaded.shrink_to_fit(); } pub fn reset_downloading(&mut self, hashes: &[H256]) { @@ -100,6 +104,7 @@ impl BodyDownloader { for hash in hashes { self.downloading.remove(&hash); } + self.downloading.shrink_to_fit(); } pub fn drain(&mut self) -> Vec<(H256, Vec)> { @@ -111,7 +116,9 @@ impl BodyDownloader { break } } + self.downloaded.shrink_to_fit(); self.targets.drain(0..result.len()); + self.targets.shrink_to_fit(); result } } diff --git a/sync/src/block/downloader/header.rs b/sync/src/block/downloader/header.rs index 76f88a02f0..dc6d653572 100644 --- a/sync/src/block/downloader/header.rs +++ b/sync/src/block/downloader/header.rs @@ -187,6 +187,7 @@ impl HeaderDownloader { } } } + self.queued.shrink_to_fit(); } pub fn mark_as_queued(&mut self, hashes: Vec) { @@ -195,5 +196,6 @@ impl HeaderDownloader { self.queued.insert(hash, header); } } + self.downloaded.shrink_to_fit(); } }