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?)
Description
Details
Related Objects
- Mentioned In
- T269816: Investigate running taint-check with analyze-twice
- Mentioned Here
- T203651: Optimize phan-taint-check speed
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
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
Change #1078092 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Drop Taintedness::mergeWith
Change #1078093 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Introduce Taintedness::safeSingleton()
Change #1078094 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Make FunctionTaintedness immutable
Change #1078095 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Use Taintedness singletons whenever possible
Change #1078096 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Combine FunctionTaintedness flag setters
Change #1078097 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Drop unnecessary `clone`s
Change #1078109 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Make CausedByLines immutable
Change #1078112 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Make TaintednessWithError immutable
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
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
Change #1079556 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Avoid unnecessary instantiations of MethodLinks
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
Change #1078083 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Make MethodLinks immutable
Change #1078091 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Remove most mutation methods from Taintedness
Change #1078092 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Drop Taintedness::mergeWith
Change #1078093 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Introduce Taintedness::safeSingleton()
Change #1078094 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Make FunctionTaintedness immutable
Change #1078095 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Use Taintedness singletons whenever possible
Change #1078096 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Combine FunctionTaintedness flag setters
Change #1078097 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Drop unnecessary `clone`s
Change #1078109 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Make CausedByLines immutable
Change #1078112 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Make TaintednessWithError immutable
Change #1078113 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Drop unnecessary `clone`s in CausedByLines
Change #1079365 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Improve merging of caused-by lines
Change #1079556 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Avoid unnecessary instantiations of MethodLinks
Change #1079625 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Deduplicate pass-by-reference objects in var links
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
Change #1082097 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Make PreservedTaintedness immutable
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
Change #1081302 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Improve shape tracking in caused-by lines for calls
Change #1082097 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Make PreservedTaintedness immutable
Change #1082099 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Avoid processing empty objects to save resources
Change #1086572 had a related patch set uploaded (by Daimona Eaytoy; author: Daimona Eaytoy):
[mediawiki/tools/phan/SecurityCheckPlugin@master] Make most remaining objects immutable
Change #1086572 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Make most remaining objects immutable
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
Change #1087285 merged by jenkins-bot:
[mediawiki/tools/phan/SecurityCheckPlugin@master] Fix bug in preserved caused-by lines for pass-by-ref