Skip to content
Snippets Groups Projects
  1. Oct 13, 2019
  2. Oct 10, 2019
    • Pierre-Yves David's avatar
      copies: drop the findlimit logic · 069cbbb53cdf
      Pierre-Yves David authored
      We don't use the limit anymore so we should stop computing that limit.
      
      I did not bother measuring the potential performance gain. I am assuming that
      not running any code will be faster that doing some computation and not using
      the result.
      069cbbb53cdf
    • Pierre-Yves David's avatar
      pathcopies: give up any optimization based on `introrev` · c16fe77e340a
      Pierre-Yves David authored
      Between 8a0136f69027 and d98fb3f42f33, we sped up the search for the
      introduction revision during path copies. However, further checking show that
      finding the introduction revision is still expensive and that we are better off
      without it. So we simply drop it and only rely on the linkrev optimisation.
      
      I ran `perfpathcopies` on 6989 pair of revision in the pypy
      repository (`hg perfhelper-pathcopies`. The result is massively in favor of
      dropping this condition. The result of the copy tracing are unchanged.
      
      Attempt to use a smaller changes preserving linkrev usage were unsuccessful, it
      can return wrong result. The following changesets broke test-mv-cp-st-diff.t
      
          -        if not f.isintroducedafter(limit):
          +        if limit >= 0 and f.linkrev() < limit:
                       return None
      
      
      Here are various numbers (before this changeset/after this changesets)
      
                  source       destination  before      after    saved-time  ratio
      worth cases e66f24650daf 695dfb0f493b 1.062843 1.246369 -0.183526 1.172675
                  c979853a3b6a 8d60fe293e79 1.036985 1.196414 -0.159429 1.153743
                  22349fa2fc33 fbb1c9fd86c0 0.879926 1.038682 -0.158756 1.180420
                  682b98f3e672 a4878080a536 0.909952 1.063801 -0.153849 1.169074
                  5adabc9b9848 920958a93997 0.993622 1.147452 -0.153830 1.154817
      worse  1%   dbfbfcf077e9 aea8f2fd3593 1.016595 1.082999 -0.066404 1.065320
      worse  5%   c95f1ced15f2 7d29d5e39734 0.453694 0.471156 -0.017462 1.038488
      worse 10%   3e144ed1d5b7 2aef0e942480 0.035140 0.037535 -0.002395 1.068156
      worse 25%   321fc60db035 801748ba582a 0.009267 0.009325 -0.000058 1.006259
      median      2088ce763fc2 e6991321d78b 0.000665 0.000651 0.000014 0.978947
      best 25%    915631a97de6 385b31354be6 0.040743 0.040363 0.000380 0.990673
      best 10%    ad495c36a765 19c10384d3e7 0.431658 0.411490 0.020168 0.953278
      best  5%    d13ae7d283ae 813c99f810ac 1.141404 1.075346 0.066058 0.942126
      best  1%    81593cb4a496 99ae11866969 1.833297 0.063823 1.769474 0.034813
      best cases  c3b14617fbd7 743a0fcaa4eb 1101.811740 2.735970 1099.075770 0.002483
                  c3b14617fbd7 9ba6ab77fd29 1116.753953 2.800729 1113.953224 0.002508
                  058b99d6e81f 57e249b7a3ea 1246.128485 3.042762 1243.085723 0.002442
                  9a8c361aab49 0354a250d371 1253.111894 3.085796 1250.026098 0.002463
                  442dbbc53c68 3ec1002a818c 1261.786294 3.138607 1258.647687 0.002487
      
      
      As one can see, the average case is not really impacted. However, the worth case
      we get after this changeset are much better than the one we had before it. We
      have 30 pairs where improvements are above 10 minutes.
      
      This reflect in the combined time for all pairs
      before: 26256s
      after:   1300s (-95%)
      
      If we remove these pathological 30 cases, we still see a significant improvements:
      before:  1631s
      after:   1245s (-24%)
      c16fe77e340a
  3. Oct 08, 2019
  4. Oct 13, 2019
  5. Oct 12, 2019
  6. Oct 04, 2019
  7. Oct 06, 2019
  8. Sep 15, 2019
  9. Sep 08, 2019
    • Yuya Nishihara's avatar
      rust-cpython: move $leaked struct out of macro · 5cb8867c9e2b
      Yuya Nishihara authored
      It wasn't easy to hack the $leaked struct since errors in macro would
      generate lots of compile errors. Let's make it a plain struct so we can
      easily extend it.
      
      PyLeakedRef keeps a more generic PyObject instead of the $name struct
      since it no longer has to call any specific methods implemented by
      the $name class. $leaked parameter in py_shared_iterator!() is kept
      for future change.
      5cb8867c9e2b
  10. Sep 15, 2019
  11. Sep 16, 2019
    • Yuya Nishihara's avatar
      rust-cpython: mark PySharedState as Sync so &'PySharedState can be Send · a1908eb08342
      Yuya Nishihara authored
      The goal is to store &'static PySharedState in $leaked struct, which allows
      us to move the $leaked struct out of the macro. Currently, it depends on
      inner.$data_member(py), which can't be generalized.
      
      PySharedState is Sync because any mutation or read operation is synchronized
      by the Python GIL, py: Python<'a>, which should guarantee that &'PySharedState
      can be sent to another thread.
      a1908eb08342
Loading