This is an archive of the discontinued LLVM Phabricator instance.

[opt-viewer] Reduce memory consumption by another 20-25%
ClosedPublic

Authored by anemet on Jul 18 2017, 11:23 PM.

Details

Summary

The Args field of the remark which consists of a list of mappings in YAML is
translated into a list of (small) dicts on Python. An empty dict is 280 bytes
on my system so we can save memory by using a tuple of tuples instead.

Making a tuple of tuples rather than a list of tuples allows Args to be shared
with the key of the remark. This is actually an even greater saving. (Keys
are alive throughout the entire run in all_remarks.)

Here are a few opt-stats runs with different input sizes while measuring heap
usage with heapy. Avg remark size is simply estimated as
heap-size / # of remarks:

| # of files             |   60 |  114 |  308 |  605 | 1370 |
| # of remarks           |  20K |  37K | 146K | 180K | 640K |
| total file size (MB)   |   22 |   51 |  219 |  202 | 1034 |
|------------------------+------+------+------+------+------|
| Avg remark size before | 4339 | 4792 | 4761 | 4096 | 4607 |
| Avg remark size after  | 3446 | 3641 | 3567 | 3146 | 3347 |
| Rate                   | 0.79 | 0.76 | 0.75 | 0.77 | 0.73 |

Event Timeline

anemet created this revision.Jul 18 2017, 11:23 PM
anemet updated this revision to Diff 107335.Jul 19 2017, 10:15 AM

Before writing out the difference YAML file in opt-diff, we need to recover
the YAML-friendly data structure for the remarks.

modocache accepted this revision.Jul 19 2017, 1:59 PM
modocache added inline comments.
tools/opt-viewer/optrecord.py
69

Great comment, thanks!

84

Typo: s/handels/handles/g.

This revision is now accepted and ready to land.Jul 19 2017, 1:59 PM
This revision was automatically updated to reflect the committed changes.