From: Marcelo Tosatti <mtosatti@redhat.com>
To: Frederic Weisbecker <frederic@kernel.org>
Cc: linux-kernel@vger.kernel.org, Nitesh Lal <nilal@redhat.com>,
Nicolas Saenz Julienne <nsaenzju@redhat.com>,
Christoph Lameter <cl@linux.com>,
Juri Lelli <juri.lelli@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Alex Belits <abelits@belits.com>, Peter Xu <peterx@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>,
Daniel Bristot de Oliveira <bristot@redhat.com>,
Oscar Shiang <oscar0225@livemail.tw>
Subject: Re: [patch v11 07/13] task isolation: sync vmstats conditional on changes
Date: Thu, 10 Mar 2022 13:30:14 -0300 [thread overview]
Message-ID: <YionlrkrON9cp7SK@fuller.cnet> (raw)
In-Reply-To: <20220207151915.GA526112@lothringen>
On Mon, Feb 07, 2022 at 04:19:15PM +0100, Frederic Weisbecker wrote:
> On Fri, Feb 04, 2022 at 02:35:44PM -0300, Marcelo Tosatti wrote:
> > Rather than syncing VM-stats on every return to userspace
> > (or VM-entry), keep track of changes through a per-CPU bool.
> >
> > This improves performance when enabling task isolated
> > for vcpu VMs.
> >
> > Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
> >
> > ---
> > v11:
> > - Add TIF_TASK_ISOL bit to thread info flags and use it
> > to decide whether to perform task isolation work on
> > return to userspace
> >
> > include/linux/vmstat.h | 13 ++++++++++++-
> > mm/vmstat.c | 29 ++++++++++++++++++++++++++++-
> > 2 files changed, 40 insertions(+), 2 deletions(-)
> >
> > Index: linux-2.6/include/linux/vmstat.h
> > ===================================================================
> > --- linux-2.6.orig/include/linux/vmstat.h
> > +++ linux-2.6/include/linux/vmstat.h
> > @@ -22,7 +22,18 @@ int sysctl_vm_numa_stat_handler(struct c
> > #endif
> >
> > #if defined(CONFIG_SMP) && defined(CONFIG_TASK_ISOLATION)
> > -void sync_vmstat(void);
> > +DECLARE_PER_CPU_ALIGNED(bool, vmstat_dirty);
> > +
> > +extern struct static_key vmstat_sync_enabled;
> > +
> > +void __sync_vmstat(void);
> > +static inline void sync_vmstat(void)
> > +{
> > + if (static_key_false(&vmstat_sync_enabled))
> > + __sync_vmstat();
> > +}
> > +
> > +void init_sync_vmstat(void);
> > #else
> > static inline void sync_vmstat(void)
> > {
> > Index: linux-2.6/mm/vmstat.c
> > ===================================================================
> > --- linux-2.6.orig/mm/vmstat.c
> > +++ linux-2.6/mm/vmstat.c
> > @@ -334,6 +334,31 @@ void set_pgdat_percpu_threshold(pg_data_
> > }
> > }
> >
> > +#ifdef CONFIG_TASK_ISOLATION
> > +struct static_key vmstat_sync_enabled;
> > +DEFINE_PER_CPU_ALIGNED(bool, vmstat_dirty);
> > +
> > +static inline void mark_vmstat_dirty(void)
> > +{
> > + if (!static_key_false(&vmstat_sync_enabled))
> > + return;
> > +
> > + raw_cpu_write(vmstat_dirty, true);
>
> Why not __this_cpu_write() ? Shouldn't we make sure we are not
> preemptible and not mark the wrong CPU?
#ifdef CONFIG_HAVE_CMPXCHG_LOCAL
/*
* If we have cmpxchg_local support then we do not need to incur the overhead
* that comes with local_irq_save/restore if we use this_cpu_cmpxchg.
*
* mod_state() modifies the zone counter state through atomic per cpu
* operations.
*
* Overstep mode specifies how overstep should handled:
* 0 No overstepping
* 1 Overstepping half of threshold
* -1 Overstepping minus half of threshold
*/
static inline void mod_zone_state(struct zone *zone,
enum zone_stat_item item, long delta, int overstep_mode)
{
struct per_cpu_zonestat __percpu *pcp = zone->per_cpu_zonestats;
s8 __percpu *p = pcp->vm_stat_diff + item;
long o, n, t, z;
do {
z = 0; /* overflow to zone counters */
Perhaps one can
n = -os;
}
} while (this_cpu_cmpxchg(*p, o, n) != o);
<-- migrate
if (z)
zone_page_state_add(z, zone, item);
mark_vmstat_dirty();
But we assume the task which is using task isolation is pinned to a single CPU,
so that should not happen.
next prev parent reply other threads:[~2022-03-10 17:00 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-04 17:35 [patch v11 00/13] extensible prctl task isolation interface and vmstat sync Marcelo Tosatti
2022-02-04 17:35 ` [patch v11 01/13] s390: add support for TIF_TASK_ISOL Marcelo Tosatti
2022-02-07 11:40 ` Sven Schnelle
2022-02-04 17:35 ` [patch v11 02/13] x86: " Marcelo Tosatti
2022-02-04 17:35 ` [patch v11 03/13] add basic task isolation prctl interface Marcelo Tosatti
2022-02-04 17:35 ` [patch v11 04/13] add prctl task isolation prctl docs and samples Marcelo Tosatti
2022-02-04 17:35 ` [patch v11 05/13] task isolation: sync vmstats on return to userspace Marcelo Tosatti
2022-02-07 14:57 ` Frederic Weisbecker
2022-02-07 15:16 ` Marcelo Tosatti
2022-02-04 17:35 ` [patch v11 06/13] procfs: add per-pid task isolation state Marcelo Tosatti
2022-02-04 17:35 ` [patch v11 07/13] task isolation: sync vmstats conditional on changes Marcelo Tosatti
2022-02-07 15:19 ` Frederic Weisbecker
2022-03-10 16:30 ` Marcelo Tosatti [this message]
2022-02-07 15:29 ` Frederic Weisbecker
2022-02-04 17:35 ` [patch v11 08/13] task isolation: enable return to userspace processing Marcelo Tosatti
2022-02-04 17:35 ` [patch v11 09/13] task isolation: add preempt notifier to sync per-CPU vmstat dirty info to thread info Marcelo Tosatti
2022-02-07 15:36 ` Frederic Weisbecker
2022-02-04 17:35 ` [patch v11 10/13] KVM: x86: process isolation work from VM-entry code path Marcelo Tosatti
2022-02-07 15:47 ` Frederic Weisbecker
2022-03-10 16:35 ` Marcelo Tosatti
2022-02-04 17:35 ` [patch v11 11/13] mm: vmstat: move need_update Marcelo Tosatti
2022-02-04 17:35 ` [patch v11 12/13] mm: vmstat_refresh: avoid queueing work item if cpu stats are clean Marcelo Tosatti
2022-02-04 17:35 ` [patch v11 13/13] task isolation: only TIF_TASK_ISOL if task isolation is enabled Marcelo Tosatti
2022-02-07 15:38 ` Frederic Weisbecker
2022-02-19 8:02 ` [patch v11 00/13] extensible prctl task isolation interface and vmstat sync Oscar Shiang
2022-02-23 17:31 ` Marcelo Tosatti
2022-03-08 6:32 ` Oscar Shiang
2022-03-08 13:12 ` Marcelo Tosatti
2022-03-09 15:31 ` Oscar Shiang
2022-03-08 7:20 ` Oscar Shiang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YionlrkrON9cp7SK@fuller.cnet \
--to=mtosatti@redhat.com \
--cc=abelits@belits.com \
--cc=bristot@redhat.com \
--cc=cl@linux.com \
--cc=frederic@kernel.org \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nilal@redhat.com \
--cc=nsaenzju@redhat.com \
--cc=oscar0225@livemail.tw \
--cc=peterx@redhat.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.