]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lscpu: report also number of cache instances
authorKarel Zak <kzak@redhat.com>
Thu, 1 Apr 2021 10:27:05 +0000 (12:27 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 1 Apr 2021 10:27:05 +0000 (12:27 +0200)
Caches (sum of all):
  L1d:                   128 KiB (4 instances)
  L1i:                   128 KiB (4 instances)
  L2:                    1 MiB (4 instances)
  L3:                    8 MiB (1 instance)

Suggested-by: John Henning <john.henning@oracle.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
sys-utils/lscpu-topology.c
sys-utils/lscpu.c
sys-utils/lscpu.h

index 2e1a3b9870124ebda47ccdc3ff0a869d09d5233b..92f10b51856bcd9a989cc6afe920ae424ab4e961 100644 (file)
@@ -209,13 +209,19 @@ static int cputype_read_topology(struct lscpu_cxt *cxt, struct lscpu_cputype *ct
 }
 
 /* count size of all instancess of the "name" */
-size_t lscpu_get_cache_full_size(struct lscpu_cxt *cxt, const char *name)
+size_t lscpu_get_cache_full_size(struct lscpu_cxt *cxt, const char *name, int *instances)
 {
        size_t i, sz = 0;
 
+       if (instances)
+               *instances = 0;
+
        for (i = 0; i < cxt->ncaches; i++) {
-               if (strcmp(cxt->caches[i].name, name) == 0)
+               if (strcmp(cxt->caches[i].name, name) == 0) {
                        sz += cxt->caches[i].size;
+                       if (instances)
+                               (*instances)++;
+               }
        }
 
        return sz;
@@ -539,10 +545,10 @@ int lscpu_read_topology(struct lscpu_cxt *cxt)
        }
 
        lscpu_sort_caches(cxt->caches, cxt->ncaches);
-       DBG(GATHER, ul_debugobj(cxt, " L1d: %zu", lscpu_get_cache_full_size(cxt, "L1d")));
-       DBG(GATHER, ul_debugobj(cxt, " L1i: %zu", lscpu_get_cache_full_size(cxt, "L1i")));
-       DBG(GATHER, ul_debugobj(cxt, " L2: %zu", lscpu_get_cache_full_size(cxt, "L2")));
-       DBG(GATHER, ul_debugobj(cxt, " L3: %zu", lscpu_get_cache_full_size(cxt, "L3")));
+       DBG(GATHER, ul_debugobj(cxt, " L1d: %zu", lscpu_get_cache_full_size(cxt, "L1d", NULL)));
+       DBG(GATHER, ul_debugobj(cxt, " L1i: %zu", lscpu_get_cache_full_size(cxt, "L1i", NULL)));
+       DBG(GATHER, ul_debugobj(cxt, " L2: %zu", lscpu_get_cache_full_size(cxt, "L2", NULL)));
+       DBG(GATHER, ul_debugobj(cxt, " L3: %zu", lscpu_get_cache_full_size(cxt, "L3", NULL)));
 
        return rc;
 }
index cd72a39438006cc12c164d489ebd819cb42e9ba9..b029e0fc0b02368b5433c6e25b6bccdb4ce4124f 100644 (file)
@@ -511,7 +511,7 @@ static void caches_add_line(struct lscpu_cxt *cxt,
                {
                        uint64_t sz = 0;
                        if (ca->name)
-                               sz = lscpu_get_cache_full_size(cxt, ca->name);
+                               sz = lscpu_get_cache_full_size(cxt, ca->name, NULL);
                        if (!sz)
                                break;
                        if (cxt->bytes)
@@ -1045,21 +1045,28 @@ static void print_summary(struct lscpu_cxt *cxt)
                for (i = 0; i < cxt->ncaches; i++) {
                        const char *name = cxt->caches[i].name;
                        uint64_t sz;
+                       int n = 0;
 
                        if (last && strcmp(last, name) == 0)
                                continue;
-                       sz = lscpu_get_cache_full_size(cxt, name);
+                       sz = lscpu_get_cache_full_size(cxt, name, &n);
                        if (!sz)
                                continue;
                        snprintf(field, sizeof(field), is_term ? _("%s:") : _("%s cache:"), name);
                        if (cxt->bytes)
-                               add_summary_x(tb, sec, field, "%" PRIu64, sz);
+                               add_summary_sprint(tb, sec, field,
+                                               P_("%" PRIu64 " (%d instance)",
+                                                  "%" PRIu64 " (%d instances)", n),
+                                               sz, n);
                        else {
                                char *tmp = size_to_human_string(
                                                SIZE_SUFFIX_3LETTER |
                                                SIZE_SUFFIX_SPACE,
                                                sz);
-                               add_summary_s(tb, sec, field, tmp);
+                               add_summary_sprint(tb, sec, field,
+                                               P_("%s (%d instance)",
+                                                  "%s (%d instances)", n),
+                                               tmp, n);
                                free(tmp);
                        }
                        last = name;
index 623c07998d60f7e69dcb4a8c628d64790e6cc9d5..e52c77c226c00baffded42448e31319e78e1ebd8 100644 (file)
@@ -271,7 +271,7 @@ int lscpu_read_numas(struct lscpu_cxt *cxt);
 void lscpu_free_caches(struct lscpu_cache *caches, size_t n);
 void lscpu_sort_caches(struct lscpu_cache *caches, size_t n);
 
-size_t lscpu_get_cache_full_size(struct lscpu_cxt *cxt, const char *name);
+size_t lscpu_get_cache_full_size(struct lscpu_cxt *cxt, const char *name, int *instances);
 struct lscpu_cache *lscpu_cpu_get_cache(struct lscpu_cxt *cxt,
                                 struct lscpu_cpu *cpu, const char *name);