smengcl commented on PR #11575:
URL: https://github.com/apache/ozone/pull/11575#issuecomment-6327802663
@jojochuang Thanks for the review.
1. Yes, during `init` only. Up to 8 YAMLs are parsed at once (the Yaml pool
size), and each in-flight load holds its whole snakeyaml node tree. For a 9 MB
YAML that is about 125 MB of node tree plus 13 MB for the loaded object, so 8
loads hold about 1.1 GB, against about 140 MB with the old single thread.
Nothing extra is kept after parsing: each result is reduced to its
`SnapshotVersionsMeta` right away. The bigger cost is GC: with 8 loads in
flight, node trees get promoted and the OM spent about half of the YAML phase
in GC pauses, with heap after GC at 12 to 14 GiB. #11576 (HDDS-17079) fixes
that by streaming parser events instead of building the tree. With it, GC took
0.3% of the YAML phase and the heap never grew past 4.5 GiB.
2. On a cluster with about 19k snapshots (126 to 261 GB of snapshot YAML per
OM, on HDD):
* Before: 6.8 to 13 hours from restart until the OM RPC port opened.
* This PR plus the first version of #11576: 62 min, about half of it in
GC.
* This PR plus the current #11576: 29 min on the same OM and data, disk
bound (YAML read at 113 MB/s against about 140 MB/s for a plain `cat` of the
same files).
This PR was not measured alone there, since both were deployed together.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]