From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (unknown [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id DA2618013F for ; Mon, 31 Aug 2026 22:47:20 +0000 (UTC) Received: from mail.openvz.org (localhost [127.0.0.1]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 67VMk7FC030839; Tue, 1 Sep 2026 01:46:08 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 67VMk7FC030839 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="cZXp7cP0" Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 67VMk5KD030827 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Tue, 1 Sep 2026 01:46:06 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 67VMk5KD030827 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-4843d9ab895so221244f8f.0 for ; Mon, 31 Aug 2026 15:46:05 -0700 (PDT) X-Gm-Message-State: AFuF++mFImA/NHxDw9BF9aQ+LBxOEmhLX8JGaKr35z0owPbhm/zJxDEu +cZOzWK20DRjoVnXwJmYUPifwILKl55GqqdWOYbsxniwMYxztC1VoNkWviKzq9jTwXByJn/Q8ra A7sjyoH4KH1su881H1wvlKFl2GEMulPiJfQZWHMswMap4e7OdiJw0xQ== X-Gm-Gg: AYBFou0UfKX1Jam96b70wfSrz1N+7jY+BsJyui1+ow8+l+0FVtdy3HYq1WgiXwQMoQo /kq7cLuZKi765Fh4Z3RkUGtlAWATDbMt/dzAQd5n5ZZFHCuAAsQ02XQ7bdz1yGxRpuG6GyZ6OPY ouHJgCEVCJviQVMtzy0d/kaDOwXnvxHCdP8HSDRp/A3xhXP3U8yO6MtLVmcvI/27tMGvvrG2phB raN1WEWnfe9edoTZlN/iYGE7wJ/FfU54dBwBRLM0fb9/Oxn0nTVCwqkFUU6371hC7ZOb6WStOFs yYm2BPL6Nf1komyy0uSPW/0TcIqD0OnpJutBwfB8JMkOOXfJAu8j1BoK7w4m2C68fCQymoxIA+J 05ZwJa1IlWqDFDB3X8EccrzisBA== X-Received: by 2002:a05:6000:3102:b0:484:3313:fd86 with SMTP id ffacd0b85a97d-484331400b4mr25840456f8f.27.1788216365565; Mon, 31 Aug 2026 15:46:05 -0700 (PDT) X-Received: by 2002:a05:6000:3102:b0:484:3313:fd86 with SMTP id ffacd0b85a97d-484331400b4mr25840398f8f.27.1788216364955; Mon, 31 Aug 2026 15:46:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1788216364; cv=none; d=google.com; s=arc-20260327; b=XeFWN+Pd+PXTQH/exAk+y4/zg5jBKIl4wY6MoWp7o5yJ7fgzaMC4vBp/yHy92TR29+ lU7yCfB02TXbuzQP0yXMmVtPVOyl7eVPohEU2l0MOqsAuj9mqhT9eLLzf6yJ79djEHmJ 2QjrRpmr82kdFUWlL9aOSpja9D58IqB0dEJ3xpKaFuUuoa6JHCMCr7wZ8RS8DzPqmde4 Qfhrfw1dbVXonEBny0DXQCBBkoZ1L2GB/tyDgNFsdsnZhXK96dV30CCd5+Nq4xfcutF0 6uU+naTietn54mQpkeHmmIN5M39AxMnGgztmz1cSMQNFRwOMH5Vm/xWTOvIIKnx7yscl 1Scg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dkim-signature; bh=BxU197/xdK+3kM7/TTKEw9WhiONZplQR4h7HBkbxoQ8=; fh=WpT6aB7RBAGHZeWZzqAr71yzRFbPTYkPWKsRagLn48Q=; b=smJ20Wh2xQZ5hR/h6ONxpESeYEo+X2s8weEWTqTwEl8D/iLijSb5c44MgX3SXQo52K HZxVzpaRXnWkt8I9DJ8yiPsAic0p+AhuMBd1bIibEKFiNblZDUtfasu82VLLPJ7aCUOz OvbN3oclKgzyUzsWxojNcpS9AFZqhklBLftRp7kDdvQ4QGbZlxdkOgl4zm0l7pcYKbgH SfcE5B7R2Z336nFoe29ZQX3fAShFPDAbVme0NVxA0iU6QP/0decYoxKNQ5BS9npWyFMF op736m4NCnkvGUcpS2zrULl1MczR5ydUc3jwHHMWuz+Vo7P1s9BdUlbc6Y2q/Pzcu2bz EbOw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=cZXp7cP0; spf=pass (google.com: domain of eva.kurchatova@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=eva.kurchatova@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from relay.virtuozzo.com (relay.virtuozzo.com. [130.117.225.111]) by mx.google.com with ESMTPS id ffacd0b85a97d-48442e81da7si658040f8f.430.2026.08.31.15.46.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Aug 2026 15:46:04 -0700 (PDT) Received-SPF: pass (google.com: domain of eva.kurchatova@virtuozzo.com designates 130.117.225.111 as permitted sender) client-ip=130.117.225.111; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=cZXp7cP0; spf=pass (google.com: domain of eva.kurchatova@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=eva.kurchatova@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=MIME-Version:Message-ID:Date:Subject:From: Content-Type; bh=BxU197/xdK+3kM7/TTKEw9WhiONZplQR4h7HBkbxoQ8=; b=cZXp7cP0W9ro KMQBE+RxGbrZQ45o7T6qbjE7jIlVnTNMak16iqlly7vQr4TKRT2SKMPPxvfsXjTN1T/zNtLy4z/47 eBGTSk3YJTaddWvGqfKGwGttNTDPEhuqSIpGpjuJyZ0PGsNjwFgkeMeiKFBeF02A5bRJr8FMBX+7G bmxrIGXHGZf85hQO/3bTBBlgFE1ovHOp1GCZIJyZ3kXlsLDM8iRt7NKPILl0eeGvRMoTp15yVzIA8 K/1vCyNaLrgbIiLPj0avXE2+x0AKXvU5z1QU+79j9v+G8VSPPmsaw+F5Ilq4PoNXfIENCzkjjP5t9 JIO9kai+mk2PqqHOIaguAA==; Received: from ch-vpn.virtuozzo.com ([130.117.225.6] helo=LekKit-T14) by relay.virtuozzo.com with esmtp (Exim 4.96) (envelope-from ) id 1x1Aj3-009fqa-32; Tue, 01 Sep 2026 00:45:55 +0200 From: Eva Kurchatova To: khorenko@virtuozzo.com Date: Tue, 1 Sep 2026 01:45:58 +0300 Message-ID: <20260831224603.1641737-1-eva.kurchatova@virtuozzo.com> X-Mailer: git-send-email 2.55.0 MIME-Version: 1.0 X-OZ-Fwd: true Cc: devel@openvz.org Subject: [Devel] [PATCH vz10 1/3] ms/selftests/posix_timers: Use CLOCK_THREAD_CPUTIME_ID for ITIMER_PROF measurements X-BeenThere: devel@openvz.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: OpenVZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org From: John Stultz It was reported that the posix_timers test was at times seeing failures with ITIMER_PROF timers, specifically in cases where the RCU_SOFTIRQ was taking up significant amounts of time. Analysis showed that as the time in softirq isn't included in the task stime + utime accounting used to trigger the SIGPROF so delays from softirq work could cause it to appear that the signal was incorrectly delayed. Contributing to this is that the test uses gettimeofday() to measure itimers, which also means any scheduling delay can also cause failures (as the task may not be running the entire time). To fix this, convert all the itimer measurements to use clock_gettime(), tweaking the logic to use nsecs instead of usecs. Then for ITIMER_PROF timers, utilize the CLOCK_THREAD_CPUTIME_ID clockid so that it is similarly measuring the time the task was running. Signed-off-by: John Stultz Signed-off-by: Thomas Gleixner Link: https://patch.msgid.link/20260428173957.1394265-1-jstultz@google.com The ITIMER_PROF case of it fails on the CI machines, which are two cpu guests under load: # Diff too high: 2561992..not ok 3 ITIMER_PROF 2.56 seconds of wall time for the 2 seconds of cpu time the timer counts, so the task had about four fifths of a cpu. (cherry picked from commit b00385b8d081ce74f36ea178e04e1b106505fb36) https://virtuozzo.atlassian.net/browse/VSTOR-143363 Feature: fix selftests Signed-off-by: Eva Kurchatova --- tools/testing/selftests/timers/posix_timers.c | 55 ++++++++++--------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/tools/testing/selftests/timers/posix_timers.c b/tools/testing/selftests/timers/posix_timers.c index f0eceb0faf34..077a98fb1b1d 100644 --- a/tools/testing/selftests/timers/posix_timers.c +++ b/tools/testing/selftests/timers/posix_timers.c @@ -77,19 +77,25 @@ static void sig_handler(int nr) done = 1; } +static inline int64_t calcdiff_ns(struct timespec t1, struct timespec t2) +{ + int64_t diff; + + diff = NSEC_PER_SEC * (int64_t)((int) t1.tv_sec - (int) t2.tv_sec); + diff += ((int) t1.tv_nsec - (int) t2.tv_nsec); + return diff; +} + /* * Check the expected timer expiration matches the GTOD elapsed delta since * we armed the timer. Keep a 0.5 sec error margin due to various jitter. */ -static int check_diff(struct timeval start, struct timeval end) +static int check_diff(struct timespec start, struct timespec end) { - long long diff; - - diff = end.tv_usec - start.tv_usec; - diff += (end.tv_sec - start.tv_sec) * USEC_PER_SEC; + long long diff = calcdiff_ns(end, start); - if (llabs(diff - DELAY * USEC_PER_SEC) > USEC_PER_SEC / 2) { - printf("Diff too high: %lld..", diff); + if (llabs(diff - DELAY * NSEC_PER_SEC) > NSEC_PER_SEC / 2) { + printf("Diff too high: %lld ns..", diff); return -1; } @@ -98,22 +104,25 @@ static int check_diff(struct timeval start, struct timeval end) static void check_itimer(int which, const char *name) { - struct timeval start, end; + struct timespec start, end; struct itimerval val = { .it_value.tv_sec = DELAY, }; + int clock_id = CLOCK_REALTIME; done = 0; if (which == ITIMER_VIRTUAL) signal(SIGVTALRM, sig_handler); - else if (which == ITIMER_PROF) + else if (which == ITIMER_PROF) { + clock_id = CLOCK_THREAD_CPUTIME_ID; signal(SIGPROF, sig_handler); + } else if (which == ITIMER_REAL) signal(SIGALRM, sig_handler); - if (gettimeofday(&start, NULL) < 0) - fatal_error(name, "gettimeofday()"); + if (clock_gettime(clock_id, &start)) + fatal_error(name, "clock_gettime()"); if (setitimer(which, &val, NULL) < 0) fatal_error(name, "setitimer()"); @@ -125,18 +134,19 @@ static void check_itimer(int which, const char *name) else if (which == ITIMER_REAL) idle_loop(); - if (gettimeofday(&end, NULL) < 0) - fatal_error(name, "gettimeofday()"); + if (clock_gettime(clock_id, &end)) + fatal_error(name, "clock_gettime()"); ksft_test_result(check_diff(start, end) == 0, "%s\n", name); } static void check_timer_create(int which, const char *name) { - struct timeval start, end; + struct timespec start, end; struct itimerspec val = { .it_value.tv_sec = DELAY, }; + int clock_id = CLOCK_REALTIME; timer_t id; done = 0; @@ -147,16 +157,16 @@ static void check_timer_create(int which, const char *name) if (signal(SIGALRM, sig_handler) == SIG_ERR) fatal_error(name, "signal()"); - if (gettimeofday(&start, NULL) < 0) - fatal_error(name, "gettimeofday()"); + if (clock_gettime(clock_id, &start)) + fatal_error(name, "clock_gettime()"); if (timer_settime(id, 0, &val, NULL) < 0) fatal_error(name, "timer_settime()"); user_loop(); - if (gettimeofday(&end, NULL) < 0) - fatal_error(name, "gettimeofday()"); + if (clock_gettime(clock_id, &end)) + fatal_error(name, "clock_gettime()"); ksft_test_result(check_diff(start, end) == 0, "timer_create() per %s\n", name); @@ -444,15 +454,6 @@ static void check_delete(void) ksft_test_result(!tsig.signals, "check_delete\n"); } -static inline int64_t calcdiff_ns(struct timespec t1, struct timespec t2) -{ - int64_t diff; - - diff = NSEC_PER_SEC * (int64_t)((int) t1.tv_sec - (int) t2.tv_sec); - diff += ((int) t1.tv_nsec - (int) t2.tv_nsec); - return diff; -} - static void check_sigev_none(int which, const char *name) { struct timespec start, now; -- 2.55.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel