-
Notifications
You must be signed in to change notification settings - Fork 10.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
perf(gatsby): drop severe scaling regression caused by analytics #24709
Conversation
Regression introduced in #22851 The problem seems to be that these calls to `v8.serialize` trigger the gc to start a full hold-the-world mark-and-sweep step sooner. In a benchmark of 150k files, the step would trigger almost always after between 100k and 110k queries had run, and it would pause the process for 60+ seconds. Example benchmark results from before and after that PR: ``` info bootstrap finished - 86.758 s success Building production JavaScript and CSS bundles - 9.404s success run queries - 205.676s - 150002/150002 729.31/s success Building static HTML for pages - 142.800s - 150002/150002 1050.44/s info Done building in 451.33 sec ``` ``` info bootstrap finished - 85.933 s success Building production JavaScript and CSS bundles - 8.335s success run queries - 84.795s - 150002/150002 1769.00/s success Building static HTML for pages - 141.000s - 150002/150002 1063.84/s info Done building in 320.158 sec ``` This is very consistent behavior. We looked at the change and agreed that the best was to just drop this measurement since it was for the sake of analytics and a non-vital metric to record. We'd rather have the perf than the metric. Numbers for the fix, same benchmark, first on current master and then on this PR: ``` info bootstrap finished - 79.788s success Building production JavaScript and CSS bundles - 9.635s success run queries - 201.542s - 150002/150002 744.27/s success Building static HTML for pages - 141.535s - 150002/150002 1059.82/s info Done building in 440.766 sec ``` ``` info bootstrap finished - 80.751s success Building production JavaScript and CSS bundles - 9.570s success run queries - 87.162s - 150002/150002 1720.95/s success Building static HTML for pages - 142.609s - 150002/150002 1051.84/s info Done building in 319.151 sec ``` nice!
eeb1826
to
7c8ce64
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
While this is already a good fix, I think I need to dig a little deeper. According to old benchmark dumps this is what master on February 12th did for this benchmark:
So it seems we could still pump 50% faster. Hopefully that regression is also fairly easy to find. |
Went to repo tag
And repo at tag
Hard to tell what the regression might have been or how I was able to get the perf mentioned above. Could be a plugin that wasn't bumped or ... I'm not sure. But I'm pretty sure it's not worth chasing this kinda of delta over such a long timespan (over 3 months) so let's look forward. |
) * perf(gatsby): drop severe scaling regression caused by analytics Regression introduced in #22851 The problem seems to be that these calls to `v8.serialize` trigger the gc to start a full hold-the-world mark-and-sweep step sooner. In a benchmark of 150k files, the step would trigger almost always after between 100k and 110k queries had run, and it would pause the process for 60+ seconds. Example benchmark results from before and after that PR: ``` info bootstrap finished - 86.758 s success Building production JavaScript and CSS bundles - 9.404s success run queries - 205.676s - 150002/150002 729.31/s success Building static HTML for pages - 142.800s - 150002/150002 1050.44/s info Done building in 451.33 sec ``` ``` info bootstrap finished - 85.933 s success Building production JavaScript and CSS bundles - 8.335s success run queries - 84.795s - 150002/150002 1769.00/s success Building static HTML for pages - 141.000s - 150002/150002 1063.84/s info Done building in 320.158 sec ``` This is very consistent behavior. We looked at the change and agreed that the best was to just drop this measurement since it was for the sake of analytics and a non-vital metric to record. We'd rather have the perf than the metric. Numbers for the fix, same benchmark, first on current master and then on this PR: ``` info bootstrap finished - 79.788s success Building production JavaScript and CSS bundles - 9.635s success run queries - 201.542s - 150002/150002 744.27/s success Building static HTML for pages - 141.535s - 150002/150002 1059.82/s info Done building in 440.766 sec ``` ``` info bootstrap finished - 80.751s success Building production JavaScript and CSS bundles - 9.570s success run queries - 87.162s - 150002/150002 1720.95/s success Building static HTML for pages - 142.609s - 150002/150002 1051.84/s info Done building in 319.151 sec ``` nice! * And drop the import
Regression introduced in #22851
The problem seems to be that these calls to
v8.serialize
trigger the gc to start a full hold-the-world mark-and-sweep step sooner. In a benchmark of 150k pages, the step would trigger almost always after between 100k and 110k queries had run, and it would pause the process for 60+ seconds.Example benchmark results from before and after that PR:
This is very consistent behavior. We looked at the change and agreed that the best was to just drop this measurement since it was for the sake of analytics and a non-vital metric to record. We'd rather have the perf than the metric.
Numbers for the fix, same benchmark, first on current master and then on this PR:
nice!