RFR: 8267155: runtime/os/TestTracePageSizes times out
Aleksey Shipilev
shade at openjdk.java.net
Mon May 17 16:42:51 UTC 2021
On Mon, 17 May 2021 16:28:57 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
>> This Linux-specific test parses `/proc/self/smaps` using a dotall regular expression. If part of the expression don't match it explodes in complexity, leading to timeouts.
>>
>> In our case, `VmFlags` tag was missing from smaps, which was introduced with kernel 3.8. I am actually not able to determine how slow they were; on one machine they ran for two hours before getting killed.
>>
>> I tried to fiddle with the regular expression and gave up, instead opting to rewrite the parser to get a simple one-pass scan. This is way faster than before - on our old-kernel machines the tests complete in 2 minutes. On new kernels the test is a bit faster too.
>>
>> In addition to rewriting the parser, I added code which copies the smaps file into the test directory before parsing it. I do this to minimize problems should the underlying proc fs content change while parsing, and to have a way to retain the parsed smaps files.
>>
>> I also added a way to feed an external smaps file into the test. Of course the test would fail, but it was a way to test the parser.
>>
>> Unfortunately, this does not make the test succeed. The timeouts are gone, but we have still have no way to know if TPHs are enabled or not. That is a separate issue though.
>>
>> Thanks, Thomas
>
> test/hotspot/jtreg/runtime/os/TestTracePageSizes.java line 136:
>
>> 134: Pattern sectionStartPat = Pattern.compile("^([a-f0-9]+)-([a-f0-9]+) [\\-rwpsx]{4}.*");
>> 135: Pattern kernelPageSizePat = Pattern.compile("^KernelPageSize:\\s*(\\d*) kB");
>> 136: Pattern vmFlagsPat = Pattern.compile("^VmFlags: ([\\w\\? ]*)");
>
> Suggestion:
>
> static final Pattern SECTION_START_PATT = Pattern.compile("^([a-f0-9]+)-([a-f0-9]+) [\-rwpsx]{4}.*");
> static final Pattern KERNEL_PAGESIZE_PATT = Pattern.compile("^KernelPageSize:\\s*(\\d*) kB");
> static final Pattern VMFLAGS_PATT = Pattern.compile("^VmFlags: ([\\w\? ]*)");
...and probably move it before instance fields block.
-------------
PR: https://git.openjdk.java.net/jdk/pull/4064
More information about the hotspot-runtime-dev
mailing list