Re: resolution of CLOCK_PROCESS_CPUTIME_ID

Jan Stary <[email protected]> Wed, 24 Jun 2026 15:14:19 +0200
Newsgroups gmane.os.openbsd.misc
Message-ID <[email protected]>
Apparently, this is

	ts.tv_nsec = 1000000000 / stathz;

in ./sys/kern/kern_time.c

Jan


On Jun 24 15:08:24, [email protected] wrote:
> Dear all,
> 
> the resolution of CLOCK_PROCESS_CPUTIME_ID,
> as reported by clock_getres(), is 10000000 ns;
> this seems to be the case on all archs I have.
> 
> This resolution seems to be coarser than
> the actual cpu time reported (in a process that does nothing else),
> such as 7233653 ns on this machine here.
> 
> FWIW, each of the OSes below (+Debian) returns 1 ns.
> 
> 	Jan
> 
> 
> #include <stdint.h>
> #include <string.h>
> #include <stdio.h>
> #include <time.h>
> #include <err.h>
> 
> void
> show(clockid_t id, char* name)
> {
> 	struct timespec ts;
> 	struct timespec cr;
> 	if (clock_gettime(id, &ts) == -1)
> 		err(1, NULL);
> 	if (clock_getres(id, &cr) == -1)
> 		err(1, NULL);
> 	printf("%s %10lld.%09ld s, %8ld ns resolution\n",
> 		name, ts.tv_sec, ts.tv_nsec, cr.tv_nsec);
> }
> 
> int
> main(void)
> {
> #ifdef  __APPLE__
> 	show(CLOCK_REALTIME,		"real time");
> 	show(CLOCK_MONOTONIC,		"monotonic");
> 	show(CLOCK_UPTIME_RAW,		"up time  ");
> 	show(CLOCK_PROCESS_CPUTIME_ID,	"proc time");
> #elif __OpenBSD__
> 	show(CLOCK_REALTIME,		"real time");
> 	show(CLOCK_MONOTONIC,		"monotonic");
> 	show(CLOCK_BOOTTIME,		"boot time");
> 	show(CLOCK_UPTIME,		"up time  ");
> 	show(CLOCK_PROCESS_CPUTIME_ID,	"proc time");
> #elif __FreeBSD__
> 	show(CLOCK_REALTIME,		"real time");
> 	show(CLOCK_MONOTONIC,		"monotonic");
> 	show(CLOCK_BOOTTIME,		"boot time");
> 	show(CLOCK_UPTIME,		"up time  ");
> 	show(CLOCK_PROCESS_CPUTIME_ID,  "proc time");
> #elif __NetBSD__
> 	show(CLOCK_REALTIME,		"real time");
> 	show(CLOCK_MONOTONIC,		"monotonic");
> 	show(CLOCK_PROCESS_CPUTIME_ID,  "proc time");
> #else
> 	show(CLOCK_REALTIME,		"real time");
> 	show(CLOCK_MONOTONIC,		"monotonic");
> 	show(CLOCK_BOOTTIME,		"boot time");
> 	show(CLOCK_PROCESS_CPUTIME_ID,	"proc time");
> #endif
> 	return 0;
> }