Received: by 2002:a05:6358:4e97:b0:b3:742d:4702 with SMTP id ce23csp2644166rwb; Mon, 15 Aug 2022 08:52:32 -0700 (PDT) X-Google-Smtp-Source: AA6agR4JzRGpctxi6PjI0nLtis/UemGTegy4HOpgd8ybOh98VExMvle9XKgW5KRnUpI6ZSBLvaj4 X-Received: by 2002:a17:906:4fca:b0:731:5e07:e59a with SMTP id i10-20020a1709064fca00b007315e07e59amr10414565ejw.140.1660578752471; Mon, 15 Aug 2022 08:52:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1660578752; cv=none; d=google.com; s=arc-20160816; b=eSAOngJqJHgq1VpTmBUu+a4yISFuCgQlVlZzRxZ9S+M4QjtAGvdWurdxkcmtHYCUo4 17jx1FLlsBrg/WRD/+NU8JFOrYrDvaH+SRFRL0GMxuyk5J19yIEFxaRQkebeGPnlwaTn 9fYbfLKo5q+37MwyVmbSIFBRA0qSo9ebKZ5+DfKt39tJoodN7paMwN823n5emTmEmv/8 WHgJTkThSYXcfPkEkHFb2GC97b3o/wir9knKidBenKz0Cu5rUtg97bXRY2QHiC8l6TnE l7frfKCVatwY9E0PCEZ29UmcxUrXgokD31wFgwn4FyDGK4bGzkQqk3ktlBR0hWLlYAWN 8ZGQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=1Uwpvs6/NyNM8qU91zfSlGe+Ud6fzUb0NOatTEgolZk=; b=fyPXLPmz87N8rIED7vD9+0Ii9n64mesRPbGt6+HWupx416jCnaiflBsyC5PZywegu1 DZ/DoL/VLaEC+PJM+sTn1HDKTKM7DCGaVZ/epd8bUlHbuHXGyfSN40cFnhWh1kdgU8I3 i//klM+4EAurPugYT1BJYyRsl8qweuRUTkNKM6hA7TmmhkwKyzOZabf0Gc+1DmWc6Vwr YaorfnVnXvSqmiiIp4MQYZ/bMSeDAnV3McspOePngy5dcjeJRwOUA+IAATsA4n5/kq1B ud+0A3sZPQlqq0RtNyZ+1RRJt6rjsjLG9qYcQkYnlWa8bsoBGk+EPZUMXoG5VhK3Gv7z on2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cmpxchg-org.20210112.gappssmtp.com header.s=20210112 header.b="T/xlXFA4"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=cmpxchg.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hv21-20020a17090760d500b0072f7bbe0273si9043238ejc.362.2022.08.15.08.52.06; Mon, 15 Aug 2022 08:52:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@cmpxchg-org.20210112.gappssmtp.com header.s=20210112 header.b="T/xlXFA4"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=cmpxchg.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231183AbiHOPuC (ORCPT + 99 others); Mon, 15 Aug 2022 11:50:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38774 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230506AbiHOPt7 (ORCPT ); Mon, 15 Aug 2022 11:49:59 -0400 Received: from mail-qk1-x733.google.com (mail-qk1-x733.google.com [IPv6:2607:f8b0:4864:20::733]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E5FBF13F79 for ; Mon, 15 Aug 2022 08:49:57 -0700 (PDT) Received: by mail-qk1-x733.google.com with SMTP id i24so5778158qkg.13 for ; Mon, 15 Aug 2022 08:49:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cmpxchg-org.20210112.gappssmtp.com; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc; bh=1Uwpvs6/NyNM8qU91zfSlGe+Ud6fzUb0NOatTEgolZk=; b=T/xlXFA4JKiGztHsekPw8KTMm4XUMP+HOrfT13Yh6ODYX53NkbQmoFGB5CqjDeYTkM VwOCewIxcBV+lygIzSykbKBc8rbGKJoP5ngplrdtixBz1Zb78YNUmyWm6XburHngBVpC vuB7s5tGtR3wMiVWGnpomZ907mC4X6feY6vjvbKZVUvN6o6BtVCZhNTkbKwNqfafrfqh ImbX4RLPBJdCo7Pbbu8bvNMEmlY554iv2NTT107xzqha75H8rk9jQMwElmGv1lgZ2Hjs Tr0WhaLtkUV9pIaWJrVC0uC5HKxCe0WDHDkXPMg0QgBzJlqZ9k7BEiI1oBXcu++4TSxI KfgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc; bh=1Uwpvs6/NyNM8qU91zfSlGe+Ud6fzUb0NOatTEgolZk=; b=D2mENnGIR56YeABSGWPZqxYtlPWEGdD4lkbSJf2f8DtOOELyiC6aBmrYqz0IQTqpF+ B1S5HzilalYsNgfmBIt+p4V1s5oZI7E5+aGuS3RJ7qPLffNuSkaHZKy+tD9Xr73DGHsN Jdba2+h0ZbolVr/O1tn507biTk07pNV8j/l36ie7AXMZbRmLI1gp3VIKkMIUlh8U9NEf 3rLB9HrqkOkSsStzwOEh9V4CpC7Lhw3CXVqkzWhYWujLW312OUXjrSUoRAS8z9KxC7pE J7X3k1/f+OX3pkll6JFtCCgVyrn+8EtWjYy7fGk/Hm9kmc02Yh2EPiJQthrIuqFd55Sx POjQ== X-Gm-Message-State: ACgBeo3H2Om8TZwrDlDsblzV9eQRZDAqX53Ze4PIRMFqU5oEmh3UYZEi e/ujAJASebmedVHDJSfsca4NgnoEZkxgNA== X-Received: by 2002:ae9:e402:0:b0:6a7:86a3:752e with SMTP id q2-20020ae9e402000000b006a786a3752emr11668527qkc.300.1660578597066; Mon, 15 Aug 2022 08:49:57 -0700 (PDT) Received: from localhost ([2620:10d:c091:480::a23e]) by smtp.gmail.com with ESMTPSA id i4-20020ac85c04000000b0034301298d30sm8775961qti.38.2022.08.15.08.49.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Aug 2022 08:49:56 -0700 (PDT) Date: Mon, 15 Aug 2022 11:49:55 -0400 From: Johannes Weiner To: Chengming Zhou Cc: tj@kernel.org, corbet@lwn.net, surenb@google.com, mingo@redhat.com, peterz@infradead.org, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, songmuchun@bytedance.com Subject: Re: [PATCH v2 09/10] sched/psi: per-cgroup PSI stats disable/re-enable interface Message-ID: References: <20220808110341.15799-1-zhouchengming@bytedance.com> <20220808110341.15799-10-zhouchengming@bytedance.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220808110341.15799-10-zhouchengming@bytedance.com> X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Aug 08, 2022 at 07:03:40PM +0800, Chengming Zhou wrote: > +static ssize_t cgroup_psi_write(struct kernfs_open_file *of, > + char *buf, size_t nbytes, loff_t off) > +{ > + ssize_t ret; > + int enable; > + struct cgroup *cgrp; > + struct psi_group *psi; > + > + ret = kstrtoint(strstrip(buf), 0, &enable); > + if (ret) > + return ret; > + > + if (enable < 0 || enable > 1) > + return -ERANGE; > + > + cgrp = cgroup_kn_lock_live(of->kn, false); > + if (!cgrp) > + return -ENOENT; > + > + psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi; > + psi_cgroup_enable(psi, enable); I think it should also add/remove the pressure files when enabling and disabling the aggregation, since their contents would be stale and misleading. Take a look at cgroup_add_dfl_cftypes() and cgroup_rm_cftypes() > @@ -5115,6 +5152,12 @@ static struct cftype cgroup_base_files[] = { > .release = cgroup_pressure_release, > }, > #endif > + { > + .name = "cgroup.psi", > + .flags = CFTYPE_PRESSURE, > + .seq_show = cgroup_psi_show, > + .write = cgroup_psi_write, > + }, > #endif /* CONFIG_PSI */ > { } /* terminate */ > }; > diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c > index 58f8092c938f..9df1686ee02d 100644 > --- a/kernel/sched/psi.c > +++ b/kernel/sched/psi.c > @@ -181,6 +181,7 @@ static void group_init(struct psi_group *group) > { > int cpu; > > + group->enabled = true; > for_each_possible_cpu(cpu) > seqcount_init(&per_cpu_ptr(group->pcpu, cpu)->seq); > group->avg_last_update = sched_clock(); > @@ -700,17 +701,16 @@ static void psi_group_change(struct psi_group *group, int cpu, > groupc = per_cpu_ptr(group->pcpu, cpu); > > /* > - * First we assess the aggregate resource states this CPU's > - * tasks have been in since the last change, and account any > - * SOME and FULL time these may have resulted in. > - * > - * Then we update the task counts according to the state > + * First we update the task counts according to the state > * change requested through the @clear and @set bits. > + * > + * Then if the cgroup PSI stats accounting enabled, we > + * assess the aggregate resource states this CPU's tasks > + * have been in since the last change, and account any > + * SOME and FULL time these may have resulted in. > */ > write_seqcount_begin(&groupc->seq); > > - record_times(groupc, now); > - > /* > * Start with TSK_ONCPU, which doesn't have a corresponding > * task count - it's just a boolean flag directly encoded in > @@ -750,6 +750,14 @@ static void psi_group_change(struct psi_group *group, int cpu, > if (set & (1 << t)) > groupc->tasks[t]++; > > + if (!group->enabled) { > + if (groupc->state_mask & (1 << PSI_NONIDLE)) > + record_times(groupc, now); Why record the nonidle time? It's only used for aggregation, which is stopped as well. > @@ -1088,6 +1097,23 @@ void cgroup_move_task(struct task_struct *task, struct css_set *to) > > task_rq_unlock(rq, task, &rf); > } > + > +void psi_cgroup_enable(struct psi_group *group, bool enable) > +{ > + struct psi_group_cpu *groupc; > + int cpu; > + u64 now; > + > + if (group->enabled == enable) > + return; > + group->enabled = enable; > + > + for_each_possible_cpu(cpu) { > + groupc = per_cpu_ptr(group->pcpu, cpu); > + now = cpu_clock(cpu); > + psi_group_change(group, cpu, 0, 0, now, true); This loop deserves a comment, IMO.