15 May, 2019

1 commit

  • Local 'ret' is unneeded and was poorly named: the variable `ret'
    generally means the "the value which this function will return".

    Cc: Roman Gushchin
    Cc: Uladzislau Rezki
    Cc: Michal Hocko
    Cc: Matthew Wilcox
    Cc: Thomas Garnier
    Cc: Oleksiy Avramchenko
    Cc: Steven Rostedt
    Cc: Joel Fernandes
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: Tejun Heo
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     

27 Apr, 2019

1 commit

  • On my "Intel(R) Xeon(R) W-2135 CPU @ 3.70GHz" system(12 CPUs) i get the
    warning from the compiler about frame size:

    warning: the frame size of 1096 bytes is larger than 1024 bytes [-Wframe-larger-than=]

    the size of cpumask_t depends on number of CPUs, therefore just make use
    of cpumask_of() in set_cpus_allowed_ptr() as a second argument.

    Link: http://lkml.kernel.org/r/20190418193925.9361-1-urezki@gmail.com
    Signed-off-by: Uladzislau Rezki (Sony)
    Reviewed-by: Andrew Morton
    Reviewed-by: Roman Gushchin
    Cc: Uladzislau Rezki
    Cc: Michal Hocko
    Cc: Matthew Wilcox
    Cc: Thomas Garnier
    Cc: Oleksiy Avramchenko
    Cc: Steven Rostedt
    Cc: Joel Fernandes
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: Tejun Heo
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Uladzislau Rezki (Sony)
     

06 Mar, 2019

1 commit

  • This adds a new kernel module for analysis of vmalloc allocator. It is
    only enabled as a module. There are two main reasons this module should
    be used for: performance evaluation and stressing of vmalloc subsystem.

    It consists of several test cases. As of now there are 8. The module
    has five parameters we can specify to change its the behaviour.

    1) run_test_mask - set of tests to be run

    id: 1, name: fix_size_alloc_test
    id: 2, name: full_fit_alloc_test
    id: 4, name: long_busy_list_alloc_test
    id: 8, name: random_size_alloc_test
    id: 16, name: fix_align_alloc_test
    id: 32, name: random_size_align_alloc_test
    id: 64, name: align_shift_alloc_test
    id: 128, name: pcpu_alloc_test

    By default all tests are in run test mask. If you want to select some
    specific tests it is possible to pass the mask. For example for first,
    second and fourth tests we go 11 value.

    2) test_repeat_count - how many times each test should be repeated
    By default it is one time per test. It is possible to pass any number.
    As high the value is the test duration gets increased.

    3) test_loop_count - internal test loop counter. By default it is set
    to 1000000.

    4) single_cpu_test - use one CPU to run the tests
    By default this parameter is set to false. It means that all online
    CPUs execute tests. By setting it to 1, the tests are executed by
    first online CPU only.

    5) sequential_test_order - run tests in sequential order
    By default this parameter is set to false. It means that before running
    tests the order is shuffled. It is possible to make it sequential, just
    set it to 1.

    Performance analysis:
    In order to evaluate performance of vmalloc allocations, usually it
    makes sense to use only one CPU that runs tests, use sequential order,
    number of repeat tests can be different as well as set of test mask.

    For example if we want to run all tests, to use one CPU and repeat each
    test 3 times. Insert the module passing following parameters:

    single_cpu_test=1 sequential_test_order=1 test_repeat_count=3

    with following output:

    Summary: fix_size_alloc_test passed: 3 failed: 0 repeat: 3 loops: 1000000 avg: 901177 usec
    Summary: full_fit_alloc_test passed: 3 failed: 0 repeat: 3 loops: 1000000 avg: 1039341 usec
    Summary: long_busy_list_alloc_test passed: 3 failed: 0 repeat: 3 loops: 1000000 avg: 11775763 usec
    Summary: random_size_alloc_test passed 3: failed: 0 repeat: 3 loops: 1000000 avg: 6081992 usec
    Summary: fix_align_alloc_test passed: 3 failed: 0 repeat: 3, loops: 1000000 avg: 2003712 usec
    Summary: random_size_align_alloc_test passed: 3 failed: 0 repeat: 3 loops: 1000000 avg: 2895689 usec
    Summary: align_shift_alloc_test passed: 0 failed: 3 repeat: 3 loops: 1000000 avg: 573 usec
    Summary: pcpu_alloc_test passed: 3 failed: 0 repeat: 3 loops: 1000000 avg: 95802 usec
    All test took CPU0=192945605995 cycles

    The align_shift_alloc_test is expected to be failed.

    Stressing:
    In order to stress the vmalloc subsystem we run all available test cases
    on all available CPUs simultaneously. In order to prevent constant behaviour
    pattern, the test cases array is shuffled by default to randomize the order
    of test execution.

    For example if we want to run all tests(default), use all online CPUs(default)
    with shuffled order(default) and to repeat each test 30 times. The command
    would be like:

    modprobe vmalloc_test test_repeat_count=30

    Expected results are the system is alive, there are no any BUG_ONs or Kernel
    Panics the tests are completed, no memory leaks.

    [urezki@gmail.com: fix 32-bit builds]
    Link: http://lkml.kernel.org/r/20190106214839.ffvjvmrn52uqog7k@pc636
    [urezki@gmail.com: make CONFIG_TEST_VMALLOC depend on CONFIG_MMU]
    Link: http://lkml.kernel.org/r/20190219085441.s6bg2gpy4esny5vw@pc636
    Link: http://lkml.kernel.org/r/20190103142108.20744-3-urezki@gmail.com
    Signed-off-by: Uladzislau Rezki (Sony)
    Cc: Kees Cook
    Cc: Matthew Wilcox
    Cc: Michal Hocko
    Cc: Oleksiy Avramchenko
    Cc: Shuah Khan
    Cc: Thomas Gleixner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Uladzislau Rezki (Sony)