Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2019189pxb; Mon, 18 Jan 2021 06:17:52 -0800 (PST) X-Google-Smtp-Source: ABdhPJwKfoAOlec8d9yRnG9DKcVQipILeVYCG9UG8dS1W2N7yIWuUPN2ZB87BdIYSCAax5DKHUD5 X-Received: by 2002:a05:6402:144:: with SMTP id s4mr5201644edu.63.1610979472631; Mon, 18 Jan 2021 06:17:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1610979472; cv=none; d=google.com; s=arc-20160816; b=fDyCxzLapDMXqKuVwdTjiqKCurJfQmgUdZgxpSKlFH1A2BMBJy3lJyTKa8H+IMkE8H 7JWMbOXtydB4MU28P1q3nac93SpIRWm/4mdnHJLKC8LNIhmfuoB4aZvmxTJCmL8UHBsx N0oEH2+3zW2DaQSQNMC9/NbS3lW5e9s2SDi5s9gKgj9WxtIMC0XVuyd1dfcUtPmXQ2nL 91sGXfzM1vG2rmTsp6C8Ec5R4Jvo8/8I7PhVOdkJR2BnPaOBqWmq3Ujb/XJ8uOLxOLKR YE2l3Ocq0OloXaCM2tCo6JPrI4OOQFnBU0s4rPcRlJs0hk+ISnJk1rjwC0eGrm3T8yyN YNZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=YTfhLTeONPL73/4VsK/L5S1/wO9PGRB6hEc7qRvlGaU=; b=TipfDruhtyXDDFTz+fc2jLeJb25ih1/q7P8U1N4T0emfQx216iwpw/8+tpdJxm/Ehx WBxSsAqeZwrDI+ZrbklsPyPfABDgTSnq9K1BSQ3isWBIrnSP19ZqNJrr8zNK9zGW8q1/ pVAeNkWal+cq6u2o+H7De2SqTppyS33ApRwbr6Cj2hir1qQsJe2ARskW762G8Yl2I9Kj +cn5Ki0TSC24xQB+YptOmwpSDm6NC0DGkBVFXxeEyAm7I4mL9jP9QUetNXGcbfTEK4l7 tVkw9ixEctXEotpCWQQs+1MVfzwXGHha0kl3mL8nCmxnVndvHW6weL307QMoOHOdfa9g EXQQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="tgcy/L3H"; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o9si6600158ejr.672.2021.01.18.06.17.04; Mon, 18 Jan 2021 06:17:52 -0800 (PST) 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=@gmail.com header.s=20161025 header.b="tgcy/L3H"; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392329AbhAROMn (ORCPT + 99 others); Mon, 18 Jan 2021 09:12:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50056 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2392623AbhAROLy (ORCPT ); Mon, 18 Jan 2021 09:11:54 -0500 Received: from mail-ot1-x329.google.com (mail-ot1-x329.google.com [IPv6:2607:f8b0:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E8A72C061573 for ; Mon, 18 Jan 2021 06:11:12 -0800 (PST) Received: by mail-ot1-x329.google.com with SMTP id w3so16297496otp.13 for ; Mon, 18 Jan 2021 06:11:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=YTfhLTeONPL73/4VsK/L5S1/wO9PGRB6hEc7qRvlGaU=; b=tgcy/L3H/Qw7bHHyLmey5F+KqM83VfkcQx7AsVH3k+511OrzZYbnp6uoRjbsQUgVoZ uYFJnhcKFFvimpHV+b5EMZ/OaiuWtVFV+/zH9IXwYphxU5/h1eRLSu1TYQnLqbsMrzaZ CTIKaxNLPsoEXEKUg9hFgJ/QMsQlmF7EZKp1xPIPBmQ6ogBhLtDquPS2rp4KD8nAROUW drgwqIX8hELlxTfE94k6es3kfiBjVSQ0t3l+9U/hOSi0b3zftPHdEqy3ZsOP2rs9BRw6 RfxzO2KHbWFHwCvZSJGnLYP35RGmzgNAeAHnDdkrYrMfOz0B7ciTu62AIggE1rE5Zh8l m0hQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=YTfhLTeONPL73/4VsK/L5S1/wO9PGRB6hEc7qRvlGaU=; b=ZBwW4I01X/5Bfpdy6nmCwp0mulD2TFzVm/2wprEv9T5Lv1MJvFYnzlPxJYtr4AwhLW f1i1Sji9G1AE40Jfl9qN1s9vnMJM4YRvLLcyqp6HGSJiuvaG/AO5l8Pz4uN4nWNiwf71 ugVj428et/dHEoTVcQoKL2QnT4H4QbF3OsD1BB4Lqs3oJuhUxR6IePQ6zaBJzX7vOmvn 7nt0lS1lchb5iLkPNPn0vnVxIMxhMPO0XAkKOqfN19H6gOBnSBF5c0DkuWNJa9VQLVCZ +B4gltFNs0rc7f1XWgUUgqQQ9gn6XRl64Kka9eC796Y9bhZYtNJJKGSxH/x1ynoFBs2r d+lg== X-Gm-Message-State: AOAM531RjCEms755Dh+RsERulrPnJlV1a7rYcws1gi7+frfdXbV92lgA ojenmPeAPhT/waFTwb+XrYgmapSP4X4RvkYjeLh9Tul34KGBIw== X-Received: by 2002:a9d:e91:: with SMTP id 17mr17287891otj.237.1610979072263; Mon, 18 Jan 2021 06:11:12 -0800 (PST) MIME-Version: 1.0 References: <20210117123104.27589-1-benbjiang@tencent.com> In-Reply-To: From: Jiang Biao Date: Mon, 18 Jan 2021 22:11:01 +0800 Message-ID: Subject: Re: [PATCH] sched/fair: add protection for delta of wait time To: Vincent Guittot Cc: Ingo Molnar , Peter Zijlstra , Juri Lelli , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Daniel Bristot de Oliveira , linux-kernel , Jiang Biao Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Vincent On Mon, 18 Jan 2021 at 15:56, Vincent Guittot wrote: > > On Sun, 17 Jan 2021 at 13:31, Jiang Biao wrote: > > > > From: Jiang Biao > > > > delta in update_stats_wait_end() might be negative, which would > > make following statistics go wrong. > > Could you describe the use case that generates a negative delta ? > > rq_clock is always increasing so this should not lead to a negative > value even if update_stats_wait_end/start are not called in the right > order, Yes, indeed. > This situation could happen after a migration if we forgot to call > update_stats_wait_start The migration case was what I worried about, but no regular use case comes into my mind. :) As an extreme case, would it be a problem if we disable/re-enable sched_schedstats during migration? static inline void update_stats_wait_start(struct cfs_rq *cfs_rq, struct sched_entity *se) { u64 wait_start, prev_wait_start; if (!schedstat_enabled()) // disable during migration return; // return here, and skip updating wait_start ... } static inline void update_stats_wait_end(struct cfs_rq *cfs_rq, struct sched_entity *se) { struct task_struct *p; u64 delta; if (!schedstat_enabled()) // re-enable again return; /* * When the sched_schedstat changes from 0 to 1, some sched se * maybe already in the runqueue, the se->statistics.wait_start * will be 0.So it will let the delta wrong. We need to avoid this * scenario. */ if (unlikely(!schedstat_val(se->statistics.wait_start))) return; //stale wait_start which might be bigger than rq_clock would be used. -) delta = rq_clock(rq_of(cfs_rq)) - schedstat_val(se->statistics.wait_start); ... Thanks a lot. Regards, Jiang } > > > > > Add protection for delta of wait time, like what have been done in > > update_stats_enqueue_sleeper() for deltas of sleep/block time. > > > > Signed-off-by: Jiang Biao > > --- > > kernel/sched/fair.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > > index c0374c1152e0..ac950ac950bc 100644 > > --- a/kernel/sched/fair.c > > +++ b/kernel/sched/fair.c > > @@ -917,6 +917,9 @@ update_stats_wait_end(struct cfs_rq *cfs_rq, struct sched_entity *se) > > > > delta = rq_clock(rq_of(cfs_rq)) - schedstat_val(se->statistics.wait_start); > > > > + if ((s64)delta < 0) > > + delta = 0; > > + > > if (entity_is_task(se)) { > > p = task_of(se); > > if (task_on_rq_migrating(p)) { > > -- > > 2.21.0 > >