Received: by 2002:ac0:a679:0:0:0:0:0 with SMTP id p54csp1647247imp; Fri, 22 Feb 2019 07:51:29 -0800 (PST) X-Google-Smtp-Source: AHgI3Ib3xBD52kxqZCyUyINtjHp7o95GPGXyt17dK+gZP3zfp2DzamGSNu4GpU5WvAGFPAeuzBzZ X-Received: by 2002:a17:902:7207:: with SMTP id ba7mr4732015plb.16.1550850689410; Fri, 22 Feb 2019 07:51:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550850689; cv=none; d=google.com; s=arc-20160816; b=soxXxP21E6Ik2hc65jxrU6szWfSOmJVH2V9VWTp5HgIjC6VfsO6I31Rwy2zzne9dL+ vJ2osN51BCrrje+0bxXwU+cNU7hxwUwoYEKwoCj8c/2P8hlbDfs9IFGDk7lAdp5KucKn RvVfDLUkYgMhx5wm8lE0wFw9UUBqE7YCIDGBWmUH9x1mbMkLqE3rOM+qP5mk4myMsSVr 87lXEM++1EcXzUxOOaMrUBKKI219WOWztF2HfCUVE6tR1bZ24EDeLeEp85bBxI6gRHjH gwnyMjZiH35CVrwQH5TY+UjYAFRW0/URsVwjrA2eEO+fJZ5kky2s3mYwsiX/Vo4AT9RI xr2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=waDKmwfCMWZTfgBGO1IiE2faFKVK19as+H4yh8dMskw=; b=HlUj5ahlTslSPy9P9lJeRmt5+G304XpTPTrZSc1RphHmfwD9/Gf32NFJJET1dMi5F3 osoi7S82+fP0mYKBcYHANe6YlxZsh2SXVMOj+4sBKXgsXQxLu+y+iF4LYwRp5fyRrW+/ DbH+diPULjeL0iFyud58HdbLy6B+Xurh/4lM631H7NQA4AZht/8a+3fhtWSi96z76JO5 pG57dfDSIs9ntuHIbhmFpPU/yzZwb1uNTsjncnO7z7RgwjCL9/ohghf/VEX40HpLcB3j LwN0gz16/RhmxNWo6U/FCOg6nnbOxCl1U9f+XzGEmYz9TilPgAePLm6MFWXgBKQ1X5dw j+lg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k19si1568417pfk.281.2019.02.22.07.51.13; Fri, 22 Feb 2019 07:51:29 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726776AbfBVPur (ORCPT + 99 others); Fri, 22 Feb 2019 10:50:47 -0500 Received: from 61-228-50-252.dynamic-ip.hinet.net ([61.228.50.252]:50272 "EHLO E6440.gar.corp.intel.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725887AbfBVPur (ORCPT ); Fri, 22 Feb 2019 10:50:47 -0500 Received: from E6440.gar.corp.intel.com (localhost [127.0.0.1]) by E6440.gar.corp.intel.com (Postfix) with ESMTP id 0C64BC016C; Fri, 22 Feb 2019 23:50:46 +0800 (CST) From: Harry Pan To: LKML Cc: gs0622@gmail.com, Harry Pan , rjw@rjwysocki.net, pavel@ucw.cz, len.brown@intel.com, linux-pm@vger.kernel.org Subject: [PATCH v5] PM / sleep: measure the time of filesystem syncing Date: Fri, 22 Feb 2019 23:49:04 +0800 Message-Id: <20190222154904.6260-1-harry.pan@intel.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20190220161840.994-1-harry.pan@intel.com> References: <20190220161840.994-1-harry.pan@intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch gives the reader an intuitive metric of the time cost by the kernel issuing a filesystem sync during system sleep; although developer can guess by the timestamp of next log or enable the ftrace power event for manual calculation, this manner is easier to read and benefits the automatic script. v2: simplify the variables, apply the simplest form of ktime API. v3: reduce conditional compilation, rectify profiling in better syntax v4: avoid interposition, profile on hibernation, rectify printk format v5: introduce sync helper shared by suspend, hibernate, and snapshot Signed-off-by: Harry Pan --- include/linux/suspend.h | 3 +++ kernel/power/hibernate.c | 5 +---- kernel/power/main.c | 15 +++++++++++++++ kernel/power/suspend.c | 13 +++++-------- kernel/power/user.c | 5 +---- 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/include/linux/suspend.h b/include/linux/suspend.h index 3f529ad9a9d2..6b3ea9ea6a9e 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h @@ -425,6 +425,7 @@ void restore_processor_state(void); /* kernel/power/main.c */ extern int register_pm_notifier(struct notifier_block *nb); extern int unregister_pm_notifier(struct notifier_block *nb); +extern void ksys_sync_helper(void); #define pm_notifier(fn, pri) { \ static struct notifier_block fn##_nb = \ @@ -462,6 +463,8 @@ static inline int unregister_pm_notifier(struct notifier_block *nb) return 0; } +static inline void ksys_sync_helper(void) {} + #define pm_notifier(fn, pri) do { (void)(fn); } while (0) static inline bool pm_wakeup_pending(void) { return false; } diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index abef759de7c8..cc105ecd9c07 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -14,7 +14,6 @@ #include #include -#include #include #include #include @@ -709,9 +708,7 @@ int hibernate(void) goto Exit; } - pr_info("Syncing filesystems ... \n"); - ksys_sync(); - pr_info("done.\n"); + ksys_sync_helper(); error = freeze_processes(); if (error) diff --git a/kernel/power/main.c b/kernel/power/main.c index 35b50823d83b..a08dcc743f31 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "power.h" @@ -51,6 +52,20 @@ void unlock_system_sleep(void) } EXPORT_SYMBOL_GPL(unlock_system_sleep); +void ksys_sync_helper(void) +{ + ktime_t start; + s64 elapsed_msecs; + + start = ktime_get(); + ksys_sync(); + elapsed_msecs = ktime_to_ms(ktime_sub(ktime_get(), start)); + pr_info("Filesystems sync: %lld.%03lld seconds\n", + elapsed_msecs / MSEC_PER_SEC, + elapsed_msecs % MSEC_PER_SEC); +} +EXPORT_SYMBOL_GPL(ksys_sync_helper); + /* Routines for PM-transition notifications */ static BLOCKING_NOTIFIER_HEAD(pm_chain_head); diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 0bd595a0b610..e39059dea38b 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -568,13 +567,11 @@ static int enter_state(suspend_state_t state) if (state == PM_SUSPEND_TO_IDLE) s2idle_begin(); -#ifndef CONFIG_SUSPEND_SKIP_SYNC - trace_suspend_resume(TPS("sync_filesystems"), 0, true); - pr_info("Syncing filesystems ... "); - ksys_sync(); - pr_cont("done.\n"); - trace_suspend_resume(TPS("sync_filesystems"), 0, false); -#endif + if (!IS_ENABLED(CONFIG_SUSPEND_SKIP_SYNC)) { + trace_suspend_resume(TPS("sync_filesystems"), 0, true); + ksys_sync_helper(); + trace_suspend_resume(TPS("sync_filesystems"), 0, false); + } pm_pr_dbg("Preparing system for sleep (%s)\n", mem_sleep_labels[state]); pm_suspend_clear_flags(); diff --git a/kernel/power/user.c b/kernel/power/user.c index 2d8b60a3c86b..cb24e840a3e6 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c @@ -10,7 +10,6 @@ */ #include -#include #include #include #include @@ -228,9 +227,7 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd, if (data->frozen) break; - printk("Syncing filesystems ... "); - ksys_sync(); - printk("done.\n"); + ksys_sync_helper(); error = freeze_processes(); if (error) -- 2.18.1