RFR: 8246112: Remove build-time and run-time checks for clock_gettime and CLOCK_MONOTONIC [v3]
Gerard Ziemski
gziemski at openjdk.java.net
Wed Jan 20 21:34:06 UTC 2021
On Tue, 19 Jan 2021 01:53:03 GMT, David Holmes <dholmes at openjdk.org> wrote:
>> We are now confident that we have build-time and runtime support for clock_gettime and CLOCK_MONOTONIC on all our OpenJDK supported POSIX platforms - see bug report for some more details on different OS. Consequently we can simplify a lot of the code in this area and move common code to os_posix.
>>
>> As of glibc 2.17 the necessary functions are in glibc rather than librt, but we (Oracle at least) aren't yet in position to set our minimum Linux version to support that. We still have supported platforms at glibc 2.12. So to address that we link librt at build time on Linux. This seems to work find for older and more modern Linuxes and also works for the Apline Linux with Musl variant.
>>
>> The changes are in layered commits:
>>
>> Step 1: Remove build time checks. SUPPORTS_CLOCK_MONOTONIC is assumed true and removed.
>> Step 2: make supports_monotonic_clock always true and so remove checking in OS code
>> Step 3: Replace gettimeofday by clock_gettime(CLOCK_REALTIME)
>> Step 4: Move shared time functions to os_posix.cpp
>> Step 5: Alway link librt on Linux so we don't rely on glibc > 2.17
>>
>> Testing: tiers 1-3 for functional testing
>> built and checked (-Xlog:os) on Linux with glibc 2.12 and 2.17, macOS 10.13.6 and 10.15.7
>
> David Holmes has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains eight additional commits since the last revision:
>
> - Merge branch 'master' into 8246112-mono
> - Restrict librt linking to JVM - per Magnus's request
> - Merge branch 'master' into 8246112-mono
> - Alway link librt on Linux so we don't rely on glibc > 2.12
> - Step 4: Move shared time functions to os_posix.cpp
> - Step 3: Replace gettimeofday by clock_gettime(CLOCK_REALTIME)
> - Step 2: make supports_monotonic_clock always true and so remove checking it (in OS code)
> - 8246112: Remove build-time and run-time checks for clock_gettime and CLOCK_MONOTONIC
>
> Step 1: Remove build time checks. SUPPORTS_CLOCK_MONOTONIC is assumed true and removed.
Changes requested by gziemski (Committer).
src/hotspot/os/bsd/os_bsd.inline.hpp line 2:
> 1: /*
> 2: * Copyright (c) 1999, 2030, Oracle and/or its affiliates. All rights reserved.
Year 2030 ?
src/hotspot/os/bsd/os_bsd.cpp line 828:
> 826: }
> 827:
> 828: void os::javaTimeNanos_info(jvmtiTimerInfo *info_ptr) {
How come we need `os::javaTimeNanos_info` here if there is already one in `os_posix.cpp`?
src/hotspot/os/posix/os_posix.hpp line 95:
> 93: static void ucontext_set_pc(ucontext_t* ctx, address pc);
> 94:
> 95: static bool supports_monotonic_clock();
Why do we need this API at all now?
thread.cpp uses it here:
assert(!os::supports_monotonic_clock(),
"unexpected time moving backwards detected in JavaThread::sleep()");
so we can just remove this usage?
src/hotspot/os/posix/os_posix.cpp line 1161:
> 1159:
> 1160: void os::Posix::init_2(void) {
> 1161: log_info(os)("Use of CLOCK_MONOTONIC is supported");
We are keeping this output to avoid breaking whomever might be looking for this text?
-------------
PR: https://git.openjdk.java.net/jdk/pull/2090
More information about the build-dev
mailing list