summaryrefslogtreecommitdiff
path: root/cmdline/apt-cache.cc
diff options
context:
space:
mode:
authorMichael Vogt <mvo@debian.org>2014-06-18 10:13:01 +0200
committerMichael Vogt <mvo@debian.org>2014-06-18 10:13:01 +0200
commitda029b0aaebdc64a3a9f6b7012213539421c934b (patch)
tree81ea34b4e10c9428c375fa3aaa21b831d69fcfe2 /cmdline/apt-cache.cc
parentaa0bd601ea3db281187275bbbece760d85ff29d9 (diff)
parent637c3b232223c17827a8842cb1c24655469329ba (diff)
Merge remote-tracking branch 'mvo/feature/hash-stats' into debian/experimental
Conflicts: apt-pkg/acquire-item.cc apt-pkg/acquire-item.h apt-pkg/deb/debmetaindex.h apt-pkg/pkgcache.cc test/integration/test-apt-ftparchive-src-cachedb
Diffstat (limited to 'cmdline/apt-cache.cc')
-rw-r--r--cmdline/apt-cache.cc46
1 files changed, 45 insertions, 1 deletions
diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc
index 1414617eb..2ed1bf5d4 100644
--- a/cmdline/apt-cache.cc
+++ b/cmdline/apt-cache.cc
@@ -264,6 +264,44 @@ static bool DumpPackage(CommandLine &CmdL)
return true;
}
/*}}}*/
+// ShowHashTableStats - Show stats about a hashtable /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+template<class T>
+static void ShowHashTableStats(std::string Type,
+ T *StartP,
+ map_ptrloc *Hashtable,
+ unsigned long Size)
+{
+ // hashtable stats for the HashTable
+ long NumBuckets = Size;
+ long UsedBuckets = 0;
+ long UnusedBuckets = 0;
+ long LongestBucket = 0;
+ long ShortestBucket = NumBuckets;
+ for (unsigned int i=0; i < NumBuckets; ++i)
+ {
+ T *P = StartP + Hashtable[i];
+ if(P == 0 || P == StartP)
+ {
+ UnusedBuckets++;
+ continue;
+ }
+ long ThisBucketSize = 0;
+ for (; P != StartP; P = StartP + P->Next)
+ ThisBucketSize++;
+ LongestBucket = std::max(ThisBucketSize, LongestBucket);
+ ShortestBucket = std::min(ThisBucketSize, ShortestBucket);
+ UsedBuckets += ThisBucketSize;
+ }
+ cout << "Total buckets " << Type << ": " << SizeToStr(NumBuckets) << std::endl;
+ cout << " Unused: " << SizeToStr(UnusedBuckets) << std::endl;
+ cout << " Used: " << UsedBuckets << std::endl;
+ cout << " Average entries: " << UsedBuckets/(double)NumBuckets << std::endl;
+ cout << " Longest: " << LongestBucket << std::endl;
+ cout << " Shortest: " << ShortestBucket << std::endl;
+}
+ /*}}}*/
// Stats - Dump some nice statistics /*{{{*/
// ---------------------------------------------------------------------
/* */
@@ -373,7 +411,13 @@ static bool Stats(CommandLine &)
Cache->Head().VerFileCount*Cache->Head().VerFileSz +
Cache->Head().ProvidesCount*Cache->Head().ProvidesSz;
cout << _("Total space accounted for: ") << SizeToStr(Total) << endl;
-
+
+ // hashtable stats
+ int HashTableSize = sizeof(Cache->HeaderP->PkgHashTable)/sizeof(map_ptrloc);
+ ShowHashTableStats<pkgCache::Package>("PkgHashTable", Cache->PkgP, Cache->HeaderP->PkgHashTable, HashTableSize);
+ HashTableSize = sizeof(Cache->HeaderP->GrpHashTable)/sizeof(map_ptrloc);
+ ShowHashTableStats<pkgCache::Group>("GrpHashTable", Cache->GrpP, Cache->HeaderP->GrpHashTable, HashTableSize);
+
return true;
}
/*}}}*/