[LTP] [PATCH v3] syscalls/nice05: Add testcase for nice() syscall
Cyril Hrubis
chrubis@suse.cz
Mon Jul 18 11:58:26 CEST 2022
Hi!
> +static void verify_nice(void)
> +{
> + intptr_t nice_inc_high = -1;
> + intptr_t nice_inc_low = -2;
> + char buf[4096] = {0};
> + float sum_exec_runtime[2];
> + pthread_t nice_low, nice_high;
> + pid_t pid;
> +
> + pid = SAFE_FORK();
> + if (!pid) {
> + TEST(pthread_barrier_init(&barrier, NULL, 3));
> + if (TST_RET != 0) {
> + tst_brk(TBROK | TTERRNO,
> + "pthread_barrier_init() failed");
> + }
> +
> + SAFE_PTHREAD_CREATE(&nice_high, NULL, nice_high_thread,
> + (void *)nice_inc_high);
> + SAFE_PTHREAD_CREATE(&nice_low, NULL, nice_low_thread,
> + (void *)nice_inc_low);
> +
> + TEST(pthread_barrier_wait(&barrier));
> + if (TST_RET != 0 && TST_RET != PTHREAD_BARRIER_SERIAL_THREAD) {
> + tst_brk(TBROK | TTERRNO,
> + "pthread_barrier_wait() failed");
> + }
> +
> + while (1)
> + pause();
> + }
> +
> + sleep(tst_remaining_runtime());
> + SAFE_KILL(pid, SIGSTOP);
> +
> + sprintf(buf, "/proc/%d/sched", child_tid[0]);
> + SAFE_FILE_SCANF(buf, "%*s %*s %*s %*s %*s"
> + "%*s %*s %*f %*s %*s %*f %*s %*s %f",
> + &sum_exec_runtime[0]);
> +
> + sprintf(buf, "/proc/%d/sched", child_tid[1]);
> + SAFE_FILE_SCANF(buf, "%*s %*s %*s %*s %*s"
> + "%*s %*s %*f %*s %*s %*f %*s %*s %f",
> + &sum_exec_runtime[1]);
The /proc/$PID/sched file is unfortunatelly only present if
CONFIG_SCHED_DEBUG was set in the kernel, which is not always the case,
and the test TBROKs on some of my testing targets.
Thinking of alternatives we can probably do clock_getcpuclockid() for
the threads and read the counters with clock_gettime().
--
Cyril Hrubis
chrubis@suse.cz
More information about the ltp
mailing list