Page MenuHomePhabricator

Reduce memory usage
Open, Needs TriagePublic

Description

Related to T203651. Until now, no particular effort was put into keeping the mem usage low. Should investigate which options are available. One might be using something other than Set/SplObjectStorage for links (e.g. plain array? custom hashmap?)

Details

Related Changes in Gerrit:
SubjectAuthorRepoBranchLines +/-
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+5 -5
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+88 -96
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+88 -26
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+76 -61
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+31 -81
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+13 -12
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+48 -26
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+52 -15
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+7 -9
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+56 -59
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+131 -114
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+27 -52
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+40 -62
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+171 -168
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+14 -14
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+49 -53
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+49 -56
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+124 -157
Daimona Eaytoymediawiki/tools/phan/SecurityCheckPluginmaster+10 K -124
Show related patches Customize query in gerrit

Event Timeline

FTR, I had tried generating a memory profile a few months ago. From what I remember, the tools I tried (including https://github.com/BitOne/php-meminfo) would die due to the amount of stuff in memory, unless running on a smaller codebase (but then the results aren't as useful). Another option to explore might be https://github.com/arnaud-lb/php-memory-profiler.

Today I submitted a chain of patches that make some of the most commonly used value objects immutable. This has a few advantages:

  • Code is less prone to surprising bugs
  • Reduces the need to deep-clone objects all the time
  • Allows us to use singletons to represent the "empty" object of that type (for whatever "empty" means in the context of the type)

The chain currently consists of: r1078083, r1078091, r1078092, r1078093, r1078094, r1078095, r1078096, r1078097, r1078109, r1078112, and r1078113. I've tested patch set 4 of r1078113 on MediaWiki core and compared the results with taint-check master. Memory usage wents from 2844MB to 2567MB (-277MB); CPU time also decreased slightly from 2m52s to 2m46s. There's surely more cleanup to do, but the results are quite satisfying.

Change #1078083 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Make MethodLinks immutable

https://gerrit.wikimedia.org/r/1078083

Change #1078091 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Remove most mutation methods from Taintedness

https://gerrit.wikimedia.org/r/1078091

Change #1078092 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Drop Taintedness::mergeWith

https://gerrit.wikimedia.org/r/1078092

Change #1078093 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Introduce Taintedness::safeSingleton()

https://gerrit.wikimedia.org/r/1078093

Change #1078094 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Make FunctionTaintedness immutable

https://gerrit.wikimedia.org/r/1078094

Change #1078095 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Use Taintedness singletons whenever possible

https://gerrit.wikimedia.org/r/1078095

Change #1078096 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Combine FunctionTaintedness flag setters

https://gerrit.wikimedia.org/r/1078096

Change #1078097 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Drop unnecessary `clone`s

https://gerrit.wikimedia.org/r/1078097

Change #1078109 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Make CausedByLines immutable

https://gerrit.wikimedia.org/r/1078109

Change #1078112 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Make TaintednessWithError immutable

https://gerrit.wikimedia.org/r/1078112

Change #1078113 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Drop unnecessary `clone`s in CausedByLines

https://gerrit.wikimedia.org/r/1078113

Change #1079365 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Improve merging of caused-by lines

https://gerrit.wikimedia.org/r/1079365

Change #1079556 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Avoid unnecessary instantiations of MethodLinks

https://gerrit.wikimedia.org/r/1079556

Change #1079625 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Deduplicate pass-by-reference objects in var links

https://gerrit.wikimedia.org/r/1079625

Change #1078083 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Make MethodLinks immutable

https://gerrit.wikimedia.org/r/1078083

Change #1078091 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Remove most mutation methods from Taintedness

https://gerrit.wikimedia.org/r/1078091

Change #1078092 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Drop Taintedness::mergeWith

https://gerrit.wikimedia.org/r/1078092

Change #1078093 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Introduce Taintedness::safeSingleton()

https://gerrit.wikimedia.org/r/1078093

Change #1078094 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Make FunctionTaintedness immutable

https://gerrit.wikimedia.org/r/1078094

Change #1078095 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Use Taintedness singletons whenever possible

https://gerrit.wikimedia.org/r/1078095

Change #1078096 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Combine FunctionTaintedness flag setters

https://gerrit.wikimedia.org/r/1078096

Change #1078097 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Drop unnecessary `clone`s

https://gerrit.wikimedia.org/r/1078097

Change #1078109 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Make CausedByLines immutable

https://gerrit.wikimedia.org/r/1078109

Change #1078112 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Make TaintednessWithError immutable

https://gerrit.wikimedia.org/r/1078112

Change #1078113 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Drop unnecessary `clone`s in CausedByLines

https://gerrit.wikimedia.org/r/1078113

Change #1079365 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Improve merging of caused-by lines

https://gerrit.wikimedia.org/r/1079365

Change #1079556 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Avoid unnecessary instantiations of MethodLinks

https://gerrit.wikimedia.org/r/1079556

Change #1079625 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Deduplicate pass-by-reference objects in var links

https://gerrit.wikimedia.org/r/1079625

Change #1081302 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Improve shape tracking in caused-by lines for calls

https://gerrit.wikimedia.org/r/1081302

Change #1082097 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Make PreservedTaintedness immutable

https://gerrit.wikimedia.org/r/1082097

Change #1082099 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Avoid processing empty objects to save resources

https://gerrit.wikimedia.org/r/1082099

Change #1081302 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Improve shape tracking in caused-by lines for calls

https://gerrit.wikimedia.org/r/1081302

Change #1082097 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Make PreservedTaintedness immutable

https://gerrit.wikimedia.org/r/1082097

Change #1082099 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Avoid processing empty objects to save resources

https://gerrit.wikimedia.org/r/1082099

Change #1086572 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Make most remaining objects immutable

https://gerrit.wikimedia.org/r/1086572

Change #1086572 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Make most remaining objects immutable

https://gerrit.wikimedia.org/r/1086572

Change #1087285 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):

[mediawiki/tools/phan/SecurityCheckPlugin@master] Fix bug in preserved caused-by lines for pass-by-ref

https://gerrit.wikimedia.org/r/1087285

Change #1087285 merged by jenkins-bot:

[mediawiki/tools/phan/SecurityCheckPlugin@master] Fix bug in preserved caused-by lines for pass-by-ref

https://gerrit.wikimedia.org/r/1087285