• Jason Madden's avatar
    Introduce GEVENT_TRACK_GREENLET_TREE to disable greenlet tree features · 25ff8d4a
    Jason Madden authored
    As a performance optimization for applications where spawning
    greenlets is critical. Plus some other optimizations to speed up
    spawning in the general case.
    
    CPython 3.6 with 1.2.2 vs these changes with tracking disabled:
    
    | Benchmark              | 36_122_bench_spawn | 36config_bench_spawn_tree_off |
    +------------------------+--------------------+-------------------------------+
    | eventlet spawn         | 12.6 us            | 12.2 us: 1.04x faster (-4%)   |
    | eventlet sleep         | 5.22 us            | 4.97 us: 1.05x faster (-5%)   |
    | gevent spawn           | 4.27 us            | 5.06 us: 1.19x slower (+19%)  |
    | gevent sleep           | 2.63 us            | 1.25 us: 2.11x faster (-53%)  |
    | geventpool spawn       | 9.00 us            | 8.31 us: 1.08x faster (-8%)   |
    | geventpool sleep       | 4.82 us            | 2.83 us: 1.70x faster (-41%)  |
    | geventraw spawn        | 2.51 us            | 2.81 us: 1.12x slower (+12%)  |
    | geventraw sleep        | 649 ns             | 679 ns: 1.05x slower (+5%)    |
    | geventpool join        | 3.47 us            | 1.42 us: 2.44x faster (-59%)  |
    | geventpool spawn kwarg | 11.0 us            | 8.95 us: 1.23x faster (-19%)  |
    | geventraw spawn kwarg  | 3.87 us            | 4.20 us: 1.08x slower (+8%)   |
    
    The differences compared to master are hard to quantify because the
    standard deviation ends up being more than 10% of the mean in many
    cases---and about a 10% improvement is what we typically see, so it
    goes back and forth.
    25ff8d4a
test__util.py 5.51 KB