• Alexander Duyck's avatar
    driver core: Rewrite test_async_driver_probe to cover serialization and NUMA affinity · 57ea974f
    Alexander Duyck authored
    The current async_probe test code is only testing one device allocated
    prior to driver load and only loading one device afterwards. Instead of
    doing things this way it makes much more sense to load one device per CPU
    in order to actually stress the async infrastructure. By doing this we
    should see delays significantly increase in the event of devices being
    serialized.
    
    In addition I have updated the test to verify that we are trying to place
    the work on the correct NUMA node when we are running in async mode. By
    doing this we can verify the best possible outcome for device and driver
    load times.
    
    I have added a timeout value that is used to disable the sleep and instead
    cause the probe routine to report an error indicating it timed out. By
    doing this we limit the maximum runtime for the test to 20 seconds or less.
    
    The last major change in this set is that I have gone through and tuned it
    for handling the massive number of possible events that will be scheduled.
    Instead of reporting the sleep for each individual device it is moved to
    only being displayed if we enable debugging.
    
    With this patch applied below are what a failing test and a passing test
    should look like. I elided a few hundred lines in the failing test that
    were duplicated since the system I was testing on had a massive number of
    CPU cores:
    
    -- Failing --
    [  243.524697] test_async_driver_probe: registering first set of asynchronous devices...
    [  243.535625] test_async_driver_probe: registering asynchronous driver...
    [  243.543038] test_async_driver_probe: registration took 0 msecs
    [  243.549559] test_async_driver_probe: registering second set of asynchronous devices...
    [  243.568350] platform test_async_driver.447: registration took 9 msecs
    [  243.575544] test_async_driver_probe: registering first synchronous device...
    [  243.583454] test_async_driver_probe: registering synchronous driver...
    [  248.825920] test_async_driver_probe: registration took 5235 msecs
    [  248.825922] test_async_driver_probe: registering second synchronous device...
    [  248.825928] test_async_driver test_async_driver.443: NUMA node mismatch 3 != 1
    [  248.825932] test_async_driver test_async_driver.445: NUMA node mismatch 3 != 1
    [  248.825935] test_async_driver test_async_driver.446: NUMA node mismatch 3 != 1
    [  248.825939] test_async_driver test_async_driver.440: NUMA node mismatch 3 != 1
    [  248.825943] test_async_driver test_async_driver.441: NUMA node mismatch 3 != 1
    ...
    [  248.827150] test_async_driver test_async_driver.229: NUMA node mismatch 0 != 1
    [  248.827158] test_async_driver test_async_driver.228: NUMA node mismatch 0 != 1
    [  248.827220] test_async_driver test_async_driver.281: NUMA node mismatch 2 != 1
    [  248.827229] test_async_driver test_async_driver.282: NUMA node mismatch 2 != 1
    [  248.827240] test_async_driver test_async_driver.280: NUMA node mismatch 2 != 1
    [  253.945834] test_async_driver test_async_driver.1: NUMA node mismatch 0 != 1
    [  253.945878] test_sync_driver test_sync_driver.1: registration took 5119 msecs
    [  253.961693] test_async_driver_probe: async events still pending, forcing timeout and synchronize
    [  259.065839] test_async_driver test_async_driver.2: NUMA node mismatch 0 != 1
    [  259.073786] test_async_driver test_async_driver.3: async probe took too long
    [  259.081669] test_async_driver test_async_driver.3: NUMA node mismatch 0 != 1
    [  259.089569] test_async_driver test_async_driver.4: async probe took too long
    [  259.097451] test_async_driver test_async_driver.4: NUMA node mismatch 0 != 1
    [  259.105338] test_async_driver test_async_driver.5: async probe took too long
    [  259.113204] test_async_driver test_async_driver.5: NUMA node mismatch 0 != 1
    [  259.121089] test_async_driver test_async_driver.6: async probe took too long
    [  259.128961] test_async_driver test_async_driver.6: NUMA node mismatch 0 != 1
    [  259.136850] test_async_driver test_async_driver.7: async probe took too long
    ...
    [  262.124062] test_async_driver test_async_driver.221: async probe took too long
    [  262.132130] test_async_driver test_async_driver.221: NUMA node mismatch 3 != 1
    [  262.140206] test_async_driver test_async_driver.222: async probe took too long
    [  262.148277] test_async_driver test_async_driver.222: NUMA node mismatch 3 != 1
    [  262.156351] test_async_driver test_async_driver.223: async probe took too long
    [  262.164419] test_async_driver test_async_driver.223: NUMA node mismatch 3 != 1
    [  262.172630] test_async_driver_probe: Test failed with 222 errors and 336 warnings
    
    -- Passing --
    [  105.419247] test_async_driver_probe: registering first set of asynchronous devices...
    [  105.432040] test_async_driver_probe: registering asynchronous driver...
    [  105.439718] test_async_driver_probe: registration took 0 msecs
    [  105.446239] test_async_driver_probe: registering second set of asynchronous devices...
    [  105.477986] platform test_async_driver.447: registration took 22 msecs
    [  105.485276] test_async_driver_probe: registering first synchronous device...
    [  105.493169] test_async_driver_probe: registering synchronous driver...
    [  110.597981] test_async_driver_probe: registration took 5097 msecs
    [  110.604806] test_async_driver_probe: registering second synchronous device...
    [  115.707490] test_sync_driver test_sync_driver.1: registration took 5094 msecs
    [  115.715478] test_async_driver_probe: completed successfully
    Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    57ea974f
test_async_driver_probe.c 7.68 KB