From patchwork Sat Sep 18 05:25:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhaoyang Huang X-Patchwork-Id: 12503603 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F179DC433EF for ; Sat, 18 Sep 2021 05:26:09 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 74FB161164 for ; Sat, 18 Sep 2021 05:26:09 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 74FB161164 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id DDBEA900002; Sat, 18 Sep 2021 01:26:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D8B926B0072; Sat, 18 Sep 2021 01:26:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C52FD900002; Sat, 18 Sep 2021 01:26:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0099.hostedemail.com [216.40.44.99]) by kanga.kvack.org (Postfix) with ESMTP id B1AD16B0071 for ; Sat, 18 Sep 2021 01:26:08 -0400 (EDT) Received: from smtpin30.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 6EE732BC36 for ; Sat, 18 Sep 2021 05:26:08 +0000 (UTC) X-FDA: 78599558016.30.B0B9EFB Received: from mail-pj1-f47.google.com (mail-pj1-f47.google.com [209.85.216.47]) by imf24.hostedemail.com (Postfix) with ESMTP id 3C872B0000B7 for ; Sat, 18 Sep 2021 05:26:08 +0000 (UTC) Received: by mail-pj1-f47.google.com with SMTP id i19so8322600pjv.4 for ; Fri, 17 Sep 2021 22:26:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id; bh=ud5nsy3x4vqodFGp3SJ1jgpGgfjSxfFrO/uXGKOTbO8=; b=HOLthhOpTFT7y8IqRwj6Us4XSuVF06cSOw8AOrqP2DRwUVvubqGuEf7tNY7w3ijPQe b93UVnhvy6iDRHpHjKjGEWA7ROLoRA4RWFRJB+hvlbWzQYQBtj51A/CnLZYwspfVdcvQ yQXK+KwX5+PQQVeUWKOOwChy1jicg9MF+aRkRZiGb9urIvRXz3x8g/GLFVdeXo151rsz iBpEO+nazfqVb0IR+Hb883UBZJ6imoOOeeEwgfZlDm5omZPfidnS8FZJ35ATZ+N0Y/a7 mMKLAZIhjWif9TiZJrpEjcLpkZ9Ng2Rpak7DgDManeNssUYw8/1yhL5Q8fj/V5R0X71z yV5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id; bh=ud5nsy3x4vqodFGp3SJ1jgpGgfjSxfFrO/uXGKOTbO8=; b=zGqS4r8c5m4z8qr0kpNO5+etTBpC6Laywzp0DDioL09AG7AacwDsbWZ/xqHJPSF0kT bufgA3ZXbCDObsBid2RR4eOmqxNTiOz5bTWwotEzWvktp+c596TxyZaoTFV266B9by1A r7DJceRtEsonz3jmBJe7XfOoWoXyEoxMmZyvPIE9HlbCfnFRoX48AYgTDm1IowSSS+YO rYEjZxs8Q6v8j6cGaS+u0wrhHnZ/DR9IPNuTgV9r5T4jvu9qGAnLT7J0TFUsFG4GZcHL 2xzI9RZBNtsOKljAk9QEzvmS6Idk0GZilQ6fMAhwULH+306x51mzttnCTpJGvaJGtsN1 0fFA== X-Gm-Message-State: AOAM53294kiHbzFwflzSjG3ORwjQtG7bxtql9dKSQ22ATMGd9vbGJPgP kKdpdJ2ROeJpKeXCkaKqORQ= X-Google-Smtp-Source: ABdhPJz5MFEu00uw8Rb0cW81i5zlhFL0k90ZtYwyzQjurSBmAPQf4Auqd3yHfX0tbz5+K4lnZsC2gw== X-Received: by 2002:a17:902:7882:b0:131:2e12:c928 with SMTP id q2-20020a170902788200b001312e12c928mr12925227pll.74.1631942767088; Fri, 17 Sep 2021 22:26:07 -0700 (PDT) Received: from bj03382pcu.spreadtrum.com ([117.18.48.102]) by smtp.gmail.com with ESMTPSA id u12sm6774909pjx.31.2021.09.17.22.26.04 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 17 Sep 2021 22:26:06 -0700 (PDT) From: Huangzhaoyang To: Johannes Weiner , Zhaoyang Huang , linux-mm@kvack.org, linux-kernel@vger.kernel.org, xuewen.yan@unisoc.com, ke.wang@unisoc.com Subject: [Resend PATCH] psi : calc cfs task memstall time more precisely Date: Sat, 18 Sep 2021 13:25:49 +0800 Message-Id: <1631942749-5495-1-git-send-email-huangzhaoyang@gmail.com> X-Mailer: git-send-email 1.7.9.5 X-Stat-Signature: h84jrbfckktj8c84pqc1csrp61fn5fio Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=HOLthhOp; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of huangzhaoyang@gmail.com designates 209.85.216.47 as permitted sender) smtp.mailfrom=huangzhaoyang@gmail.com X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: 3C872B0000B7 X-HE-Tag: 1631942768-907788 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Zhaoyang Huang cfs task's memstall time is counted as simple as exit - entry so far, which ignore the preempted time by rt, dl and irq time. Eliminating them by calc the time growth via the proportion of cfs_rq's utilization on the whole rq. eg. Here is the scenario which this commit want to fix, that is the rt and irq consume some utilization of the whole rq. This scenario could be typical in a core which is assigned to deal with all irqs. Furthermore, the rt task used to run on little core under EAS. Binder:305_3-314 [002] d..1 257.880195: psi_memtime_fixup: original:30616,adjusted:25951,se:89,cfs:353,rt:139,dl:0,irq:18 droid.phone-1525 [001] d..1 265.145492: psi_memtime_fixup: original:61616,adjusted:53492,se:55,cfs:225,rt:121,dl:0,irq:15 Signed-off-by: Zhaoyang Huang --- kernel/sched/psi.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c index cc25a3c..754a836 100644 --- a/kernel/sched/psi.c +++ b/kernel/sched/psi.c @@ -182,6 +182,8 @@ struct psi_group psi_system = { static void psi_avgs_work(struct work_struct *work); +static unsigned long psi_memtime_fixup(u32 growth); + static void group_init(struct psi_group *group) { int cpu; @@ -492,6 +494,21 @@ static u64 window_update(struct psi_window *win, u64 now, u64 value) return growth; } +static unsigned long psi_memtime_fixup(u32 growth) +{ + struct rq *rq = task_rq(current); + unsigned long growth_fixed = (unsigned long)growth; + + if (!(current->policy == SCHED_NORMAL || current->policy == SCHED_BATCH)) + return growth_fixed; + + if (current->in_memstall) + growth_fixed = div64_ul((1024 - rq->avg_rt.util_avg - rq->avg_dl.util_avg + - rq->avg_irq.util_avg + 1) * growth, 1024); + + return growth_fixed; +} + static void init_triggers(struct psi_group *group, u64 now) { struct psi_trigger *t; @@ -658,6 +675,7 @@ static void record_times(struct psi_group_cpu *groupc, u64 now) } if (groupc->state_mask & (1 << PSI_MEM_SOME)) { + delta = psi_memtime_fixup(delta); groupc->times[PSI_MEM_SOME] += delta; if (groupc->state_mask & (1 << PSI_MEM_FULL)) groupc->times[PSI_MEM_FULL] += delta; @@ -928,8 +946,8 @@ void psi_memstall_leave(unsigned long *flags) */ rq = this_rq_lock_irq(&rf); - current->in_memstall = 0; psi_task_change(current, TSK_MEMSTALL, 0); + current->in_memstall = 0; rq_unlock_irq(rq, &rf); }