]> git.saurik.com Git - apt.git/commitdiff
correct 'apt-cache stats' to include more
authorDavid Kalnischkies <david@kalnischkies.de>
Fri, 13 Jun 2014 07:10:11 +0000 (09:10 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Wed, 18 Jun 2014 10:41:11 +0000 (12:41 +0200)
It still doesn't reflect the size the cache has on the disk compared to
what is given as total size (90 vs 103 MB), but by counting all structs
in we are at least a bit closer to the reality.

Git-Dch: ignore

apt-pkg/pkgcachegen.cc
cmdline/apt-cache.cc

index 6a3cb26374099d4a8d7e6532f140486db87dd070..a4d5d8783d523cdb1e781b1d3c1af6748ef29248 100644 (file)
@@ -770,7 +770,7 @@ bool pkgCacheGenerator::NewFileVer(pkgCache::VerIterator &Ver,
    // Get a structure
    map_pointer_t const VerFile = AllocateInMap(sizeof(pkgCache::VerFile));
    if (VerFile == 0)
    // Get a structure
    map_pointer_t const VerFile = AllocateInMap(sizeof(pkgCache::VerFile));
    if (VerFile == 0)
-      return 0;
+      return false;
    
    pkgCache::VerFileIterator VF(Cache,Cache.VerFileP + VerFile);
    VF->File = CurrentFile - Cache.PkgFileP;
    
    pkgCache::VerFileIterator VF(Cache,Cache.VerFileP + VerFile);
    VF->File = CurrentFile - Cache.PkgFileP;
index 620cb6c018125ec34e98b396118ed50e694a5925..88a3232800385f7980a5c0793b78852fabe32740 100644 (file)
@@ -270,34 +270,36 @@ static bool DumpPackage(CommandLine &CmdL)
 template<class T>
 static void ShowHashTableStats(std::string Type,
                                T *StartP,
 template<class T>
 static void ShowHashTableStats(std::string Type,
                                T *StartP,
-                               map_ptrloc *Hashtable,
+                               map_pointer_t *Hashtable,
                                unsigned long Size)
 {
    // hashtable stats for the HashTable
                                unsigned long Size)
 {
    // hashtable stats for the HashTable
-   long NumBuckets = Size;
-   long UsedBuckets = 0;
-   long UnusedBuckets = 0;
-   long LongestBucket = 0;
-   long ShortestBucket = NumBuckets;
+   unsigned long NumBuckets = Size;
+   unsigned long UsedBuckets = 0;
+   unsigned long UnusedBuckets = 0;
+   unsigned long LongestBucket = 0;
+   unsigned long ShortestBucket = NumBuckets;
+   unsigned long Entries = 0;
    for (unsigned int i=0; i < NumBuckets; ++i)
    {
       T *P = StartP + Hashtable[i];
       if(P == 0 || P == StartP)
       {
    for (unsigned int i=0; i < NumBuckets; ++i)
    {
       T *P = StartP + Hashtable[i];
       if(P == 0 || P == StartP)
       {
-         UnusedBuckets++;
+         ++UnusedBuckets;
          continue;
       }
          continue;
       }
-      long ThisBucketSize = 0;
+      ++UsedBuckets;
+      unsigned long ThisBucketSize = 0;
       for (; P != StartP; P = StartP + P->Next)
       for (; P != StartP; P = StartP + P->Next)
-         ThisBucketSize++;
+         ++ThisBucketSize;
+      Entries += ThisBucketSize;
       LongestBucket = std::max(ThisBucketSize, LongestBucket);
       ShortestBucket = std::min(ThisBucketSize, ShortestBucket);
       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 << "Total buckets in " << Type << ": " << NumBuckets << std::endl;
+   cout << "  Unused: " << UnusedBuckets << std::endl;
    cout << "  Used: " << UsedBuckets  << std::endl;
    cout << "  Used: " << UsedBuckets  << std::endl;
-   cout << "  Average entries: " << UsedBuckets/(double)NumBuckets << std::endl;
+   cout << "  Average entries: " << Entries/(double)NumBuckets << std::endl;
    cout << "  Longest: " << LongestBucket << std::endl;
    cout << "  Shortest: " << ShortestBucket << std::endl;
 }
    cout << "  Longest: " << LongestBucket << std::endl;
    cout << "  Shortest: " << ShortestBucket << std::endl;
 }
@@ -398,25 +400,31 @@ static bool Stats(CommandLine &)
       }
    }
    cout << _("Total dependency version space: ") << SizeToStr(DepVerSize) << endl;
       }
    }
    cout << _("Total dependency version space: ") << SizeToStr(DepVerSize) << endl;
-   
+
    unsigned long Slack = 0;
    for (int I = 0; I != 7; I++)
       Slack += Cache->Head().Pools[I].ItemSize*Cache->Head().Pools[I].Count;
    cout << _("Total slack space: ") << SizeToStr(Slack) << endl;
    unsigned long Slack = 0;
    for (int I = 0; I != 7; I++)
       Slack += Cache->Head().Pools[I].ItemSize*Cache->Head().Pools[I].Count;
    cout << _("Total slack space: ") << SizeToStr(Slack) << endl;
-   
+
    unsigned long Total = 0;
    unsigned long Total = 0;
-   Total = Slack + Size + Cache->Head().DependsCount*Cache->Head().DependencySz + 
-           Cache->Head().VersionCount*Cache->Head().VersionSz +
-           Cache->Head().PackageCount*Cache->Head().PackageSz + 
-           Cache->Head().VerFileCount*Cache->Head().VerFileSz +
-           Cache->Head().ProvidesCount*Cache->Head().ProvidesSz;
+#define APT_CACHESIZE(X,Y) (Cache->Head().X * Cache->Head().Y)
+   Total = Slack + Size +
+      APT_CACHESIZE(GroupCount, GroupSz) +
+      APT_CACHESIZE(PackageCount, PackageSz) +
+      APT_CACHESIZE(VersionCount, VersionSz) +
+      APT_CACHESIZE(DescriptionCount, DescriptionSz) +
+      APT_CACHESIZE(DependsCount, DependencySz) +
+      APT_CACHESIZE(PackageFileCount, PackageFileSz) +
+      APT_CACHESIZE(VerFileCount, VerFileSz) +
+      APT_CACHESIZE(DescFileCount, DescFileSz) +
+      APT_CACHESIZE(ProvidesCount, ProvidesSz) +
+      (2 * Cache->Head().HashTableSize * sizeof(map_id_t));
    cout << _("Total space accounted for: ") << SizeToStr(Total) << endl;
    cout << _("Total space accounted for: ") << SizeToStr(Total) << endl;
+#undef APT_CACHESIZE
 
    // hashtable stats
 
    // 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);
+   ShowHashTableStats<pkgCache::Package>("PkgHashTable", Cache->PkgP, Cache->Head().PkgHashTable(), Cache->Head().HashTableSize);
+   ShowHashTableStats<pkgCache::Group>("GrpHashTable", Cache->GrpP, Cache->Head().GrpHashTable(), Cache->Head().HashTableSize);
 
    return true;
 }
 
    return true;
 }