lkml.org 
[lkml]   [2022]   [May]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v9 04/69] radix tree test suite: add allocation counts and size to kmem_cache
    Date
    From: "Liam R. Howlett" <Liam.Howlett@Oracle.com>

    Add functions to get the number of allocations, and total allocations from
    a kmem_cache. Also add a function to get the allocated size and a way to
    zero the total allocations.

    Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
    ---
    tools/testing/radix-tree/linux.c | 28 +++++++++++++++++++++++++++-
    1 file changed, 27 insertions(+), 1 deletion(-)

    diff --git a/tools/testing/radix-tree/linux.c b/tools/testing/radix-tree/linux.c
    index 277aa8b70abc..f20529ae4dbe 100644
    --- a/tools/testing/radix-tree/linux.c
    +++ b/tools/testing/radix-tree/linux.c
    @@ -24,6 +24,8 @@ struct kmem_cache {
    void *objs;
    void (*ctor)(void *);
    unsigned int non_kernel;
    + unsigned long nr_allocated;
    + unsigned long nr_tallocated;
    };

    void kmem_cache_set_non_kernel(struct kmem_cache *cachep, unsigned int val)
    @@ -31,9 +33,28 @@ void kmem_cache_set_non_kernel(struct kmem_cache *cachep, unsigned int val)
    cachep->non_kernel = val;
    }

    +unsigned long kmem_cache_get_alloc(struct kmem_cache *cachep)
    +{
    + return cachep->size * cachep->nr_allocated;
    +}
    +
    +unsigned long kmem_cache_nr_allocated(struct kmem_cache *cachep)
    +{
    + return cachep->nr_allocated;
    +}
    +
    +unsigned long kmem_cache_nr_tallocated(struct kmem_cache *cachep)
    +{
    + return cachep->nr_tallocated;
    +}
    +
    +void kmem_cache_zero_nr_tallocated(struct kmem_cache *cachep)
    +{
    + cachep->nr_tallocated = 0;
    +}
    +
    void *kmem_cache_alloc_lru(struct kmem_cache *cachep, struct list_lru *lru,
    int gfp)
    -
    {
    void *p;

    @@ -64,7 +85,9 @@ void *kmem_cache_alloc_lru(struct kmem_cache *cachep, struct list_lru *lru,
    memset(p, 0, cachep->size);
    }

    + uatomic_inc(&cachep->nr_allocated);
    uatomic_inc(&nr_allocated);
    + uatomic_inc(&cachep->nr_tallocated);
    if (kmalloc_verbose)
    printf("Allocating %p from slab\n", p);
    return p;
    @@ -74,6 +97,7 @@ void kmem_cache_free(struct kmem_cache *cachep, void *objp)
    {
    assert(objp);
    uatomic_dec(&nr_allocated);
    + uatomic_dec(&cachep->nr_allocated);
    if (kmalloc_verbose)
    printf("Freeing %p to slab\n", objp);
    pthread_mutex_lock(&cachep->lock);
    @@ -99,6 +123,8 @@ kmem_cache_create(const char *name, unsigned int size, unsigned int align,
    ret->size = size;
    ret->align = align;
    ret->nr_objs = 0;
    + ret->nr_allocated = 0;
    + ret->nr_tallocated = 0;
    ret->objs = NULL;
    ret->ctor = ctor;
    ret->non_kernel = 0;
    --
    2.35.1
    \
     
     \ /
      Last update: 2022-05-04 03:08    [W:4.332 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site