Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1032268pxj; Fri, 4 Jun 2021 04:33:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxsQyhjkCa73zwdXQtPCtTG3OjpHfD+p7S6Oa1mW48kME9MyRo2BYeMTeS6rMO0bt1Dzrzg X-Received: by 2002:a17:906:63d2:: with SMTP id u18mr3729903ejk.186.1622806431922; Fri, 04 Jun 2021 04:33:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622806431; cv=none; d=google.com; s=arc-20160816; b=A/MqjsV//7JdmbOJxBzrHQ6zsKrR8S75tEutNK91LY1Jea21ESAsK3CNkuJr1AHmG6 EuxRbyqcEy0J+3OMDllrO7VNQCmtNHDjqpN8GVDLLsQoBoJp5PtJZ4wfYxGTL2zRRY67 4M69RuADcUIK82k7zOCe0Vfgp5FJMa9AFmYp+E0Q36a72YfYOROG1hxHDgXi7XuTyUb4 YVGnGC3FuTwXaNeAcH2auY8a1W3O+tSpzHDFeubIO6XHML90IDFqag4E5GyBtskguH6T tRvbNGjShRw4B+xEpfwJqC4hXwFGAG4CcreDTIaYt87e0YgiNb/Y9X5f+65NKV9tmC+Y oVxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=yg04G9O6HWG52AZRMLaj/Xe53t3EPijzcWTzXJnEffE=; b=au8o97xCtG9NQLpvtJ57+cbtiz5GqMz3a1rAgTRS31w7sF5IifrDjMNkN3p7Q2szQ9 kSHXsIZ5Ly6P/EqBu0GyyxXnvr0MB/oQ7MlG1Zk1spw5jomZ3EdWQkk78Bj3cJhTNdk+ 86pV9Y25rZzOiOEiZ/LzrLBRTlSZPVEpVtioJV55R+d0T+MeSux5XjwhCSDGTNm3ydYp PkQV8k9qH6EmsxeX/Lx1YFBj8uxgcwmr+5g3s4yY+Aqj2RrN3R8587+WXB6ybfpKyAjF XuXAZj+xdwBzNcT6HgjfkQVAA6Sdv/6PD2SprZwVGim5Ok1gqOgTo6otlcDbG9Tx0lOi QKKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=i1gqa7PA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id gt10si4087272ejc.392.2021.06.04.04.33.28; Fri, 04 Jun 2021 04:33:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=i1gqa7PA; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230161AbhFDLdz (ORCPT + 99 others); Fri, 4 Jun 2021 07:33:55 -0400 Received: from mail.kernel.org ([198.145.29.99]:34364 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230150AbhFDLdy (ORCPT ); Fri, 4 Jun 2021 07:33:54 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 19E5061432; Fri, 4 Jun 2021 11:32:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1622806328; bh=Dz27t/9kX5xl2Q7UkS0YP0Ly+RNmkd2lVoIIiDuarCM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=i1gqa7PAQqM/GeB8oOJGQS3I5j+4KM9VqjguMj+6TGXV8+J9WlpKOqYhPtv11pcno JLUwz24nBVQQnJMjEU0ZtAsEgJvU0rx87OavbXao/EWoIXDE3ORExzGaFYE7KXAYRL dkdzZrDGO2M1CumkQETc9TJ8lrHcZz9g+96TCyvwKIznuNOBpGqMrpsEzL1rDf1UVD LvYxJ3ig+A2KBgaXRgFKPFBzaUw0qrFldUi+ArTlO+7mHSjw6wO3jt9K30/JcrQ08Y wmw4m/ebYVYhlY43vac5sLypc95NJ1ri0z1iPY7GplfCiWL4Y6yFMPRlJE3WrRfryu X17SN9dOYg6sQ== From: Frederic Weisbecker To: Thomas Gleixner Cc: LKML , Frederic Weisbecker , Peter Zijlstra , "Eric W . Biederman" , Oleg Nesterov , Ingo Molnar Subject: [PATCH 2/6] posix-cpu-timers: Don't start process wide cputime counter if timer is disabled Date: Fri, 4 Jun 2021 13:31:55 +0200 Message-Id: <20210604113159.26177-3-frederic@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210604113159.26177-1-frederic@kernel.org> References: <20210604113159.26177-1-frederic@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If timer_settime() is called with a 0 expiration on a timer that is already disabled, the process wide cputime counter will be started and won't ever get a chance to be stopped by stop_process_timer() since no timer is actually armed to be processed. This process wide counter might bring some performance hit due to the concurrent atomic additions at the thread group scope. The following snippet is enough to trigger the issue. void trigger_process_counter(void) { timer_t id; struct itimerspec val = { }; timer_create(CLOCK_PROCESS_CPUTIME_ID, NULL, &id); timer_settime(id, TIMER_ABSTIME, &val, NULL); timer_delete(id); } So make sure we don't needlessly start it. Signed-off-by: Frederic Weisbecker Cc: Oleg Nesterov Cc: Thomas Gleixner Cc: Peter Zijlstra (Intel) Cc: Ingo Molnar Cc: Eric W. Biederman --- kernel/time/posix-cpu-timers.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c index aa52fc85dbcb..132fd56fb1cd 100644 --- a/kernel/time/posix-cpu-timers.c +++ b/kernel/time/posix-cpu-timers.c @@ -632,10 +632,15 @@ static int posix_cpu_timer_set(struct k_itimer *timer, int timer_flags, * times (in arm_timer). With an absolute time, we must * check if it's already passed. In short, we need a sample. */ - if (CPUCLOCK_PERTHREAD(timer->it_clock)) + if (CPUCLOCK_PERTHREAD(timer->it_clock)) { val = cpu_clock_sample(clkid, p); - else - val = cpu_clock_sample_group(clkid, p, true); + } else { + /* + * Sample group but only start the process wide cputime counter + * if the timer is to be enabled. + */ + val = cpu_clock_sample_group(clkid, p, !!new_expires); + } if (old) { if (old_expires == 0) { -- 2.25.1