From 216e5acb6c32a18da1efa1b7e5f87ed0710426b9 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Fri, 4 Sep 2015 13:48:02 +0100 Subject: [PATCH] [thin_show_dups] remove variable number of mems per chunks. Too slow and not used. --- base/rolling_hash.cc | 2 +- thin-provisioning/cache_stream.cc | 4 ++-- thin-provisioning/chunk_stream.cc | 14 -------------- thin-provisioning/chunk_stream.h | 9 ++++++--- thin-provisioning/thin_show_duplicates.cc | 11 ++++------- thin-provisioning/variable_chunk_stream.cc | 18 +++++++++--------- 6 files changed, 22 insertions(+), 36 deletions(-) diff --git a/base/rolling_hash.cc b/base/rolling_hash.cc index c780a27..d2d273a 100644 --- a/base/rolling_hash.cc +++ b/base/rolling_hash.cc @@ -40,7 +40,7 @@ content_based_hash::content_based_hash(unsigned window_size) // FIXME: hard coded values backup_div_((window_size / 4) - 1), div_((window_size / 2) - 1), - min_len_(window_size / 8), + min_len_(window_size / 4), max_len_(window_size), len_(0) { diff --git a/thin-provisioning/cache_stream.cc b/thin-provisioning/cache_stream.cc index 8fbcc72..b21f435 100644 --- a/thin-provisioning/cache_stream.cc +++ b/thin-provisioning/cache_stream.cc @@ -93,8 +93,8 @@ cache_stream::chunk_wrapper::chunk_wrapper(cache_stream &parent) { c_.offset_ = parent.current_index_ * parent.block_size_; c_.len_ = parent.block_size_; - c_.mem_.push_back(mem(static_cast(block_.get_data()), - static_cast(block_.get_data()) + parent.block_size_)); + c_.mem_.begin = static_cast(block_.get_data()); + c_.mem_.end = c_.mem_.begin + parent.block_size_; } //---------------------------------------------------------------- diff --git a/thin-provisioning/chunk_stream.cc b/thin-provisioning/chunk_stream.cc index 4ac99ff..adc41d0 100644 --- a/thin-provisioning/chunk_stream.cc +++ b/thin-provisioning/chunk_stream.cc @@ -5,19 +5,5 @@ using namespace thin_provisioning; //---------------------------------------------------------------- -uint8_t -chunk::operator[](uint64_t n) const -{ - std::deque::const_iterator it; - for (it = mem_.begin(); it != mem_.end(); it++) { - uint64_t mem_len = it->end - it->begin; - if (n > mem_len) - n -= mem_len; - else - return it->begin[n]; - } - - throw runtime_error("chunk out of bounds"); -} //---------------------------------------------------------------- diff --git a/thin-provisioning/chunk_stream.h b/thin-provisioning/chunk_stream.h index 4e1ea96..0886c9f 100644 --- a/thin-provisioning/chunk_stream.h +++ b/thin-provisioning/chunk_stream.h @@ -28,6 +28,11 @@ namespace thin_provisioning { struct mem { + mem() + : begin(0), + end(0) { + } + mem(uint8_t *b, uint8_t *e) : begin(b), end(e) { @@ -38,9 +43,7 @@ namespace thin_provisioning { struct chunk { uint64_t offset_, len_; - std::deque mem_; - - uint8_t operator[](uint64_t n) const; + mem mem_; }; class chunk_stream { diff --git a/thin-provisioning/thin_show_duplicates.cc b/thin-provisioning/thin_show_duplicates.cc index 9fc96c2..5a75e26 100644 --- a/thin-provisioning/thin_show_duplicates.cc +++ b/thin-provisioning/thin_show_duplicates.cc @@ -142,8 +142,7 @@ namespace { else { digestor_.reset(); - for (deque::const_iterator it = c.mem_.begin(); it != c.mem_.end(); it++) - digestor_.process_bytes(it->begin, it->end - it->begin); + digestor_.process_bytes(c.mem_.begin, c.mem_.end - c.mem_.begin); unsigned int digest[5]; digestor_.get_digest(digest); @@ -167,11 +166,9 @@ namespace { private: bool all_zeroes(chunk const &c) const { - for (deque::const_iterator it = c.mem_.begin(); it != c.mem_.end(); it++) { - for (uint8_t *ptr = it->begin; ptr != it->end; ptr++) { - if (*ptr != 0) - return false; - } + for (uint8_t *ptr = c.mem_.begin; ptr != c.mem_.end; ptr++) { + if (*ptr != 0) + return false; } return true; diff --git a/thin-provisioning/variable_chunk_stream.cc b/thin-provisioning/variable_chunk_stream.cc index 41c6c96..d2f1529 100644 --- a/thin-provisioning/variable_chunk_stream.cc +++ b/thin-provisioning/variable_chunk_stream.cc @@ -59,8 +59,8 @@ variable_chunk_stream::get() little_chunk_.len_ = little_e_ - little_b_; little_chunk_.offset_ = big_chunk_->offset_ + little_chunk_.len_; - little_chunk_.mem_.clear(); - little_chunk_.mem_.push_back(mem(little_b_, little_e_)); + little_chunk_.mem_.begin = little_b_; + little_chunk_.mem_.end = little_e_; return little_chunk_; } @@ -80,7 +80,7 @@ variable_chunk_stream::next_big_chunk() return false; big_chunk_ = &stream_.get(); - little_b_ = little_e_ = last_hashed_ = big_chunk_->mem_.front().begin; + little_b_ = little_e_ = last_hashed_ = big_chunk_->mem_.begin; h_.reset(); return true; @@ -93,19 +93,19 @@ variable_chunk_stream::advance_one() assert(big_chunk_); - big_e = big_chunk_->mem_.front().end; + big_e = big_chunk_->mem_.end; little_b_ = little_e_; little_e_ = last_hashed_; if (little_b_ == big_e) { if (next_big_chunk()) - big_e = big_chunk_->mem_.front().end; + big_e = big_chunk_->mem_.end; else return false; } - assert(little_e_ >= big_chunk_->mem_.front().begin); - assert(little_b_ >= big_chunk_->mem_.front().begin); + assert(little_e_ >= big_chunk_->mem_.begin); + assert(little_b_ >= big_chunk_->mem_.begin); assert(little_e_ <= big_e); assert(little_b_ <= big_e); @@ -126,8 +126,8 @@ variable_chunk_stream::advance_one() if (little_e_ == big_e) last_hashed_ = little_e_; - assert(little_e_ >= big_chunk_->mem_.front().begin); - assert(little_b_ >= big_chunk_->mem_.front().begin); + assert(little_e_ >= big_chunk_->mem_.begin); + assert(little_b_ >= big_chunk_->mem_.begin); assert(little_e_ <= big_e); assert(little_b_ <= big_e);