diff options
author | Wladimir J. van der Laan <laanwj@protonmail.com> | 2019-09-30 09:47:16 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@protonmail.com> | 2019-09-30 09:47:28 +0200 |
commit | 6b9405e3191206f1cda626423aab6a453980ab05 (patch) | |
tree | f7d39cb037d4fdd6ae27e6d9c9b916d511ee315e /src/dbwrapper.cpp | |
parent | 26a74370455cc03c4e7be73728775265ed227a9f (diff) | |
parent | 67d99900b0d770038c9c5708553143137b124a6c (diff) |
Merge #16957: 9% less memory: make SaltedOutpointHasher noexcept
67d99900b0d770038c9c5708553143137b124a6c make SaltedOutpointHasher noexcept (Martin Ankerl)
Pull request description:
If the hash is not `noexcept`, `unorderd_map` has to assume that it can throw an exception. Thus when rehashing care needs to be taken. libstdc++ solves this by simply caching the hash value, which increases memory of each node by 8 bytes. Adding `noexcept` prevents this caching. In my experiments with `-reindex-chainstate -stopatheight=594000`, memory usage (maximum resident set size) has decreased by 9.4% while runtime has increased by 1.6% due to additional hashing. Additionally, memusage::DynamicUsage() is now more accurate and does not underestimate.
| | runtime h:mm:ss | max RSS kbyte |
|---------------------------------------|-----------------|--------------|
| master | 4:13:59 | 7696728 |
| 2019-09-SaltedOutpointHasher-noexcept | 4:18:11 | 6971412 |
| change | +1.65% | -9,42% |
Comparison of progress masters vs. 2019-09-SaltedOutpointHasher-noexcept
![out](https://user-images.githubusercontent.com/14386/65541887-69424e00-df0e-11e9-8644-b3a068ed8c3f.png)
ACKs for top commit:
jamesob:
Tested ACK https://github.com/bitcoin/bitcoin/pull/16957/commits/67d99900b0d770038c9c5708553143137b124a6c
Tree-SHA512: 9c44e3cca993b5a564dd61ebd2926b9c4a238609ea4d283514c018236f977d935e35a384dd4696486fd3d78781dd2ba190bb72596e20a5e931042fa465872a0b
Diffstat (limited to 'src/dbwrapper.cpp')
0 files changed, 0 insertions, 0 deletions