Skip to content

gc impact on php-parser #1135

@staabm

Description

@staabm

DISCLAIMER: I am not a GC expert, just trying to make sense of the reports I got


I am analyzing the test-suite of phpstan-src to get an idea whether I find room for performance improvements.

running PHPUnit with Xdebug gcstatistics enabled leads the following report:
php -dxdebug.mode=gcstats -dxdebug.start_with_request=yes vendor/bin/phpunit :

Garbage Collection Report
version: 1
creator: xdebug 3.4.7 (PHP 8.3.28)

Collected | Efficiency% | Duration | Memory Before | Memory After | Reduction% | Function
----------+-------------+----------+---------------+--------------+------------+---------
        0 |      0.00 % |  1.11 ms |      31261120 |     31284056 |    -0.07 % | PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedDirectorySourceLocatorFactory::createCachedDirectorySourceLocator
        0 |      0.00 % |  1.91 ms |      58138744 |     58148144 |    -0.02 % | PHPStan\Reflection\SignatureMap\FunctionSignatureMapProvider::getSignatureMap
        0 |      0.00 % |  2.54 ms |      66966824 |     66977464 |    -0.02 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1398-1400}
        0 |      0.00 % |  4.09 ms |      87792664 |     87803568 |    -0.01 % | PHPStan\Reflection\SignatureMap\FunctionSignatureMapProvider::getSignatureMap
       14 |      0.14 % |  3.58 ms |     101602616 |    101615144 |    -0.01 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2658-2660}
        0 |      0.00 % |  7.11 ms |     124880712 |    124901128 |    -0.02 % | PhpParser\Parser\Php8::handleBuiltinTypes
        0 |      0.00 % |  5.08 ms |     146281096 |    146300760 |    -0.01 % | PhpParser\Parser\Php8::doParse
       48 |      0.48 % |  5.37 ms |     163682728 |    163702432 |    -0.01 % | PHPStan\Type\TypeTraverser::map
        7 |      0.07 % | 11.03 ms |     186223576 |    186246440 |    -0.01 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2847-2849}
       12 |      0.12 % | 14.13 ms |     217225432 |    217255464 |    -0.01 % | PHPStan\Analyser\Generator\ExprHandler\EqualHandler::resolveEqualSpecifiedTypes
       23 |      0.23 % | 21.72 ms |     249713040 |    249805248 |    -0.04 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1341-1343}
      126 |      1.26 % | 15.62 ms |     307721632 |    307636032 |     0.03 % | PHPStan\Reflection\SignatureMap\FunctionSignatureMapProvider::getSignatureMap
        7 |      0.07 % | 15.57 ms |     339258168 |    339274264 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2623-2625}
       60 |      0.60 % | 26.40 ms |     369757136 |    369747592 |     0.00 % | PHPStan\BetterReflection\Reflection\ReflectionMethod::createParameters
       27 |      0.27 % | 15.92 ms |     402696952 |    402732640 |    -0.01 % | PhpParser\Parser\Php8::doParse
       80 |      0.80 % | 19.40 ms |     438817400 |    438867384 |    -0.01 % | PhpParser\NodeVisitor\CommentAnnotatingVisitor::enterNode
       93 |      0.93 % | 14.10 ms |     468324896 |    468362600 |    -0.01 % | PhpParser\Node\Scalar\String_::fromString
        0 |      0.00 % | 38.08 ms |     525947344 |    525988328 |    -0.01 % | Nette\Neon\Parser::parseValue
       42 |      0.42 % | 23.13 ms |     591077968 |    591182496 |    -0.02 % | PHPUnit\Util\Reflection::filterAndSortMethods
        7 |      0.07 % | 26.91 ms |     647155592 |    647173456 |    -0.00 % | PHPStan\Type\FileTypeMapper::PHPStan\Type\{closure:/Users/m.staab/dvl/phpstan-src/src/Type/FileTypeMapper.php:542-561}
      584 |      5.84 % | 20.73 ms |     696348264 |    696362680 |    -0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
     1251 |     12.51 % | 27.26 ms |     746088520 |    745029336 |     0.14 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1563-1565}
      466 |      4.66 % | 37.13 ms |     761398824 |    761550040 |    -0.02 % | PhpParser\Parser\Php8::doParse
      321 |      3.21 % | 36.39 ms |     800271368 |    800250760 |     0.00 % | PhpParser\NameContext::getResolvedName
      601 |      6.01 % | 44.83 ms |     823784768 |    823826992 |    -0.01 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1680-1682}
      234 |      2.34 % | 42.38 ms |     864254376 |    864193584 |     0.01 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1581-1583}
     6817 |     68.17 % | 64.35 ms |     887450552 |    883616832 |     0.43 % | PhpParser\Lexer\Emulative::postprocessTokens
       89 |      0.89 % | 37.16 ms |     902004384 |    902210704 |    -0.02 % | PhpParser\Lexer\Emulative::postprocessTokens
      260 |      2.60 % | 36.90 ms |     919877272 |    920089704 |    -0.02 % | PhpParser\Lexer\Emulative::postprocessTokens
      521 |      5.21 % | 41.01 ms |     927763224 |    927749312 |     0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
      832 |      8.32 % | 74.45 ms |     937045848 |    936009696 |     0.11 % | PhpParser\Lexer\Emulative::postprocessTokens
      809 |      8.09 % | 49.82 ms |     953042336 |    953004248 |     0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
      135 |      1.35 % | 45.35 ms |     957585384 |    957612008 |    -0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
      635 |      6.35 % | 90.20 ms |     955242176 |    955171224 |     0.01 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2623-2625}
     1542 |     15.42 % | 91.02 ms |     952283840 |    951540616 |     0.08 % | PHPStan\Type\IsSuperTypeOfResult::createNo
        5 |      0.05 % | 43.78 ms |     951981416 |    952047616 |    -0.01 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2623-2625}
      313 |      3.13 % | 48.40 ms |     955007880 |    955001280 |     0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
       28 |      0.28 % | 47.79 ms |     962517304 |    962653536 |    -0.01 % | PHPStan\Analyser\MutatingScope::enterFunctionLike
      468 |      4.68 % | 47.05 ms |     976685600 |    976622240 |     0.01 % | PhpParser\Lexer\Emulative::postprocessTokens
        0 |      0.00 % | 45.75 ms |     993574264 |    993575880 |    -0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
        0 |      0.00 % |  1.86 ms |     995479112 |    995479112 |     0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1344-1346}
        0 |      0.00 % |  2.26 ms |    1005974240 |   1005974240 |     0.00 % | PhpParser\Parser\Php8::doParse
        0 |      0.00 % |  3.49 ms |    1012022088 |   1012022088 |     0.00 % | PhpParser\NodeVisitor\CommentAnnotatingVisitor::__construct
        0 |      0.00 % | 14.71 ms |    1015074080 |   1015074080 |     0.00 % | PHPStan\Parser\RichParser::getLinesToIgnore
        0 |      0.00 % | 66.25 ms |    1015362784 |   1015363648 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2697-2700}
       26 |      0.26 % | 28.25 ms |    1035944264 |   1036031784 |    -0.01 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1398-1400}
      713 |      7.13 % | 69.32 ms |    1040542808 |   1040682072 |    -0.01 % | PHPStan\Type\FileTypeMapper::createResolvedPhpDocBlock
       27 |      0.27 % | 64.72 ms |    1067056896 |   1067085040 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2433-2435}
      174 |      1.74 % | 65.63 ms |    1085963040 |   1085972000 |    -0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
        0 |      0.00 % | 53.37 ms |    1106343768 |   1106343880 |    -0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
        0 |      0.00 % | 59.29 ms |    1119144888 |   1119145640 |    -0.00 % | PHPStan\Type\FileTypeMapper::processNodes
      912 |      9.12 % | 60.47 ms |    1078005424 |   1077964544 |     0.00 % | array_map
     2843 |     28.43 % | 114.72 ms |    1057909784 |   1057259216 |     0.06 % | Nette\Neon\Parser::parseValue
      131 |      1.31 % | 70.46 ms |    1057036120 |   1056946752 |     0.01 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2607-2609}
      177 |      1.77 % | 116.51 ms |    1070742656 |   1070991144 |    -0.02 % | PhpParser\NodeTraverser::traverseArray
       28 |      0.28 % | 70.58 ms |    1094100464 |   1094139120 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2623-2625}
       26 |      0.26 % | 21.68 ms |    1119461856 |   1119480944 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1386-1388}
       14 |      0.14 % | 27.52 ms |    1147372488 |   1147413280 |    -0.00 % | array_filter
       93 |      0.93 % | 61.89 ms |    1180381400 |   1180536632 |    -0.01 % | PhpParser\Lexer\Emulative::postprocessTokens
      261 |      2.61 % | 65.89 ms |    1192507528 |   1192490208 |     0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1485-1487}
       15 |      0.15 % | 37.93 ms |    1198123840 |   1198250848 |    -0.01 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2616-2618}
      741 |      7.41 % | 76.69 ms |    1208765064 |   1208718384 |     0.00 % | PhpParser\Node\Name::concat
      655 |      6.55 % | 77.98 ms |    1204701304 |   1204736360 |    -0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
      439 |      4.39 % | 86.17 ms |    1212392984 |   1212324392 |     0.01 % | usort
       77 |      0.77 % | 89.05 ms |    1221050840 |   1221106624 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1344-1346}
      818 |      8.18 % | 92.52 ms |    1225945792 |   1225607864 |     0.03 % | PhpParser\Lexer\Emulative::postprocessTokens
     3443 |     34.43 % | 99.28 ms |    1238565272 |   1236506976 |     0.17 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1919-1923}
     1732 |     17.32 % | 53.58 ms |    1253889408 |   1252822472 |     0.09 % | PhpParser\Lexer\Emulative::postprocessTokens
        0 |      0.00 % |  2.88 ms |    1259373440 |   1259373440 |     0.00 % | PhpParser\Parser\Php8::doParse
        0 |      0.00 % |  4.13 ms |    1270656616 |   1270656616 |     0.00 % | PhpParser\NodeVisitor\CommentAnnotatingVisitor::__construct
        0 |      0.00 % | 20.22 ms |    1273700440 |   1273700440 |     0.00 % | PHPStan\Parser\RichParser::getLinesToIgnore
      717 |      7.17 % | 112.61 ms |    1262294552 |   1262109360 |     0.01 % | PhpParser\Node\Scalar\String_::fromString
     1069 |     10.69 % | 112.75 ms |    1270801728 |   1270033640 |     0.06 % | PhpParser\Lexer\Emulative::postprocessTokens
      354 |      3.54 % | 114.23 ms |    1269485568 |   1269483544 |     0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
       16 |      0.16 % | 118.57 ms |    1279103072 |   1279142448 |    -0.00 % | PhpParser\Node\Name::concat
      136 |      1.36 % | 121.33 ms |    1290291824 |   1290322480 |    -0.00 % | PhpParser\NodeVisitor\NameResolver::resolveName
     1569 |     15.69 % | 59.30 ms |    1263737256 |   1263116808 |     0.05 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2623-2625}
       78 |      0.78 % | 64.06 ms |    1276008200 |   1276021136 |    -0.00 % | PHPStan\PhpDocParser\Lexer\Lexer::tokenize
      725 |      7.25 % | 119.88 ms |    1268805056 |   1268685472 |     0.01 % | PhpParser\Lexer\Emulative::postprocessTokens
      143 |      1.43 % | 63.11 ms |    1277701104 |   1277679568 |     0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
      622 |      6.22 % | 132.67 ms |    1278343648 |   1278201136 |     0.01 % | PhpParser\Node\Name::concat
        0 |      0.00 % | 69.18 ms |    1290221784 |   1290224904 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1338-1340}
        0 |      0.00 % | 23.69 ms |    1302621544 |   1302625040 |    -0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
        0 |      0.00 % | 25.95 ms |    1319012336 |   1319014216 |    -0.00 % | PhpParser\NameContext::resolveAlias
        5 |      0.05 % | 27.67 ms |    1328688824 |   1328691408 |    -0.00 % | PhpParser\Parser\Php8::handleBuiltinTypes
        0 |      0.00 % | 32.69 ms |    1353939408 |   1353946664 |    -0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
        0 |      0.00 % | 35.95 ms |    1383011856 |   1383015240 |    -0.00 % | array_filter
        0 |      0.00 % | 39.57 ms |    1420201688 |   1420207064 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2623-2625}
       40 |      0.40 % | 45.69 ms |    1449848760 |   1449845584 |     0.00 % | PHPStan\PhpDocParser\Lexer\Lexer::tokenize
        0 |      0.00 % | 52.13 ms |    1482158240 |   1482167640 |    -0.00 % | PHPStan\PhpDocParser\Lexer\Lexer::tokenize
        0 |      0.00 % | 56.58 ms |    1515787920 |   1515801944 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1563-1565}
     2488 |     24.88 % | 122.77 ms |    1527448784 |   1526854864 |     0.04 % | PhpParser\Lexer\Emulative::postprocessTokens
       40 |      0.40 % | 178.38 ms |    1555316432 |   1555351200 |    -0.00 % | PHPStan\Analyser\SpecifiedTypes::unionWith
     7976 |     79.76 % | 211.96 ms |    1532432208 |   1530523344 |     0.12 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2607-2609}
      731 |      7.31 % | 103.29 ms |    1530463720 |   1530432440 |     0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
       55 |      0.55 % | 106.75 ms |    1553173360 |   1553257976 |    -0.01 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2607-2609}
      783 |      7.83 % | 108.53 ms |    1572800256 |   1572681400 |     0.01 % | PhpParser\Lexer\Emulative::postprocessTokens
       28 |      0.28 % | 111.46 ms |    1593995424 |   1594072912 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2015-2017}
        0 |      0.00 % | 55.11 ms |    1616838608 |   1616839096 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2629-2631}
        3 |      0.03 % | 65.52 ms |    1639266152 |   1639269336 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2060-2062}
       26 |      0.26 % | 65.22 ms |    1652306168 |   1652319792 |    -0.00 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2847-2849}
        0 |      0.00 % | 62.14 ms |    1672507648 |   1672507760 |    -0.00 % | PhpParser\Node\Scalar\String_::fromString
      263 |      2.63 % | 73.78 ms |    1690781840 |   1690742208 |     0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
      106 |      1.06 % | 76.23 ms |    1728320752 |   1728661200 |    -0.02 % | PhpParser\Lexer\Emulative::postprocessTokens
        0 |      0.00 % | 73.06 ms |    1748172104 |   1748172104 |     0.00 % | PHPStan\Reflection\InitializerExprTypeResolver::getType
      660 |      6.60 % | 115.86 ms |    1770331944 |   1770442320 |    -0.01 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1369-1371}
       25 |      0.25 % | 169.62 ms |    1811498160 |   1811509752 |    -0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
        1 |      0.01 % | 95.62 ms |    1836402872 |   1836402768 |     0.00 % | PHPStan\Analyser\NodeScopeResolver::processExprNode
        7 |      0.07 % | 103.89 ms |    1835324648 |   1835333808 |    -0.00 % | PhpParser\Node\Scalar\String_::fromString
        0 |      0.00 % | 100.01 ms |    1852062592 |   1852062704 |    -0.00 % | PhpParser\Lexer\Emulative::postprocessTokens
        0 |      0.00 % | 103.02 ms |    1875308160 |   1878816992 |    -0.19 % | PHPStan\Reflection\InitializerExprTypeResolver::getType
      382 |      3.82 % | 106.05 ms |    1835811360 |   1835826936 |    -0.00 % | PhpParser\Node\Scalar\Int_::fromString
     6471 |     64.71 % | 257.95 ms |    1869321368 |   1867760808 |     0.08 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:2060-2062}
     1187 |     11.87 % | 254.46 ms |    1848817864 |   1848712320 |     0.01 % | PHPStan\Reflection\InitializerExprContext::fromScope
     2043 |     20.43 % | 106.31 ms |    1859396200 |   1859026144 |     0.02 % | PhpParser\Parser\Php8::PhpParser\Parser\{closure:/Users/m.staab/dvl/phpstan-src/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php:1581-1583}
      301 |      3.01 % | 247.08 ms |    1858789552 |   1858934384 |    -0.01 % | PhpParser\Lexer\Emulative::postprocessTokens
  • it seems a lot of GC is happening in PhpParser\Lexer\Emulative::postprocessTokens
  • maybe there is even more interessting insight in this report, which I don't see yet?
  • I wonder whether this report might help to sparc ideas which can help to improve performance of php-parser consuming projects

thank you

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions