Skip to content
Snippets Groups Projects
  • Nadav Har'El's avatar
    b255c259
    Test: cpu load balancing test · b255c259
    Nadav Har'El authored
    This is a test for the effectiveness of our scheduler's load balancing while
    running several threads on several cpus.
    
    A full description of the test and its expected results is included in
    comments in the beginning of the code. but briefly, the test runs multiple
    concurrent busy-loop threads, and an additional "intermittent" thread (one that
    busy-loops for a short duration, and then sleeps), and expects that all busy
    threads will get their fair share of the CPU, and the intermittent thread
    won't bother them too much.
    
    Testing the current code, this tests demonstrates the following problems
    we have:
    
    1. Two busy-loop threads on 2 cpus are 5%-10% slower than just one.
       This is not kernel overhead (profiling show 100% of the time in the
       test's inner loop), and I see exactly the slowdown when running this
       test on the Linux host, so it might be related to the host's multitasking?
       For now, let's not worry about that.
    
    2. Much more worrying is that the intermittent thread sometimes (in about half
       the tests) causes us to only fully use one CPU, and of course get bad
       performance.
    
    3. In many of the tests involving more than 2 threads (2 threads +
       intermittent, or 4 threads) load balancing wasn't fair and some
       threads got more CPU than the others.
    
    Later I'll send patches to fix issues 2 and 3, which appear to happen because
    the load balancer thread doesn't run as often as it should, because of vruntime
    problems.
    b255c259
    History
    Test: cpu load balancing test
    Nadav Har'El authored
    This is a test for the effectiveness of our scheduler's load balancing while
    running several threads on several cpus.
    
    A full description of the test and its expected results is included in
    comments in the beginning of the code. but briefly, the test runs multiple
    concurrent busy-loop threads, and an additional "intermittent" thread (one that
    busy-loops for a short duration, and then sleeps), and expects that all busy
    threads will get their fair share of the CPU, and the intermittent thread
    won't bother them too much.
    
    Testing the current code, this tests demonstrates the following problems
    we have:
    
    1. Two busy-loop threads on 2 cpus are 5%-10% slower than just one.
       This is not kernel overhead (profiling show 100% of the time in the
       test's inner loop), and I see exactly the slowdown when running this
       test on the Linux host, so it might be related to the host's multitasking?
       For now, let's not worry about that.
    
    2. Much more worrying is that the intermittent thread sometimes (in about half
       the tests) causes us to only fully use one CPU, and of course get bad
       performance.
    
    3. In many of the tests involving more than 2 threads (2 threads +
       intermittent, or 4 threads) load balancing wasn't fair and some
       threads got more CPU than the others.
    
    Later I'll send patches to fix issues 2 and 3, which appear to happen because
    the load balancer thread doesn't run as often as it should, because of vruntime
    problems.