From patchwork Tue Sep 15 19:36:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Hromatka X-Patchwork-Id: 11777645 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A78B059D for ; Tue, 15 Sep 2020 19:37:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8826F206A4 for ; Tue, 15 Sep 2020 19:37:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="BXy8UiJ3" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727987AbgIOTgr (ORCPT ); Tue, 15 Sep 2020 15:36:47 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:49274 "EHLO userp2120.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727631AbgIOTgm (ORCPT ); Tue, 15 Sep 2020 15:36:42 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 08FJUlPx110921; Tue, 15 Sep 2020 19:36:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=corp-2020-01-29; bh=eXkcvuozkDBMpAiD4/7I8c5AgA5RqF/C5+lcxERnyHY=; b=BXy8UiJ3ZrCKDL6IFUTrWq6RS3XDJC0UpsatIAl3eZk4rzRRUhLZ5YhSlq9s09BX8nRH Q3UPL2AG8VflmbBENDX/3am6VWvWhft74RnZeaKxxEQPlBomDzdcy2d22LnGxKilcv+q 20ZxHPGDHwxDbFxUFC+B5JFqtn2k2mGsLMb2E24w86bpSvlZZUjYPsVgjDFjZH4y8w8H j2m+EEC6EAGcwVCyCrmMFpx5eZnCFcMqCuaCeckXsMDR02xu72hf7OczO9NkyS4HDiI/ JTNa5+q1TCcJhUH1CHmdEc7lzA1mnBA07Egy90zqlVHRYRTWxF0BlEWu14zUptb8sllv VA== Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by userp2120.oracle.com with ESMTP id 33j91dgu4y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 15 Sep 2020 19:36:31 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 08FJTwj7172866; Tue, 15 Sep 2020 19:36:30 GMT Received: from pps.reinject (localhost [127.0.0.1]) by aserp3030.oracle.com with ESMTP id 33h7wpn3a6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 15 Sep 2020 19:36:30 +0000 Received: from aserp3030.oracle.com (aserp3030.oracle.com [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 08FJZuSP187206; Tue, 15 Sep 2020 19:36:29 GMT Received: from localhost.localdomain (dhcp-10-65-133-238.vpn.oracle.com [10.65.133.238]) by aserp3030.oracle.com with ESMTP id 33h7wpn39m-2; Tue, 15 Sep 2020 19:36:29 +0000 From: Tom Hromatka To: tom.hromatka@oracle.com, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, fweisbec@gmail.com, tglx@linutronix.de, mingo@kernel.org, adobriyan@gmail.com Subject: [PATCH v2 1/2] tick-sched: Do not clear the iowait and idle times Date: Tue, 15 Sep 2020 13:36:26 -0600 Message-Id: <20200915193627.85423-2-tom.hromatka@oracle.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: <20200915193627.85423-1-tom.hromatka@oracle.com> References: <20200915193627.85423-1-tom.hromatka@oracle.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9745 signatures=668679 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 impostorscore=0 priorityscore=1501 malwarescore=0 suspectscore=0 mlxlogscore=999 clxscore=1015 adultscore=0 lowpriorityscore=0 spamscore=0 mlxscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2006250000 definitions=main-2009150152 Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Prior to this commit, the cpu idle and iowait data in /proc/stat were cleared when a CPU goes down. When the CPU came back online, both idle and iowait times were restarted from 0. This commit preserves the CPU's idle and iowait values when a CPU goes offline and comes back online. Signed-off-by: Tom Hromatka --- kernel/time/tick-sched.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index f0199a4ba1ad..4fbf67171dde 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c @@ -1383,13 +1383,22 @@ void tick_setup_sched_timer(void) void tick_cancel_sched_timer(int cpu) { struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu); + ktime_t idle_sleeptime, iowait_sleeptime; # ifdef CONFIG_HIGH_RES_TIMERS if (ts->sched_timer.base) hrtimer_cancel(&ts->sched_timer); # endif + /* + * Preserve idle and iowait sleep times accross a CPU offline/online + * sequence as they are accumulative. + */ + idle_sleeptime = ts->idle_sleeptime; + iowait_sleeptime = ts->iowait_sleeptime; memset(ts, 0, sizeof(*ts)); + ts->idle_sleeptime = idle_sleeptime; + ts->iowait_sleeptime = iowait_sleeptime; } #endif From patchwork Tue Sep 15 19:36:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Hromatka X-Patchwork-Id: 11777641 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B3664618 for ; Tue, 15 Sep 2020 19:36:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 8EB0F2080C for ; Tue, 15 Sep 2020 19:36:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="Ci+wtht9" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727993AbgIOTgs (ORCPT ); Tue, 15 Sep 2020 15:36:48 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:49272 "EHLO userp2120.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727822AbgIOTgm (ORCPT ); Tue, 15 Sep 2020 15:36:42 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 08FJUJ4P110760; Tue, 15 Sep 2020 19:36:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=corp-2020-01-29; bh=M+FvkCbclb/hSWMg93jzDNHQCnEcVHjxVzIK1ptGD3s=; b=Ci+wtht9MKp2e7z7QUggQ1E+x6Z0KpNFG14yE/9WnmAHNLufpIN09RorsgDZBfvMk+dW PKARrA79t0dKbaamhw9IstcSlm6I6AXG34S1oiMEHIMOtzAzseKIHvcAZwkmffZNQ4oD uZxnjrdUujtP/owBMZO2pKfTuE3j2wsGxj+qtXQfeqaBaGkLHx+Db0swM+VXZwpmS3Ct G5hgllPmOwxz6Rginavqcn9YQ7iKqSKLD9MycJ2E+mRYQbRLtX0t22UZR+SIUWltqcue /LXpNIOsOl+yFQMcRABRIS/lcLZni9j6YtfkcWV197m/wjchNLjOy3BvY6hKjwqcIOFa YQ== Received: from aserp3030.oracle.com (aserp3030.oracle.com [141.146.126.71]) by userp2120.oracle.com with ESMTP id 33j91dgu51-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 15 Sep 2020 19:36:32 +0000 Received: from pps.filterd (aserp3030.oracle.com [127.0.0.1]) by aserp3030.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 08FJTvK5172786; Tue, 15 Sep 2020 19:36:31 GMT Received: from pps.reinject (localhost [127.0.0.1]) by aserp3030.oracle.com with ESMTP id 33h7wpn3av-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 15 Sep 2020 19:36:31 +0000 Received: from aserp3030.oracle.com (aserp3030.oracle.com [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 08FJZuSR187206; Tue, 15 Sep 2020 19:36:31 GMT Received: from localhost.localdomain (dhcp-10-65-133-238.vpn.oracle.com [10.65.133.238]) by aserp3030.oracle.com with ESMTP id 33h7wpn39m-3; Tue, 15 Sep 2020 19:36:30 +0000 From: Tom Hromatka To: tom.hromatka@oracle.com, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, fweisbec@gmail.com, tglx@linutronix.de, mingo@kernel.org, adobriyan@gmail.com Subject: [PATCH v2 2/2] /proc/stat: Simplify iowait and idle calculations when cpu is offline Date: Tue, 15 Sep 2020 13:36:27 -0600 Message-Id: <20200915193627.85423-3-tom.hromatka@oracle.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: <20200915193627.85423-1-tom.hromatka@oracle.com> References: <20200915193627.85423-1-tom.hromatka@oracle.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9745 signatures=668679 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 phishscore=0 impostorscore=0 priorityscore=1501 malwarescore=0 suspectscore=0 mlxlogscore=999 clxscore=1015 adultscore=0 lowpriorityscore=0 spamscore=0 mlxscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2006250000 definitions=main-2009150152 Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org Prior to this commit, the cpu idle and iowait data in /proc/stat used different data sources based upon whether the CPU was online or not. This would cause spikes in the cpu idle and iowait data. This patch uses the same data source, get_cpu_{idle,iowait}_time_us(), whether the CPU is online or not. This patch and the preceding patch, "tick-sched: Do not clear the iowait and idle times", ensure that the cpu idle and iowait data are always increasing. Signed-off-by: Tom Hromatka --- fs/proc/stat.c | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/fs/proc/stat.c b/fs/proc/stat.c index 46b3293015fe..198f3c50cb91 100644 --- a/fs/proc/stat.c +++ b/fs/proc/stat.c @@ -47,34 +47,12 @@ static u64 get_iowait_time(struct kernel_cpustat *kcs, int cpu) static u64 get_idle_time(struct kernel_cpustat *kcs, int cpu) { - u64 idle, idle_usecs = -1ULL; - - if (cpu_online(cpu)) - idle_usecs = get_cpu_idle_time_us(cpu, NULL); - - if (idle_usecs == -1ULL) - /* !NO_HZ or cpu offline so we can rely on cpustat.idle */ - idle = kcs->cpustat[CPUTIME_IDLE]; - else - idle = idle_usecs * NSEC_PER_USEC; - - return idle; + return get_cpu_idle_time_us(cpu, NULL) * NSEC_PER_USEC; } static u64 get_iowait_time(struct kernel_cpustat *kcs, int cpu) { - u64 iowait, iowait_usecs = -1ULL; - - if (cpu_online(cpu)) - iowait_usecs = get_cpu_iowait_time_us(cpu, NULL); - - if (iowait_usecs == -1ULL) - /* !NO_HZ or cpu offline so we can rely on cpustat.iowait */ - iowait = kcs->cpustat[CPUTIME_IOWAIT]; - else - iowait = iowait_usecs * NSEC_PER_USEC; - - return iowait; + return get_cpu_iowait_time_us(cpu, NULL) * NSEC_PER_USEC; } #endif