RFR: 8236617: jtreg test containers/docker/TestMemoryAwareness.java fails after 8226575
Baesken, Matthias
matthias.baesken at sap.com
Fri Jan 3 10:15:16 UTC 2020
HI Bob,
Looking at the docker sources, the message seems to come from here :
daemon_unix.go :
// verifyPlatformContainerResources performs platform-specific validation of the container's resource-configuration
func verifyPlatformContainerResources(resources *containertypes.Resources, sysInfo *sysinfo.SysInfo, update bool) (warnings []string, err error) {
.....
//
// means resources have positive Memory limit, memory+swap is not unlimited AND SwapLimit (memory.memsw.limit_in_bytes ?) is not enabled [comment added by me)
if resources.Memory > 0 && resources.MemorySwap != -1 && !sysInfo.SwapLimit {
warnings = append(warnings, "Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.")
resources.MemorySwap = -1
}
with Resources from hostconfig.go :
// Resources contains container's resources (cgroups config, ulimits...)
type Resources struct {
Memory int64 // Memory limit (in bytes)
...
MemorySwap int64 // Total memory usage (memory + swap); set `-1` to enable unlimited swap
So I think your suggestion to return 0 in that special case in function getTotalSwapSpaceSize sounds reasonable to me ( at least better than return a large negative value ).
New webrev :
http://cr.openjdk.java.net/~mbaesken/webrevs/8236617.2/
Thanks, Matthias
>
> Matthias,
>
> I really don’t like testing for some Docker message that could possibly change
> or go away in the future.
> There may be other reasons that the getTotalSwapSpaceSize function will fail
> and return 0.
>
> The real problem here is that the
> OperatingSystemMXBean.getTotalSwapSpaceSize is returning a
> negative value when there is no swap available.
>
> I’d prefer that we fix this problem by correcting the getTotalSwapSpaceSize
> function to properly return 0
> under these conditions and allow 0 to be a valid expected result in the test.
>
> if (limit >= 0 && memLimit >= 0) {
> return (limit < memLimit) ? 0 : limit - memLimit;
> }
>
> Note: My suggestion assumes that there is no swap available when the
> kernel swap limit capability is not enabled.
> I have not verified this. The message does claim that this is the case
> "Memory limited without swap”.
>
> Bob.
>
>
> > On Jan 2, 2020, at 8:26 AM, Baesken, Matthias
> <matthias.baesken at sap.com> wrote:
> >
> > Hello, please review this small adjustment to jtreg test
> containers/docker/TestMemoryAwareness.java .
> >
> > After change "8226575: OperatingSystemMXBean should be made
> container aware" has been pushed,
> > we observe failures on linux s390x / ppc64le in the docker related jtreg
> tests .
> >
> >
> > The test runs into the following error :
> > java.lang.RuntimeException:
> 'OperatingSystemMXBean.getTotalSwapSpaceSize: 52428800' missing from
> stdout/stderr
> >
> > at
> jdk.test.lib.process.OutputAnalyzer.shouldContain(OutputAnalyzer.java:187)
> > at
> TestMemoryAwareness.testOperatingSystemMXBeanAwareness(TestMem
> oryAwareness.java:154)
> > at TestMemoryAwareness.main(TestMemoryAwareness.java:65)
> > at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> > at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMet
> hodAccessorImpl.java:62)
> > at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Delega
> tingMethodAccessorImpl.java:43)
> > at java.base/java.lang.reflect.Method.invoke(Method.java:564)
> > at
> com.sun.javatest.regtest.agent.MainWrapper$MainThread.run(MainWrapp
> er.java:127)
> > at java.base/java.lang.Thread.run(Thread.java:832)
> >
> >
> > The reason is that the value found is instead
> OperatingSystemMXBean.getTotalSwapSpaceSize: -104857600 .
> > When looking into the getTotalSwapSpaceSize() function, we get values of
> 0 for "limit" and 104857600 for "memLimit" :
> >
> > 57 long limit = containerMetrics.getMemoryAndSwapLimit();
> > ....
> > 62 long memLimit = containerMetrics.getMemoryLimit();
> > 63 if (limit >= 0 && memLimit >= 0) {
> > 64 return limit - memLimit;
> > 65 }
> >
> > That explains the value "-104857600" . We see messages "Your kernel
> does not support swap limit capabilities or the cgroup is not mounted.
> Memory limited without swap" , this most likely
> > causes the unexpected limit == 0 value .
> >
> >
> > Bug/webrev :
> >
> > https://bugs.openjdk.java.net/browse/JDK-8236617
> >
> > http://cr.openjdk.java.net/~mbaesken/webrevs/8236617.0/
> >
> >
> > Thanks, Matthias
More information about the hotspot-dev
mailing list