1. 03 Mar, 2018 3 commits
  2. 02 Mar, 2018 6 commits
  3. 28 Feb, 2018 2 commits
  4. 27 Feb, 2018 4 commits
    • Jason Madden's avatar
      Merge pull request #1123 from gevent/locals-debug · d56054cf
      Jason Madden authored
      Add a GreenletTree for more organized, clearer output of greenlets
      d56054cf
    • Jason Madden's avatar
      Add a GreenletTree for more organized, clearer output of greenlets · 5d4bdad6
      Jason Madden authored
      It organizes things by the spawning greenlet, if possible.
      
      Example output::
      
      ```
      <greenlet.greenlet object at 0x10753a9b0>
       :    Running:
       :      File "/tmp/t.py", line 38, in <module>
       :        print("\n".join(format_run_info()))
       :      File "//src/gevent/util.py", line 99, in format_run_info
       :        _format_greenlet_info(lines)
       :      File "//src/gevent/util.py", line 132, in _format_greenlet_info
       :        lines.extend(tree.format_lines(details=True))
       :      File "//src/gevent/util.py", line 265, in format_lines
       :        for l in self._render(tree)]
       :      File "/-main/src/gevent/util.py", line 310, in _render
       :        self.__render_tb(tree, 'Running:', self.greenlet.gr_frame)
       :      File "//src/gevent/util.py", line 281, in __render_tb
       :        tb = ''.join(traceback.format_stack(frame))
       :    Greenlet Locals:
       :      Local <type 'gevent._local.local'> at 0x10759cec0
       :        {'foo': 42}
       +--- <Greenlet "Greenlet-0" at 0x107405cb0: _run>; finished with value <Greenlet "Greenlet-4" at 0x10
       :          Parent: <Hub at 0x10753a550 select default pending=0 ref=0>
       :          Spawned at:
       :            File "/tmp/t.py", line 1, in <module>
       :              from gevent.util import GreenletTree
       |    +--- <Greenlet "Greenlet-4" at 0x10780b260: _run>; finished
       :                Parent: <Hub at 0x10753a550 select default pending=0 ref=0>
       :                Spawned at:
       :                  File "/tmp/t.py", line 1, in <module>
       :                    from gevent.util import GreenletTree
       :                  File "/tmp/t.py", line 12, in t2
       :                    def t2():
       +--- <Hub at 0x10753a550 select default pending=0 ref=0>
       :          Parent: <greenlet.greenlet object at 0x10753a9b0>
       :          Running:
       :            File "/Users/jmadden/Projects/GithubSources/gevent-main/src/gevent/hub.py", line 673, in run
       :              loop.run()
       +--- <Greenlet "Greenlet-1" at 0x10780b368: _run>; finished with value <Greenlet "Greenlet-5" at 0x10
       :          Parent: <Hub at 0x10753a550 select default pending=0 ref=0>
       :          Spawned at:
       :            File "/tmp/t.py", line 1, in <module>
       :              from gevent.util import GreenletTree
       |    +--- <Greenlet "Greenlet-5" at 0x10780b578: _run>; finished
       :                Parent: <Hub at 0x10753a550 select default pending=0 ref=0>
       :                Spawned at:
       :                  File "/tmp/t.py", line 1, in <module>
       :                    from gevent.util import GreenletTree
       :                  File "/tmp/t.py", line 12, in t2
       :                    def t2():
       +--- <Greenlet "Greenlet-2" at 0x10780b470: _run>; finished with value <Greenlet "Greenlet-6" at 0x10
       :          Parent: <Hub at 0x10753a550 select default pending=0 ref=0>
       :          Spawned at:
       :            File "/tmp/t.py", line 1, in <module>
       :              from gevent.util import GreenletTree
       :          Spawn Tree Locals
       :          {'stl': 'STL'}
       |    +--- <Greenlet "Greenlet-6" at 0x10780b680: _run>; finished with value <Greenlet "Greenlet-7" at 0x10
       :                Parent: <Hub at 0x10753a550 select default pending=0 ref=0>
       :                Spawned at:
       :                  File "/tmp/t.py", line 1, in <module>
       :                    from gevent.util import GreenletTree
       :                  File "/tmp/t.py", line 21, in t3
       :                    def t3():
       |         +--- <Greenlet "Greenlet-7" at 0x10780b788: _run>; finished
       :                      Parent: <Hub at 0x10753a550 select default pending=0 ref=0>
       :                      Spawned at:
       :                        File "/tmp/t.py", line 1, in <module>
       :                          from gevent.util import GreenletTree
       :                        File "/tmp/t.py", line 21, in t3
       :                          def t3():
       :                        File "/tmp/t.py", line 12, in t2
       :                          def t2():
       +--- <Greenlet "Greenlet-3" at 0x10780b890: _run>; finished with value [<gevent.util.GreenletTree obj
                  Parent: <Hub at 0x10753a550 select default pending=0 ref=0>
                  Spawned at:
                    File "/tmp/t.py", line 1, in <module>
                      from gevent.util import GreenletTree
      ```
      5d4bdad6
    • Jason Madden's avatar
    • Jason Madden's avatar
  5. 26 Feb, 2018 4 commits
  6. 24 Feb, 2018 10 commits
    • Jason Madden's avatar
      111521eb
    • Jason Madden's avatar
      Merge pull request #1120 from gevent/faster-stack · b3537301
      Jason Madden authored
      Speed up Greenlet creation on CPython
      b3537301
    • Jason Madden's avatar
      Changenotes. · 8d9ed09b
      Jason Madden authored
      8d9ed09b
    • Jason Madden's avatar
      Speed up Greenlet creation on CPython · 760a080c
      Jason Madden authored
      Two ways: store tuples instead of _frame objects and use direct access
      to two of the attributes of the CPython frame objects.
      
      Benchmarks:
      
      +------------------------+-----------------+------------------------------+
      | Benchmark              | spawn_27_master | spawn_27_tuple2              |
      +========================+=================+==============================+
      | eventlet sleep         | 9.12 us         | 8.77 us: 1.04x faster (-4%)  |
      +------------------------+-----------------+------------------------------+
      | gevent spawn           | 14.5 us         | 13.2 us: 1.10x faster (-9%)  |
      +------------------------+-----------------+------------------------------+
      | gevent sleep           | 1.63 us         | 1.86 us: 1.14x slower (+14%) |
      +------------------------+-----------------+------------------------------+
      | geventpool spawn       | 30.4 us         | 23.6 us: 1.29x faster (-22%) |
      +------------------------+-----------------+------------------------------+
      | geventpool sleep       | 4.30 us         | 4.55 us: 1.06x slower (+6%)  |
      +------------------------+-----------------+------------------------------+
      | geventpool join        | 1.70 us         | 1.83 us: 1.08x slower (+8%)  |
      +------------------------+-----------------+------------------------------+
      | gevent spawn kwarg     | 16.5 us         | 13.5 us: 1.22x faster (-18%) |
      +------------------------+-----------------+------------------------------+
      | geventpool spawn kwarg | 30.5 us         | 23.9 us: 1.27x faster (-22%) |
      +------------------------+-----------------+------------------------------+
      
      Not significant (7): eventlet spawn; geventraw spawn; geventraw sleep;
      none spawn; eventlet spawn kwarg; geventraw spawn kwarg; none spawn
      kwarg
      
      +------------------------+-----------------+------------------------------+
      | Benchmark              | spawn_36_master | spawn_36_tuple2              |
      +========================+=================+==============================+
      | gevent spawn           | 13.2 us         | 11.9 us: 1.12x faster (-10%) |
      +------------------------+-----------------+------------------------------+
      | gevent sleep           | 1.71 us         | 1.90 us: 1.11x slower (+11%) |
      +------------------------+-----------------+------------------------------+
      | geventpool spawn       | 19.9 us         | 15.9 us: 1.25x faster (-20%) |
      +------------------------+-----------------+------------------------------+
      | geventpool sleep       | 3.54 us         | 3.75 us: 1.06x slower (+6%)  |
      +------------------------+-----------------+------------------------------+
      | geventpool spawn kwarg | 20.3 us         | 15.9 us: 1.27x faster (-22%) |
      +------------------------+-----------------+------------------------------+
      | geventraw spawn kwarg  | 5.80 us         | 6.10 us: 1.05x slower (+5%)  |
      +------------------------+-----------------+------------------------------+
      
      Not significant (9): eventlet spawn; eventlet sleep; geventraw spawn;
      geventraw sleep; none spawn; geventpool join; eventlet spawn kwarg;
      gevent spawn kwarg; none spawn kwarg
      
      +------------------+-------------------+------------------------------+
      | Benchmark        | spawn_pypy_master | spawn_pypy_tuple2            |
      +==================+===================+==============================+
      | eventlet spawn   | 30.5 us           | 28.9 us: 1.05x faster (-5%)  |
      +------------------+-------------------+------------------------------+
      | eventlet sleep   | 3.39 us           | 3.19 us: 1.06x faster (-6%)  |
      +------------------+-------------------+------------------------------+
      | gevent spawn     | 9.89 us           | 17.2 us: 1.73x slower (+73%) |
      +------------------+-------------------+------------------------------+
      | gevent sleep     | 3.14 us           | 3.99 us: 1.27x slower (+27%) |
      +------------------+-------------------+------------------------------+
      | geventpool spawn | 12.3 us           | 20.1 us: 1.63x slower (+63%) |
      +------------------+-------------------+------------------------------+
      
      Not significant (1): geventpool sleep
      
      +------------------------+---------------+-------------------------------+
      | Benchmark              | spawn_36_13a1 | spawn_36_tuple2               |
      +========================+===============+===============================+
      | eventlet spawn         | 14.0 us       | 13.2 us: 1.06x faster (-6%)   |
      +------------------------+---------------+-------------------------------+
      | gevent spawn           | 4.25 us       | 11.9 us: 2.79x slower (+179%) |
      +------------------------+---------------+-------------------------------+
      | gevent sleep           | 2.78 us       | 1.90 us: 1.46x faster (-32%)  |
      +------------------------+---------------+-------------------------------+
      | geventpool spawn       | 10.4 us       | 15.9 us: 1.52x slower (+52%)  |
      +------------------------+---------------+-------------------------------+
      | geventpool sleep       | 5.52 us       | 3.75 us: 1.47x faster (-32%)  |
      +------------------------+---------------+-------------------------------+
      | geventraw spawn        | 2.56 us       | 5.09 us: 1.99x slower (+99%)  |
      +------------------------+---------------+-------------------------------+
      | geventraw sleep        | 738 ns        | 838 ns: 1.14x slower (+14%)   |
      +------------------------+---------------+-------------------------------+
      | geventpool join        | 3.94 us       | 1.75 us: 2.25x faster (-56%)  |
      +------------------------+---------------+-------------------------------+
      | gevent spawn kwarg     | 5.50 us       | 12.1 us: 2.19x slower (+119%) |
      +------------------------+---------------+-------------------------------+
      | geventpool spawn kwarg | 11.3 us       | 15.9 us: 1.41x slower (+41%)  |
      +------------------------+---------------+-------------------------------+
      | geventraw spawn kwarg  | 3.90 us       | 6.10 us: 1.56x slower (+56%)  |
      +------------------------+---------------+-------------------------------+
      
      Not significant (4): eventlet sleep; none spawn; eventlet spawn kwarg; none spawn kwarg
      
      The eventlet, sleep, join and raw tests serve as controls, so we can see
      that there's up to ~10% variance between most runs anyway.
      
      CPython 3.6 shows the least variance so those 10-20% improvement
      numbers are probably fairly close.
      
      PyPy sadly gets *slower* with this change for reasons that are utterly
      unclear.
      
      Compared to 1.3a1 (last benchmark) we're still up to 2-3x slower.
      
      Creation of a raw greenlet shows 2.66us on CPython 3.6.4 vs the 3.65us
      I reported in #755.
      760a080c
    • Jason Madden's avatar
    • Jason Madden's avatar
      Rework bench_spawn to be perf based for more reliable numbers · d705939b
      Jason Madden authored
      I get this on 3.6.4:
      
      .....................
      eventlet spawn: Mean +- std dev: 12.2 us +- 1.2 us
      .....................
      eventlet sleep: Mean +- std dev: 16.3 us +- 0.8 us
      .....................
      gevent spawn: Mean +- std dev: 13.1 us +- 1.1 us
      .....................
      gevent sleep: Mean +- std dev: 10.4 us +- 0.8 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (2.73 us) is 17% of the mean (16.1 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventpool spawn: Mean +- std dev: 16.1 us +- 2.7 us
      .....................
      geventpool sleep: Mean +- std dev: 11.2 us +- 0.5 us
      .....................
      geventraw spawn: Mean +- std dev: 4.95 us +- 0.42 us
      .....................
      geventraw sleep: Mean +- std dev: 7.34 us +- 0.28 us
      .....................
      none spawn: Mean +- std dev: 1.98 us +- 0.05 us
      .....................
      geventpool join: Mean +- std dev: 6.59 us +- 0.25 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (1.28 us) is 10% of the mean (12.7 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      eventlet spawn kwarg: Mean +- std dev: 12.7 us +- 1.3 us
      .....................
      gevent spawn kwarg: Mean +- std dev: 14.6 us +- 1.2 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (2.81 us) is 17% of the mean (17.0 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventpool spawn kwarg: Mean +- std dev: 17.0 us +- 2.8 us
      .....................
      geventraw spawn kwarg: Mean +- std dev: 6.11 us +- 0.45 us
      .....................
      none spawn kwarg: Mean +- std dev: 2.22 us +- 0.07 us
      
      And this on 2.7.14:
      
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (2.10 us) is 11% of the mean (18.4 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      eventlet spawn: Mean +- std dev: 18.4 us +- 2.1 us
      .....................
      eventlet sleep: Mean +- std dev: 23.1 us +- 0.8 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (4.39 us) is 25% of the mean (17.3 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      gevent spawn: Mean +- std dev: 17.3 us +- 4.4 us
      .....................
      gevent sleep: Mean +- std dev: 10.3 us +- 0.5 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (3.92 us) is 16% of the mean (24.7 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventpool spawn: Mean +- std dev: 24.7 us +- 3.9 us
      .....................
      geventpool sleep: Mean +- std dev: 13.5 us +- 0.9 us
      .....................
      geventraw spawn: Mean +- std dev: 6.91 us +- 0.49 us
      .....................
      geventraw sleep: Mean +- std dev: 8.95 us +- 0.30 us
      .....................
      none spawn: Mean +- std dev: 2.21 us +- 0.04 us
      .....................
      geventpool join: Mean +- std dev: 7.93 us +- 0.28 us
      .....................
      eventlet spawn kwarg: Mean +- std dev: 17.4 us +- 1.3 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (4.11 us) is 27% of the mean (15.1 us)
      * the maximum (24.2 us) is 60% greater than the mean (15.1 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      gevent spawn kwarg: Mean +- std dev: 15.1 us +- 4.1 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (4.74 us) is 18% of the mean (26.8 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventpool spawn kwarg: Mean +- std dev: 26.8 us +- 4.7 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (959 ns) is 12% of the mean (8.00 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventraw spawn kwarg: Mean +- std dev: 8.00 us +- 0.96 us
      .....................
      none spawn kwarg: Mean +- std dev: 2.48 us +- 0.06 us
      
      Partial PyPy results:
      
      .........
      WARNING: the benchmark result may be unstable
      * the standard deviation (5.77 us) is 18% of the mean (32.5 us)
      * the maximum (52.2 us) is 61% greater than the mean (32.5 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      eventlet spawn: Mean +- std dev: 32.5 us +- 5.8 us
      .........
      eventlet sleep: Mean +- std dev: 39.9 us +- 2.4 us
      .........
      WARNING: the benchmark result may be unstable
      * the standard deviation (8.90 us) is 43% of the mean (20.6 us)
      * the minimum (8.50 us) is 59% smaller than the mean (20.6 us)
      * the maximum (41.5 us) is 102% greater than the mean (20.6 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      gevent spawn: Mean +- std dev: 20.6 us +- 8.9 us
      .........
      gevent sleep: Mean +- std dev: 4.20 us +- 0.21 us
      .........
      WARNING: the benchmark result may be unstable
      * the standard deviation (8.52 us) is 50% of the mean (17.2 us)
      * the minimum (7.74 us) is 55% smaller than the mean (17.2 us)
      * the maximum (58.1 us) is 238% greater than the mean (17.2 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventpool spawn: Mean +- std dev: 17.2 us +- 8.5 us
      .........
      WARNING: the benchmark result may be unstable
      * the standard deviation (968 ns) is 18% of the mean (5.26 us)
      * the maximum (10.5 us) is 99% greater than the mean (5.26 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventpool sleep: Mean +- std dev: 5.26 us +- 0.97 us
      ..........
      WARNING: the benchmark result may be unstable
      * the standard deviation (1.45 us) is 52% of the mean (2.80 us)
      * the maximum (5.50 us) is 96% greater than the mean (2.80 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventraw spawn: Mean +- std dev: 2.80 us +- 1.45 us
      .........
      geventraw sleep: Mean +- std dev: 4.24 us +- 0.27 us
      .........
      none spawn: Mean +- std dev: 1.10 us +- 0.06 us
      d705939b
    • Jason Madden's avatar
    • Jason Madden's avatar
      Rework bench_spawn to be perf based for more reliable numbers · 3c3e7450
      Jason Madden authored
      I get this on 3.6.4:
      
      .....................
      eventlet spawn: Mean +- std dev: 12.2 us +- 1.2 us
      .....................
      eventlet sleep: Mean +- std dev: 16.3 us +- 0.8 us
      .....................
      gevent spawn: Mean +- std dev: 13.1 us +- 1.1 us
      .....................
      gevent sleep: Mean +- std dev: 10.4 us +- 0.8 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (2.73 us) is 17% of the mean (16.1 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventpool spawn: Mean +- std dev: 16.1 us +- 2.7 us
      .....................
      geventpool sleep: Mean +- std dev: 11.2 us +- 0.5 us
      .....................
      geventraw spawn: Mean +- std dev: 4.95 us +- 0.42 us
      .....................
      geventraw sleep: Mean +- std dev: 7.34 us +- 0.28 us
      .....................
      none spawn: Mean +- std dev: 1.98 us +- 0.05 us
      .....................
      geventpool join: Mean +- std dev: 6.59 us +- 0.25 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (1.28 us) is 10% of the mean (12.7 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      eventlet spawn kwarg: Mean +- std dev: 12.7 us +- 1.3 us
      .....................
      gevent spawn kwarg: Mean +- std dev: 14.6 us +- 1.2 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (2.81 us) is 17% of the mean (17.0 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventpool spawn kwarg: Mean +- std dev: 17.0 us +- 2.8 us
      .....................
      geventraw spawn kwarg: Mean +- std dev: 6.11 us +- 0.45 us
      .....................
      none spawn kwarg: Mean +- std dev: 2.22 us +- 0.07 us
      
      And this on 2.7.14:
      
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (2.10 us) is 11% of the mean (18.4 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      eventlet spawn: Mean +- std dev: 18.4 us +- 2.1 us
      .....................
      eventlet sleep: Mean +- std dev: 23.1 us +- 0.8 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (4.39 us) is 25% of the mean (17.3 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      gevent spawn: Mean +- std dev: 17.3 us +- 4.4 us
      .....................
      gevent sleep: Mean +- std dev: 10.3 us +- 0.5 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (3.92 us) is 16% of the mean (24.7 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventpool spawn: Mean +- std dev: 24.7 us +- 3.9 us
      .....................
      geventpool sleep: Mean +- std dev: 13.5 us +- 0.9 us
      .....................
      geventraw spawn: Mean +- std dev: 6.91 us +- 0.49 us
      .....................
      geventraw sleep: Mean +- std dev: 8.95 us +- 0.30 us
      .....................
      none spawn: Mean +- std dev: 2.21 us +- 0.04 us
      .....................
      geventpool join: Mean +- std dev: 7.93 us +- 0.28 us
      .....................
      eventlet spawn kwarg: Mean +- std dev: 17.4 us +- 1.3 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (4.11 us) is 27% of the mean (15.1 us)
      * the maximum (24.2 us) is 60% greater than the mean (15.1 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      gevent spawn kwarg: Mean +- std dev: 15.1 us +- 4.1 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (4.74 us) is 18% of the mean (26.8 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventpool spawn kwarg: Mean +- std dev: 26.8 us +- 4.7 us
      .....................
      WARNING: the benchmark result may be unstable
      * the standard deviation (959 ns) is 12% of the mean (8.00 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventraw spawn kwarg: Mean +- std dev: 8.00 us +- 0.96 us
      .....................
      none spawn kwarg: Mean +- std dev: 2.48 us +- 0.06 us
      
      Partial PyPy results:
      
      .........
      WARNING: the benchmark result may be unstable
      * the standard deviation (5.77 us) is 18% of the mean (32.5 us)
      * the maximum (52.2 us) is 61% greater than the mean (32.5 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      eventlet spawn: Mean +- std dev: 32.5 us +- 5.8 us
      .........
      eventlet sleep: Mean +- std dev: 39.9 us +- 2.4 us
      .........
      WARNING: the benchmark result may be unstable
      * the standard deviation (8.90 us) is 43% of the mean (20.6 us)
      * the minimum (8.50 us) is 59% smaller than the mean (20.6 us)
      * the maximum (41.5 us) is 102% greater than the mean (20.6 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      gevent spawn: Mean +- std dev: 20.6 us +- 8.9 us
      .........
      gevent sleep: Mean +- std dev: 4.20 us +- 0.21 us
      .........
      WARNING: the benchmark result may be unstable
      * the standard deviation (8.52 us) is 50% of the mean (17.2 us)
      * the minimum (7.74 us) is 55% smaller than the mean (17.2 us)
      * the maximum (58.1 us) is 238% greater than the mean (17.2 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventpool spawn: Mean +- std dev: 17.2 us +- 8.5 us
      .........
      WARNING: the benchmark result may be unstable
      * the standard deviation (968 ns) is 18% of the mean (5.26 us)
      * the maximum (10.5 us) is 99% greater than the mean (5.26 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventpool sleep: Mean +- std dev: 5.26 us +- 0.97 us
      ..........
      WARNING: the benchmark result may be unstable
      * the standard deviation (1.45 us) is 52% of the mean (2.80 us)
      * the maximum (5.50 us) is 96% greater than the mean (2.80 us)
      
      Try to rerun the benchmark with more runs, values and/or loops.
      Run 'python -m perf system tune' command to reduce the system jitter.
      Use perf stats, perf dump and perf hist to analyze results.
      Use --quiet option to hide these warnings.
      
      geventraw spawn: Mean +- std dev: 2.80 us +- 1.45 us
      .........
      geventraw sleep: Mean +- std dev: 4.24 us +- 0.27 us
      .........
      none spawn: Mean +- std dev: 1.10 us +- 0.06 us
      3c3e7450
    • Jason Madden's avatar
      Merge pull request #1119 from gevent/issue1118 · b84e1bd9
      Jason Madden authored
      Honor PURE_PYTHON at runtime
      b84e1bd9
    • Jason Madden's avatar
  7. 23 Feb, 2018 9 commits
    • Jason Madden's avatar
    • Jason Madden's avatar
      Use new cython on Windows too. · accd9cf6
      Jason Madden authored
      accd9cf6
    • Jason Madden's avatar
      Honor PURE_PYTHON at runtime. · 647918f7
      Jason Madden authored
      Fixes #1118.
      
      Also some speed improvements for semaphores.
      647918f7
    • Jason Madden's avatar
      Merge pull request #1117 from gevent/faster-locals · cfea657f
      Jason Madden authored
      Speed up gevent.local.local more, especially for subclasses (2-3x faster)
      cfea657f
    • Jason Madden's avatar
      Add link to pr #1117. [skip ci] · c6458a80
      Jason Madden authored
      c6458a80
    • Jason Madden's avatar
      Speed of gevent.local.local more, especially for subclasses (2-3x faster) · b1125a79
      Jason Madden authored
      Do this with some cython tricks and some caching of type attributes.
      Cython 0.28 compiles this code to be quite a bit faster than Cython
      0.27 does (the below uses 0.28), but it's still a win on both.
      
      The type caching could potentially be a compatibility issue, but in
      practice I suspect it won't be.
      
      Benchmarks on 3.6:
      
      +--------------------+------------------+-----------------------------+
      | Benchmark          | 3.6              | 3.6 This Branch             |
      +====================+==================+=============================+
      | getattr gevent     | 190 ns           | 158 ns: 1.20x faster (-17%) |
      +--------------------+------------------+-----------------------------+
      | setattr gevent     | 180 ns           | 165 ns: 1.09x faster (-8%)  |
      +--------------------+------------------+-----------------------------+
      | getattr gevent sub | 540 ns           | 175 ns: 3.09x faster (-68%) |
      +--------------------+------------------+-----------------------------+
      | setattr gevent sub | 528 ns           | 179 ns: 2.95x faster (-66%) |
      +--------------------+------------------+-----------------------------+
      | setattr native     | 80.8 ns          | 78.8 ns: 1.03x faster (-2%) |
      +--------------------+------------------+-----------------------------+
      
      Not significant (3): getattr native; getattr native sub; setattr native sub
      
      Benchmarks on 2.7:
      
      +--------------------+------------------+-----------------------------+
      | Benchmark          | local_27_master2 | local_27_tweak2             |
      +====================+==================+=============================+
      | getattr gevent     | 162 ns           | 158 ns: 1.03x faster (-3%)  |
      +--------------------+------------------+-----------------------------+
      | setattr gevent     | 173 ns           | 165 ns: 1.04x faster (-4%)  |
      +--------------------+------------------+-----------------------------+
      | getattr gevent sub | 471 ns           | 181 ns: 2.61x faster (-62%) |
      +--------------------+------------------+-----------------------------+
      | setattr gevent sub | 462 ns           | 190 ns: 2.44x faster (-59%) |
      +--------------------+------------------+-----------------------------+
      | getattr native     | 87.4 ns          | 89.7 ns: 1.03x slower (+3%) |
      +--------------------+------------------+-----------------------------+
      | setattr native     | 133 ns           | 110 ns: 1.20x faster (-17%) |
      +--------------------+------------------+-----------------------------+
      | getattr native sub | 101 ns           | 97.9 ns: 1.03x faster (-3%) |
      +--------------------+------------------+-----------------------------+
      | setattr native sub | 118 ns           | 111 ns: 1.06x faster (-6%)  |
      +--------------------+------------------+-----------------------------+
      
      PyPy unfortunately shows as a little slower, though I'm not sure I
      fully believe that:
      
      +--------------------+-------------------+-----------------------------+
      | Benchmark          | local_pypy_master | local_pypy_tweak2           |
      +====================+===================+=============================+
      | getattr gevent     | 135 ns            | 157 ns: 1.16x slower (+16%) |
      +--------------------+-------------------+-----------------------------+
      | setattr gevent     | 126 ns            | 162 ns: 1.28x slower (+28%) |
      +--------------------+-------------------+-----------------------------+
      | getattr gevent sub | 150 ns            | 175 ns: 1.17x slower (+17%) |
      +--------------------+-------------------+-----------------------------+
      | setattr gevent sub | 153 ns            | 183 ns: 1.20x slower (+20%) |
      +--------------------+-------------------+-----------------------------+
      | getattr native     | 0.18 ns           | 0.19 ns: 1.05x slower (+5%) |
      +--------------------+-------------------+-----------------------------+
      | setattr native     | 0.18 ns           | 0.20 ns: 1.06x slower (+6%) |
      +--------------------+-------------------+-----------------------------+
      | getattr native sub | 0.18 ns           | 0.19 ns: 1.05x slower (+5%) |
      +--------------------+-------------------+-----------------------------+
      | setattr native sub | 0.19 ns           | 0.18 ns: 1.06x faster (-6%) |
      +--------------------+-------------------+-----------------------------+
      b1125a79
    • Jason Madden's avatar
      Add a script for benchmarking gevent.local · d9602bf8
      Jason Madden authored
      [skip ci]
      Current numbers:
      
      local_36_master
      ===============
      
      getattr gevent: Mean +- std dev: 216 ns +- 6 ns
      setattr gevent: Mean +- std dev: 215 ns +- 6 ns
      getattr gevent sub: Mean +- std dev: 600 ns +- 19 ns
      setattr gevent sub: Mean +- std dev: 591 ns +- 38 ns
      getattr native: Mean +- std dev: 56.9 ns +- 4.1 ns
      setattr native: Mean +- std dev: 84.3 ns +- 4.9 ns
      getattr native sub: Mean +- std dev: 65.6 ns +- 5.3 ns
      setattr native sub: Mean +- std dev: 76.2 ns +- 4.6 ns
      
      local_27_master
      ===============
      
      getattr gevent: Mean +- std dev: 177 ns +- 7 ns
      setattr gevent: Mean +- std dev: 192 ns +- 6 ns
      getattr gevent sub: Mean +- std dev: 501 ns +- 10 ns
      setattr gevent sub: Mean +- std dev: 536 ns +- 25 ns
      getattr native: Mean +- std dev: 93.8 ns +- 3.6 ns
      setattr native: Mean +- std dev: 118 ns +- 6 ns
      getattr native sub: Mean +- std dev: 102 ns +- 4 ns
      setattr native sub: Mean +- std dev: 118 ns +- 8 ns
      
      local_pypy_master
      =================
      
      getattr gevent: Mean +- std dev: 135 ns +- 6 ns
      setattr gevent: Mean +- std dev: 126 ns +- 4 ns
      getattr gevent sub: Mean +- std dev: 150 ns +- 4 ns
      setattr gevent sub: Mean +- std dev: 153 ns +- 7 ns
      getattr native: Mean +- std dev: 0.18 ns +- 0.00 ns
      setattr native: Mean +- std dev: 0.18 ns +- 0.01 ns
      getattr native sub: Mean +- std dev: 0.18 ns +- 0.01 ns
      setattr native sub: Mean +- std dev: 0.19 ns +- 0.01 ns
      d9602bf8
    • Jason Madden's avatar
      Merge pull request #1116 from gevent/issue755 · 43e776b6
      Jason Madden authored
      Add Greenlet.minimal_ident, a small, sequential, reusable counter for greenlets
      43e776b6
    • Jason Madden's avatar
      Tweak changenote [skip ci] · 5af60cc7
      Jason Madden authored
      5af60cc7
  8. 22 Feb, 2018 2 commits