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 */
};