diff options
author | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-22 19:19:07 +0000 |
---|---|---|
committer | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-22 19:19:07 +0000 |
commit | 070fd95297d8d8eb7076ea8ba0956dee74d0e4f9 (patch) | |
tree | 0cc92b8f856b852ed612ce391328aefd77b3cac3 /net/disk_cache/backend_impl.cc | |
parent | d1cb9f53adcefd8f7ff6abc58ae7edd6f522a42d (diff) | |
download | chromium_src-070fd95297d8d8eb7076ea8ba0956dee74d0e4f9.zip chromium_src-070fd95297d8d8eb7076ea8ba0956dee74d0e4f9.tar.gz chromium_src-070fd95297d8d8eb7076ea8ba0956dee74d0e4f9.tar.bz2 |
Disk cache: Set up a new experiment on the dev channel.
Enable the new eviction algorithm for 10% of the current
users on the dev channel.
Review URL: http://codereview.chromium.org/79064
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14229 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/disk_cache/backend_impl.cc')
-rw-r--r-- | net/disk_cache/backend_impl.cc | 62 |
1 files changed, 54 insertions, 8 deletions
diff --git a/net/disk_cache/backend_impl.cc b/net/disk_cache/backend_impl.cc index 64955fc..51bc948 100644 --- a/net/disk_cache/backend_impl.cc +++ b/net/disk_cache/backend_impl.cc @@ -140,12 +140,28 @@ bool DelayedCacheCleanup(const std::wstring& full_path) { // should be discarded. bool InitExperiment(int* stored_value) { if (*stored_value <= 2) { - *stored_value = 0; + // Setup the new experiment. + srand(static_cast<int>(Time::Now().ToInternalValue())); + int option = rand() % 10; + + // Values used by the current experiment are 5 through 8, with 8 used for + // empty caches (not set here). + if (option > 1) { + // 80% will be out of the experiment. + *stored_value = 5; + } else { + *stored_value = option + 6; + } return true; } - // Discard current cache for groups 3 and 4. - return false; + if (*stored_value < 5) { + // Discard current cache for groups 3 and 4. + return false; + } + + // Current experiment already set. + return true; } } // namespace @@ -247,6 +263,9 @@ bool BackendImpl::Init() { if (data_ && !InitExperiment(&data_->header.experiment)) return false; + if (data_->header.experiment > 6) + new_eviction_ = true; + if (!CheckIndex()) { ReportError(ERR_INIT_FAILED); return false; @@ -757,6 +776,19 @@ void BackendImpl::FirstEviction() { int large_entries_bytes = stats_.GetLargeEntriesSize(); int large_ratio = large_entries_bytes * 100 / data_->header.num_bytes; CACHE_UMA(PERCENTAGE, "FirstLargeEntriesRatio", 0, large_ratio); + + if (data_->header.experiment == 8) { + CACHE_UMA(PERCENTAGE, "FirstResurrectRatio", 8, stats_.GetResurrectRatio()); + CACHE_UMA(PERCENTAGE, "FirstNoUseRatio", 8, + data_->header.lru.sizes[0] / data_->header.num_entries); + CACHE_UMA(PERCENTAGE, "FirstLowUseRatio", 8, + data_->header.lru.sizes[1] / data_->header.num_entries); + CACHE_UMA(PERCENTAGE, "FirstHighUseRatio", 8, + data_->header.lru.sizes[2] / data_->header.num_entries); + CACHE_UMA(PERCENTAGE, "FirstDeletedRatio", 8, + data_->header.lru.sizes[4] / data_->header.num_entries); + } + stats_.ResetRatios(); } @@ -868,9 +900,10 @@ bool BackendImpl::CreateBackingStore(disk_cache::File* file) { IndexHeader header; header.table_len = DesiredIndexTableLen(max_size_); + // New caches will go to group 8 on this experiment. + header.experiment = 8; // We need file version 2.1 for the new eviction algorithm. - if (new_eviction_) - header.version = 0x20001; + header.version = 0x20001; header.create_time = Time::Now().ToInternalValue(); @@ -1332,19 +1365,32 @@ void BackendImpl::ReportStats() { return; CACHE_UMA(HOURS, "UseTime", 0, static_cast<int>(use_hours)); - CACHE_UMA(PERCENTAGE, "HitRatio", 0, stats_.GetHitRatio()); - CACHE_UMA(PERCENTAGE, "ResurrectRatio", 0, stats_.GetResurrectRatio()); + CACHE_UMA(PERCENTAGE, "HitRatio", data_->header.experiment, + stats_.GetHitRatio()); int64 trim_rate = stats_.GetCounter(Stats::TRIM_ENTRY) / use_hours; CACHE_UMA(COUNTS, "TrimRate", 0, static_cast<int>(trim_rate)); int avg_size = data_->header.num_bytes / GetEntryCount(); - CACHE_UMA(COUNTS, "EntrySize", 0, avg_size); + CACHE_UMA(COUNTS, "EntrySize", data_->header.experiment, avg_size); int large_entries_bytes = stats_.GetLargeEntriesSize(); int large_ratio = large_entries_bytes * 100 / data_->header.num_bytes; CACHE_UMA(PERCENTAGE, "LargeEntriesRatio", 0, large_ratio); + if (new_eviction_) { + CACHE_UMA(PERCENTAGE, "ResurrectRatio", data_->header.experiment, + stats_.GetResurrectRatio()); + CACHE_UMA(PERCENTAGE, "NoUseRatio", data_->header.experiment, + data_->header.lru.sizes[0] / data_->header.num_entries); + CACHE_UMA(PERCENTAGE, "LowUseRatio", data_->header.experiment, + data_->header.lru.sizes[1] / data_->header.num_entries); + CACHE_UMA(PERCENTAGE, "HighUseRatio", data_->header.experiment, + data_->header.lru.sizes[2] / data_->header.num_entries); + CACHE_UMA(PERCENTAGE, "DeletedRatio", data_->header.experiment, + data_->header.lru.sizes[4] / data_->header.num_entries); + } + stats_.ResetRatios(); stats_.SetCounter(Stats::TRIM_ENTRY, 0); } |