Print this page
OS-5804 lxbrand needs support for CLOCK_*_CPUTIME_ID timers

*** 8,31 **** * source. A copy of the CDDL is also available via the Internet at * http://www.illumos.org/license/CDDL. */ /* ! * Copyright 2016 Joyent, Inc. */ /* * The illumos kernel provides two clock backends: CLOCK_REALTIME, the * adjustable system wall clock; and CLOCK_HIGHRES, the monotonically * increasing time source that is not subject to drift or adjustment. By * contrast, the Linux kernel is furnished with an overabundance of narrowly * differentiated clock types. * ! * Fortunately, most of the commonly used Linux clock types are either similar ! * enough to the native clock backends that they can be directly mapped, or ! * represent queries to the per-process and per-LWP microstate counters. * * CLOCK_BOOTTIME is identical to CLOCK_MONOTONIC, except that it takes into * account time that the system is suspended. Since that is uninteresting to * us, we treat it the same. */ --- 8,38 ---- * source. A copy of the CDDL is also available via the Internet at * http://www.illumos.org/license/CDDL. */ /* ! * Copyright 2020 Joyent, Inc. */ /* * The illumos kernel provides two clock backends: CLOCK_REALTIME, the * adjustable system wall clock; and CLOCK_HIGHRES, the monotonically * increasing time source that is not subject to drift or adjustment. By * contrast, the Linux kernel is furnished with an overabundance of narrowly * differentiated clock types. * ! * Fortunately, most of the commonly used Linux clock types are similar ! * enough to the native clock backends that they can be directly mapped. * + * Unfortunately, while CLOCK_{THREAD,PROCESS}_CPUTIME_ID are *somewhat* + * implemented in the main illumos kernel as itimers (see setitimer(2)), we + * would need to entirely bringup of CLOCK_{THREAD,PROCESS}_CPUTIME_ID to + * implement timer_create() and friends. For now, we opt to map it to + * CLOCK_HIGHRES for timer_create() and friends, but continue to emulate + * more-accurate queries to per-process or per-LWP microstate accounting for + * getres, gettime, or settime. + * * CLOCK_BOOTTIME is identical to CLOCK_MONOTONIC, except that it takes into * account time that the system is suspended. Since that is uninteresting to * us, we treat it the same. */
*** 81,92 **** lx_emul_clock_settime } static lx_clock_backend_t lx_clock_backends[] = { NATIVE(CLOCK_REALTIME), /* LX_CLOCK_REALTIME */ NATIVE(CLOCK_HIGHRES), /* LX_CLOCK_MONOTONIC */ ! EMUL(CLOCK_PROCESS_CPUTIME_ID), /* LX_CLOCK_PROCESS_CPUTIME_ID */ ! EMUL(CLOCK_THREAD_CPUTIME_ID), /* LX_CLOCK_THREAD_CPUTIME_ID */ NATIVE(CLOCK_HIGHRES), /* LX_CLOCK_MONOTONIC_RAW */ NATIVE(CLOCK_REALTIME), /* LX_CLOCK_REALTIME_COARSE */ NATIVE(CLOCK_HIGHRES), /* LX_CLOCK_MONOTONIC_COARSE */ NATIVE(CLOCK_HIGHRES) /* LX_CLOCK_BOOTTIME */ }; --- 88,99 ---- lx_emul_clock_settime } static lx_clock_backend_t lx_clock_backends[] = { NATIVE(CLOCK_REALTIME), /* LX_CLOCK_REALTIME */ NATIVE(CLOCK_HIGHRES), /* LX_CLOCK_MONOTONIC */ ! EMUL(CLOCK_HIGHRES), /* LX_CLOCK_PROCESS_CPUTIME_ID */ ! EMUL(CLOCK_HIGHRES), /* LX_CLOCK_THREAD_CPUTIME_ID */ NATIVE(CLOCK_HIGHRES), /* LX_CLOCK_MONOTONIC_RAW */ NATIVE(CLOCK_REALTIME), /* LX_CLOCK_REALTIME_COARSE */ NATIVE(CLOCK_HIGHRES), /* LX_CLOCK_MONOTONIC_COARSE */ NATIVE(CLOCK_HIGHRES) /* LX_CLOCK_BOOTTIME */ };