linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Alex Belits <abelits@marvell.com>
To: "cl@linux.com" <cl@linux.com>,
	"mtosatti@redhat.com" <mtosatti@redhat.com>
Cc: "pauld@redhat.com" <pauld@redhat.com>,
	"linux-mm@kvack.org" <linux-mm@kvack.org>,
	"tglx@linutronix.de" <tglx@linutronix.de>,
	"willy@infradead.org" <willy@infradead.org>,
	"frederic@kernel.org" <frederic@kernel.org>,
	"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
	"peterz@infradead.org" <peterz@infradead.org>
Subject: Re: [EXT] Re: [PATCH] mm: introduce sysctl file to flush per-cpu vmstat statistics
Date: Sat, 28 Nov 2020 03:49:38 +0000	[thread overview]
Message-ID: <e45dbda378281f7c5ef577480fb42e95707d97ad.camel@marvell.com> (raw)
In-Reply-To: <20201127154845.GA9100@fuller.cnet>


On Fri, 2020-11-27 at 12:48 -0300, Marcelo Tosatti wrote:
> External Email
> 
> -------------------------------------------------------------------
> ---
> On Fri, Nov 20, 2020 at 06:20:06PM +0000, Christopher Lameter wrote:
> > On Tue, 17 Nov 2020, Marcelo Tosatti wrote:
> > 
> > > > So what we would need would be something like a sysctl that
> > > > puts the
> > > > system into a quiet state by completing all workqueue items.
> > > > Idle all
> > > > subsystems that need it and put the cpu into NOHZ mode.
> > > 
> > > Are you suggesting that instead of a specific file to control
> > > vmstat
> > > workqueue only, a more generic sysctl could be used?
> > 
> > Yes. Introduce a sysctl to quiet down the system. Clean caches that
> > will
> > trigger kernel threads and whatever else is pending on that
> > processor.
> > 
> > > About NOHZ mode: the CPU should enter NOHZ automatically as soon
> > > as
> > > there is a single thread running, so unclear why that would be
> > > needed.
> > 
> > There are typically pending actions that still trigger
> > interruptions.
> > 
> > If you would immediately quiet down the system if there is only one
> > thread
> > runnable then you would compromise system performance through
> > frequent
> > counter folding and cache cleaning etc.
> 
> Christopher,
> 
> Decided to switch to prctl interface, and then it starts
> to become similar to "task mode isolation" patchset API.
> 
> In addition to quiescing pending activities on the CPU, it would 
> also be useful to assign a per-task attribute (which is then assigned
> to a per-CPU attribute), indicating whether that CPU is running
> an isolated task or not.

This is what task isolation patch now does. Per-task attribute is used
when dealing with a task (normally current task on its dedicated CPU),
per-CPU attribute is used when other CPUs are involved (so they don't
have to chase tasks that are running on other CPUs) or when performing
low-level operations on entry and exit. Also since this per-CPU
attribute is only updated from the local CPU, this significantly
simplifies access to it.

The difficult part of this approach is how to properly handle a
situation when for whatever reason isolation must be broken by an
interrupt of whatever origin, and there is no way to avoid it.

And, of course, there is a matter of having to clean up all other
sources of avoidable interrupts.

Since I first and foremost care about eliminating all disturbances for
a running userspace task, my approach is to allow disabling everything
including "unavoidable" synchronization IPIs, and make kernel entry
procedure recognize that some delayed synchronization is necessary
while avoiding race conditions. As far as I can tell, not everyone
wants to go that far, and it may make sense to allow "almost isolated
tasks" that still receive normal interrupts, including IPIs and page
faults. While that would be useless for the purposes that task
isolation patch was developed for, I recognize that some might prefer
that to be one of the options set by the same prctl call. This still
remains close enough to the design of task isolation -- same idea of
something that affects CPU but being tied to a given task (and dying
with it), same model of handling attributes, etc.

Maybe there can be a mask of what we do and don't want to avoid for the
task. Say, some may want to only allow page faults or syscalls. Or re-
enter isolation on breaking without notifying the userspace.

Then we may be able to combine those things, or make them separate
features that can be enabled and disabled, but all tied to a single
prctl. It will be possible to, say, check which features are
implemented and then set a mode for the current task.

> This per-CPU attribute can be used to, for example, return -EBUSY 
> from ring_buffer_resize() (or any other IPI generating activity 
> which can return an error to userspace).
> 
> So rather than:
> 
> 	prctl(PR_QUIESCE_CPU)	(current interface, similar to
> 	initial message on the thread but with prctl rather than
> 	sysfs)
> 
> To be called before real time loop, one would have:
> 
> 	prctl(PR_SET_TASK_ISOLATION, ISOLATION_ENABLE) [1]
> 	real time loop
> 	prctl(PR_SET_TASK_ISOLATION, ISOLATION_DISABLE)
> 
> (with the attribute also being cleared on task exit).
> 
> The general description would be:
> 
> "Set task isolated mode for a given task, returning an error
> if the task is not pinned to a single CPU.
> 
> In this mode, the kernel will avoid interruptions to isolated 
> CPUs when possible."
> 
> Any objections against such an interface ?
> 
> 
> [1] perhaps a name that does not conflict with "task mode" patchset
> is a better idea.
> 


  reply	other threads:[~2020-11-28  3:50 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-17 16:28 Marcelo Tosatti
2020-11-17 18:03 ` Matthew Wilcox
2020-11-17 19:06   ` Christopher Lameter
2020-11-17 19:09     ` Matthew Wilcox
2020-11-20 18:04       ` Christopher Lameter
2020-11-17 20:23     ` Marcelo Tosatti
2020-11-20 18:02       ` Marcelo Tosatti
2020-11-20 18:20       ` Christopher Lameter
2020-11-23 18:02         ` Marcelo Tosatti
2020-11-24 17:12         ` Vlastimil Babka
2020-11-24 19:52           ` Marcelo Tosatti
2020-11-27 15:48         ` Marcelo Tosatti
2020-11-28  3:49           ` Alex Belits [this message]
2020-11-30 18:18             ` [EXT] " Marcelo Tosatti
2020-11-30 18:29               ` Marcelo Tosatti
2020-12-03 22:47                 ` Alex Belits
2020-12-03 22:21               ` Alex Belits
2020-11-30  9:31           ` Christoph Lameter
2020-12-02 12:43             ` Marcelo Tosatti
2020-12-02 15:57             ` Thomas Gleixner
2020-12-02 17:43               ` Christoph Lameter
2020-12-03  3:17                 ` Thomas Gleixner
2020-12-07  8:08                   ` Christoph Lameter
2020-12-07 16:09                     ` Thomas Gleixner
2020-12-07 19:01                       ` Thomas Gleixner
2020-12-02 18:38               ` Marcelo Tosatti
2020-12-04  0:20                 ` Frederic Weisbecker
2020-12-04 13:31                   ` Marcelo Tosatti
2020-12-04  1:43               ` [EXT] " Alex Belits
2021-01-13 12:15                 ` [RFC] tentative prctl task isolation interface Marcelo Tosatti
2021-01-14  9:22                   ` Christoph Lameter
2021-01-14 19:34                     ` Marcelo Tosatti
2021-01-15 13:24                       ` Christoph Lameter
2021-01-15 18:35                         ` Alex Belits
2021-01-21 15:51                           ` Marcelo Tosatti
2021-01-21 16:20                             ` Marcelo Tosatti
2021-01-22 13:05                               ` Marcelo Tosatti
2021-02-01 10:48                             ` Christoph Lameter
2021-02-01 12:47                               ` Alex Belits
2021-02-01 18:20                               ` Marcelo Tosatti
2021-01-18 15:18                         ` Marcelo Tosatti
2020-11-24  5:02 ` [mm] e655d17ffa: BUG:using_smp_processor_id()in_preemptible kernel test robot

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=e45dbda378281f7c5ef577480fb42e95707d97ad.camel@marvell.com \
    --to=abelits@marvell.com \
    --cc=akpm@linux-foundation.org \
    --cc=cl@linux.com \
    --cc=frederic@kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mtosatti@redhat.com \
    --cc=pauld@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=willy@infradead.org \
    --subject='Re: [EXT] Re: [PATCH] mm: introduce sysctl file to flush per-cpu vmstat statistics' \
    /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

This is a public inbox, see mirroring instructions
on how to clone and mirror all data and code used for this inbox