Explorar el Código

correct 'apt-cache stats' to include more

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
David Kalnischkies hace 12 años
padre
commit
ac2c559b33
Se han modificado 2 ficheros con 33 adiciones y 25 borrados
  1. 1 1
      apt-pkg/pkgcachegen.cc
  2. 32 24
      cmdline/apt-cache.cc

+ 1 - 1
apt-pkg/pkgcachegen.cc

@@ -770,7 +770,7 @@ bool pkgCacheGenerator::NewFileVer(pkgCache::VerIterator &Ver,
    // Get a structure
    // Get a structure
    map_pointer_t const VerFile = AllocateInMap(sizeof(pkgCache::VerFile));
    map_pointer_t const VerFile = AllocateInMap(sizeof(pkgCache::VerFile));
    if (VerFile == 0)
    if (VerFile == 0)
-      return 0;
+      return false;
    
    
    pkgCache::VerFileIterator VF(Cache,Cache.VerFileP + VerFile);
    pkgCache::VerFileIterator VF(Cache,Cache.VerFileP + VerFile);
    VF->File = CurrentFile - Cache.PkgFileP;
    VF->File = CurrentFile - Cache.PkgFileP;

+ 32 - 24
cmdline/apt-cache.cc

@@ -270,34 +270,36 @@ static bool DumpPackage(CommandLine &CmdL)
 template<class T>
 template<class T>
 static void ShowHashTableStats(std::string Type,
 static void ShowHashTableStats(std::string Type,
                                T *StartP,
                                T *StartP,
-                               map_ptrloc *Hashtable,
+                               map_pointer_t *Hashtable,
                                unsigned long Size)
                                unsigned long Size)
 {
 {
    // hashtable stats for the HashTable
    // 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)
    for (unsigned int i=0; i < NumBuckets; ++i)
    {
    {
       T *P = StartP + Hashtable[i];
       T *P = StartP + Hashtable[i];
       if(P == 0 || P == StartP)
       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);
       LongestBucket = std::max(ThisBucketSize, LongestBucket);
       ShortestBucket = std::min(ThisBucketSize, ShortestBucket);
       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 << "  Longest: " << LongestBucket << std::endl;
    cout << "  Shortest: " << ShortestBucket << 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;
    unsigned long Slack = 0;
    for (int I = 0; I != 7; I++)
    for (int I = 0; I != 7; I++)
       Slack += Cache->Head().Pools[I].ItemSize*Cache->Head().Pools[I].Count;
       Slack += Cache->Head().Pools[I].ItemSize*Cache->Head().Pools[I].Count;
    cout << _("Total slack space: ") << SizeToStr(Slack) << endl;
    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;
 }
 }