lkml.org 
[lkml]   [2020]   [Apr]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 24/24] lib/test_vmalloc.c: Add test cases for kvfree_rcu()
    Date
    Introduce four new test cases. They are considered to
    cover and testing of kvfree_rcu() interface. Two of
    them belong to 1 argument functionality and another
    two for 2 arguments functionality.

    The aim is to stress it, to check how it behaves under
    different load and memory conditions, analysis of the
    performance throughput and its impact.

    Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
    ---
    lib/test_vmalloc.c | 103 +++++++++++++++++++++++++++++++++++++++++----
    1 file changed, 95 insertions(+), 8 deletions(-)

    diff --git a/lib/test_vmalloc.c b/lib/test_vmalloc.c
    index 8bbefcaddfe8..ec73561cda2e 100644
    --- a/lib/test_vmalloc.c
    +++ b/lib/test_vmalloc.c
    @@ -15,6 +15,8 @@
    #include <linux/delay.h>
    #include <linux/rwsem.h>
    #include <linux/mm.h>
    +#include <linux/rcupdate.h>
    +#include <linux/slab.h>

    #define __param(type, name, init, msg) \
    static type name = init; \
    @@ -35,14 +37,18 @@ __param(int, test_loop_count, 1000000,

    __param(int, run_test_mask, INT_MAX,
    "Set tests specified in the mask.\n\n"
    - "\t\tid: 1, name: fix_size_alloc_test\n"
    - "\t\tid: 2, name: full_fit_alloc_test\n"
    - "\t\tid: 4, name: long_busy_list_alloc_test\n"
    - "\t\tid: 8, name: random_size_alloc_test\n"
    - "\t\tid: 16, name: fix_align_alloc_test\n"
    - "\t\tid: 32, name: random_size_align_alloc_test\n"
    - "\t\tid: 64, name: align_shift_alloc_test\n"
    - "\t\tid: 128, name: pcpu_alloc_test\n"
    + "\t\tid: 1, name: fix_size_alloc_test\n"
    + "\t\tid: 2, name: full_fit_alloc_test\n"
    + "\t\tid: 4, name: long_busy_list_alloc_test\n"
    + "\t\tid: 8, name: random_size_alloc_test\n"
    + "\t\tid: 16, name: fix_align_alloc_test\n"
    + "\t\tid: 32, name: random_size_align_alloc_test\n"
    + "\t\tid: 64, name: align_shift_alloc_test\n"
    + "\t\tid: 128, name: pcpu_alloc_test\n"
    + "\t\tid: 256, name: kvfree_rcu_1_arg_vmalloc_test\n"
    + "\t\tid: 512, name: kvfree_rcu_2_arg_vmalloc_test\n"
    + "\t\tid: 1024, name: kvfree_rcu_1_arg_slab_test\n"
    + "\t\tid: 2048, name: kvfree_rcu_2_arg_slab_test\n"
    /* Add a new test case description here. */
    );

    @@ -328,6 +334,83 @@ pcpu_alloc_test(void)
    return rv;
    }

    +struct test_kvfree_rcu {
    + struct rcu_head rcu;
    + unsigned char array[20];
    +};
    +
    +static int
    +kvfree_rcu_1_arg_vmalloc_test(void)
    +{
    + struct test_kvfree_rcu *p;
    + int i;
    +
    + for (i = 0; i < test_loop_count; i++) {
    + p = vmalloc(1 * PAGE_SIZE);
    + if (!p)
    + return -1;
    +
    + p->array[0] = 'a';
    + kvfree_rcu(p);
    + }
    +
    + return 0;
    +}
    +
    +static int
    +kvfree_rcu_2_arg_vmalloc_test(void)
    +{
    + struct test_kvfree_rcu *p;
    + int i;
    +
    + for (i = 0; i < test_loop_count; i++) {
    + p = vmalloc(1 * PAGE_SIZE);
    + if (!p)
    + return -1;
    +
    + p->array[0] = 'a';
    + kvfree_rcu(p, rcu);
    + }
    +
    + return 0;
    +}
    +
    +static int
    +kvfree_rcu_1_arg_slab_test(void)
    +{
    + struct test_kvfree_rcu *p;
    + int i;
    +
    + for (i = 0; i < test_loop_count; i++) {
    + p = kmalloc(sizeof(*p), GFP_KERNEL);
    + if (!p)
    + return -1;
    +
    + p->array[0] = 'a';
    + kvfree_rcu(p);
    + }
    +
    + return 0;
    +}
    +
    +static int
    +kvfree_rcu_2_arg_slab_test(void)
    +{
    + struct test_kvfree_rcu *p;
    + int i;
    +
    + for (i = 0; i < test_loop_count; i++) {
    + p = kmalloc(sizeof(*p), GFP_KERNEL);
    + if (!p)
    + return -1;
    +
    + p->array[0] = 'a';
    + kvfree_rcu(p, rcu);
    + }
    +
    + return 0;
    +}
    +
    struct test_case_desc {
    const char *test_name;
    int (*test_func)(void);
    @@ -342,6 +425,10 @@ static struct test_case_desc test_case_array[] = {
    { "random_size_align_alloc_test", random_size_align_alloc_test },
    { "align_shift_alloc_test", align_shift_alloc_test },
    { "pcpu_alloc_test", pcpu_alloc_test },
    + { "kvfree_rcu_1_arg_vmalloc_test", kvfree_rcu_1_arg_vmalloc_test },
    + { "kvfree_rcu_2_arg_vmalloc_test", kvfree_rcu_2_arg_vmalloc_test },
    + { "kvfree_rcu_1_arg_slab_test", kvfree_rcu_1_arg_slab_test },
    + { "kvfree_rcu_2_arg_slab_test", kvfree_rcu_2_arg_slab_test },
    /* Add a new test case here. */
    };

    --
    2.20.1
    \
     
     \ /
      Last update: 2020-04-28 23:00    [W:5.549 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site