- Version 1.7 of rippled will reduce memory consumption to less than half.
- The new version of the reference implementation of the XRP Ledger server will be released soon.
As the C++ team at Ripple wrote in a new blog post yesterday, the time has come: version 1.7.0 of rippled is to be released. Why this is important? Rippled is the server software that powers the XRP ledger and is used by nodes as a reference implementation on the network. With version 1.7.0, node operators will see a “real-world improvement of more than 50%,” according to the RippleX team.
Back in mid-December, Ripple CTO David Schwartz reported fabulous performance improvements during initial testing of version 1.7. At the time, Schwartz conducted a test in which his server shut down, waited 60 seconds, and then restarted to simulate rebooting to update code or similar operations.
In the test, Schwartz had measured memory consumption, data processing rates and time required, explaining that the old version “takes 82 seconds, 5.2 GB, and peaks at 73K nodes/sec. The optimized version takes 37 seconds, 2.2 GB, and peaks at 327K nodes/sec (on my machine)!”
Version 1.7.0-b5 takes 82 seconds, 5.2GB, and peaks at 73K nodes/sec. The optimized version takes 37 seconds, 2.2GB, and peaks at 327K nodes/sec (on my machine)! 3/4
— David Schwartz (@JoelKatz) December 17, 2020
As Ripple outlined, the C++ team has “spent a significant amount of time in 2020 focusing on how to make better use of available system resources. ” And that work now appears to be paying off. All the changes with version 1.7 lead them to a total memory savings of over 50%, with some places using 7 GB less RAM than the original code.
Since December, the results have been tested by the community, such as Alloy Networks, to verify that version 1.7 works the same “as well as it does for us,” as Ripple stated.
With confirmation that it does, we are excited to say that these changes will be part of the upcoming release of rippled version 1.7.0. […] We’re proud to report that, compared to previous versions, the improvements we’ve contributed to version 1.7.0 of rippled, our reference implementation of the XRP Ledger server, cut its memory usage to less than half.
The key parameter for rippled’s developers
The focus of rippled V.1.7’s improvements was the so-called “SHAMap” and its components, particularly the nodes within the SHAMap’s tree-like structure. This data structure “holds the state of the ledger itself – all the accounts, balances, settings, exchange orders, and everything else the XRP Ledger tracks”
The SHAMap is a combination of a Merkle tree and a Radix tree with a branching factor of 16, and this branching factor was the key parameter for Ripple’s developers:
Each node has 16 children, whether they point to something or not. And that was the key insight: just because nodes can have up to 16 children doesn’t mean that they actually do in practice. […] The data we collected shows that most inner nodes only have a handful of children. With that in mind, we examined if the nodes of the tree could be adjusted, at runtime, to accommodate only as many children as they needed.