-
Notifications
You must be signed in to change notification settings - Fork 721
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Disable SCC/AOT and reduce counts when running with CRIU in containers #17253
Comments
Attn: @dsouzai |
I created a build with the following change:
At first I thought I might need to do something about the counts, but in my container runs with OpenLiberty, because a SCC is specified, the counts are already going to be set to 1000/250. These are the results:
There seems to be a ~1% slowdown to startup and a ~3% slowdown to first response. The reason is likely because although the counts are the same as AOT compiles, an AOT load occurs at scount=20, so there's likely a lot more code loaded from the SCC than is compiled at 1000/250. |
Could you run throughput runs with this setup? The footprint savings after load was we wanted to achieve with these changes. |
Doesn't look like there's any throughput issue (considering the confidence interval). FWIW, this throughput run is by running pingperf and using
|
It's good to know that throughput is not affected. How about footprint? Since footprint is the motivation of this whole idea, if the memory consumption is not lower, the appeal for this change decreases considerably. |
The throughput again is within the noise, but given that this is the second time nojit build has lower throughput, I'll have to do a bigger set of runs. RSS does seem to be almost 2% lower; peakRSS is higher but the confidence interval isn't good so I'll see what a bigger set of runs shows. |
It's possible that we'll get bigger footprint advantages if we use higher counts (like those for no SCC) but rampup may be affected in those cases. |
Heres the data from a bigger set of runs:
Throughput goes down by ~1%; RSS improves by ~4%, Peak RSS goes up by ~1% but that's within the noise. |
I did a set of runs with
(on top of the change in #17253 (comment)). While the RSS does reduce even further, the peak RSS is much higher and throughput is much lower:
|
I did a couple of experiments. First, I generated a build, called
This basically is the same logic that upgrades an AOT compilation that was downgraded. Next I generated a build, called
This makes it so that the compiler can't interface with the SCC for any reason. However, it doesn't affect the counts (except for I believe the Also These are the results:
and
Having methods be compiled at warm (which also includes GCR trees) don't improve the throughput. In terms of footprint, it appears that the majority of the improvement comes from not reading the SCC for any reason. In the It's possible that |
Is it possible that getting IProfiler info from the SCC resulted in a) larger footprint because we inlined more and b) better throughput because we have more and/or better profiling info in the SCC ? i.e. when we remove the SCC altogether we see lower footprint but also lower throughput (because of lesser inlining) ? |
Typically, when creating a container based on OpenJ9 we embed a shared class cache into the container to improve start-up time.
CRIU does a much better job at improving start-up time than the SCC/AOT. Moreover, it has been observed that using -Xshareclasses:none leads to a small footprint reduction.
This issues proposes to disable SCC (or just AOT) when creating containers that can take advantage of CRIU. Moreover, in order to not affect rampup of applications we might need to bring the invocation counts to the same values as those used for AOT (1000/250)
The text was updated successfully, but these errors were encountered: