From nobody Wed Dec 31 08:39:20 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CA92CC4167D for ; Mon, 6 Nov 2023 19:36:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232748AbjKFTgt (ORCPT ); Mon, 6 Nov 2023 14:36:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52396 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232721AbjKFTgJ (ORCPT ); Mon, 6 Nov 2023 14:36:09 -0500 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 38DC21723 for ; Mon, 6 Nov 2023 11:36:01 -0800 (PST) Received: by mail-pj1-x1049.google.com with SMTP id 98e67ed59e1d1-280465be3c9so3227574a91.1 for ; Mon, 06 Nov 2023 11:36:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1699299360; x=1699904160; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=tlM0fUGrXkJ77vpxrL8Ua3abDkMWMrcPq7YvjnZzG1k=; b=RK/X8K9qOxJs3epYdFPaemyKI7J1R12sGYnQSKcCYMnAzRGStO1qECjUhuu9m/2no+ jT3qummZDFbo/w4tGzL4t3uD+f1kSEAjF0shzjvcNvhrGYhDDBMWe+l5OkjS78lmnZ7N KFJNHuwDZ2H6KvskuOnzyhWz19C6+2d+Un3DhxFKReFYi5W/wk+V722W8dP7tN7RHmri PSYbBBYITsCCD/jWtYamBpSH3yF2pY1YPGVHNDzX57eB3wMhRmhJwGjLDCvh2URAM+Ix AC3mm6rXaXvgCz315aIPTeoYwyZvWK1F6HKbUxefyNXigAhRudpk6ymPxlNeS93xQ13n kvZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699299360; x=1699904160; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tlM0fUGrXkJ77vpxrL8Ua3abDkMWMrcPq7YvjnZzG1k=; b=qyYMmo+e/hAVeJHtFFqwVDUK36INljF+89IkgTk8icVj+qVhoIzrma7YJ7QjGTjanf lxyFoeL2njJauHOswNCOk+5zGMOd/yRkQ3SHx/AxqB6aGwFgJeDr14Gd3lz/yXzBYDEB sHybPOmBDZZzk7zDbnJHp1l8nYyU8i/sZSRHZ3js3+InCQCY8H+tzEjlqQOub0v+l/9z RuCPCPj4aG80O+SaFoQA467ce8yjPExsCuyXfvkbrZpTv0aC5WWerYMAPfJgxyyeewFF hP37F5uHX7l7xqcf5+ud0VJtgK6yaJLfta7XHjhWTYOlmjlkAgXvR3TzPX2WJkC6DJHe jSJw== X-Gm-Message-State: AOJu0YyClRRnkL0/WV5xu2RsXyU547J+uq6cansDYl5BBQlgy4nNduDR FbKPlGB/6EsFYlz+X7CAbRn7UTQtPp0KfcNaUUs6IPnw/oGJlM8qqquMhx5eyCxOFLsjc9ZrC3p lLcV/JUwo7R3exEi/9viNmd2ANWphd1GrECz+06Ek6lyCM0fs7TGCtnwmn70jL7xVAPkYo1A= X-Google-Smtp-Source: AGHT+IFuSY4TKULEwQRlAhcK4DIy+tTFWR3TVxo3zbojlzz0Z6KY40zo8comijA7uSLG852mFFc+HVZbfhED X-Received: from jstultz-noogler2.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:600]) (user=jstultz job=sendgmr) by 2002:a17:90a:c708:b0:280:47ba:7685 with SMTP id o8-20020a17090ac70800b0028047ba7685mr14653pjt.0.1699299359325; Mon, 06 Nov 2023 11:35:59 -0800 (PST) Date: Mon, 6 Nov 2023 19:34:55 +0000 In-Reply-To: <20231106193524.866104-1-jstultz@google.com> Mime-Version: 1.0 References: <20231106193524.866104-1-jstultz@google.com> X-Mailer: git-send-email 2.42.0.869.gea05f2083d-goog Message-ID: <20231106193524.866104-13-jstultz@google.com> Subject: [PATCH v6 12/20] sched: Fix runtime accounting w/ split exec & sched contexts From: John Stultz To: LKML Cc: John Stultz , Joel Fernandes , Qais Yousef , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Valentin Schneider , Steven Rostedt , Ben Segall , Zimuzo Ezeozue , Youssef Esmat , Mel Gorman , Daniel Bristot de Oliveira , Will Deacon , Waiman Long , Boqun Feng , "Paul E . McKenney" , kernel-team@android.com Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The idea here is we want to charge the scheduler-context task's vruntime but charge the execution-context task's sum_exec_runtime. This way cputime accounting goes against the task actually running but vruntime accounting goes against the selected task so we get proper fairness. Cc: Joel Fernandes Cc: Qais Yousef Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Juri Lelli Cc: Vincent Guittot Cc: Dietmar Eggemann Cc: Valentin Schneider Cc: Steven Rostedt Cc: Ben Segall Cc: Zimuzo Ezeozue Cc: Youssef Esmat Cc: Mel Gorman Cc: Daniel Bristot de Oliveira Cc: Will Deacon Cc: Waiman Long Cc: Boqun Feng Cc: "Paul E . McKenney" Cc: kernel-team@android.com Signed-off-by: John Stultz --- kernel/sched/fair.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 3d5c1ec34bf7..1aca675985b2 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -1144,22 +1144,36 @@ static void update_tg_load_avg(struct cfs_rq *cfs_r= q) } #endif /* CONFIG_SMP */ =20 -static s64 update_curr_se(struct rq *rq, struct sched_entity *curr) +static s64 update_curr_se(struct rq *rq, struct sched_entity *se) { u64 now =3D rq_clock_task(rq); s64 delta_exec; =20 - delta_exec =3D now - curr->exec_start; + /* Calculate the delta from selected se */ + delta_exec =3D now - se->exec_start; if (unlikely(delta_exec <=3D 0)) return delta_exec; =20 - curr->exec_start =3D now; - curr->sum_exec_runtime +=3D delta_exec; + /* Update selected se's exec_start */ + se->exec_start =3D now; + if (entity_is_task(se)) { + struct task_struct *running =3D rq->curr; + /* + * If se is a task, we account the time + * against the running task, as w/ proxy-exec + * they may not be the same. + */ + running->se.exec_start =3D now; + running->se.sum_exec_runtime +=3D delta_exec; + } else { + /* If not task, account the time against se */ + se->sum_exec_runtime +=3D delta_exec; + } =20 if (schedstat_enabled()) { struct sched_statistics *stats; =20 - stats =3D __schedstats_from_se(curr); + stats =3D __schedstats_from_se(se); __schedstat_set(stats->exec_max, max(delta_exec, stats->exec_max)); } --=20 2.42.0.869.gea05f2083d-goog