public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Frederic Weisbecker <frederic@kernel.org>
To: Marcelo Tosatti <mtosatti@redhat.com>
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>
Subject: Re: [patch v5 2/8] add prctl task isolation prctl docs and samples
Date: Wed, 27 Oct 2021 14:38:06 +0200	[thread overview]
Message-ID: <20211027123806.GA70141@lothringen> (raw)
In-Reply-To: <20211019154210.706067872@fedora.localdomain>

On Tue, Oct 19, 2021 at 12:24:33PM -0300, Marcelo Tosatti wrote:
> +===============================
> +Task isolation prctl interface
> +===============================
> +
> +Certain types of applications benefit from running uninterrupted by
> +background OS activities. Realtime systems and high-bandwidth networking
> +applications with user-space drivers can fall into the category.
> +
> +To create an OS noise free environment for the application, this
> +interface allows userspace to inform the kernel the start and
> +end of the latency sensitive application section (with configurable
> +system behaviour for that section).
> +
> +Note: the prctl interface is independent of nohz_full=.
> +
> +The prctl options are:
> +
> +
> +        - PR_ISOL_FEAT_GET: Retrieve supported features.
> +        - PR_ISOL_CFG_GET: Retrieve task isolation configuration.
> +        - PR_ISOL_CFG_SET: Set task isolation configuration.
> +        - PR_ISOL_ACTIVATE_GET: Retrieve task isolation activation state.
> +        - PR_ISOL_ACTIVATE_SET: Set task isolation activation state.
> +
> +Summary of terms:
> +
> +
> +- feature:
> +
> +        A distinct attribute or aspect of task isolation. Examples of
> +        features could be logging, new operating modes (eg: syscalls disallowed),
> +        userspace notifications, etc. The only feature currently available is quiescing.
> +
> +- configuration:
> +
> +        A specific choice from a given set
> +        of possible choices that dictate how the particular feature
> +        in question should behave.
> +
> +- activation state:
> +
> +        The activation state (whether activate/inactive) of the task

active/inactive ?

> +        isolation features (features must be configured before
> +        being activated).
> +
[...]
> +Feature description
> +--------------------
> +
> +        - ``ISOL_F_QUIESCE``
> +
> +        This feature allows quiescing select kernel activities on

selected?

> +        return from system calls.
> +
> +
[...]
> +        - ``I_CFG_INHERIT``:
> +                Set inheritance configuration when a new task
> +                is created via fork and clone.
> +
> +                The ``(int *)arg4`` argument is a pointer to::
> +
> +                        struct task_isol_inherit_control {
> +                                __u8    inherit_mask;
> +                                __u8    pad[7];
> +                        };
> +
> +                inherit_mask is a bitmask that specifies which part
> +                of task isolation should be inherited:
> +
> +                - Bit ISOL_INHERIT_CONF: Inherit task isolation configuration.
> +                  This is the stated written via prctl(PR_ISOL_CFG_SET, ...).

state

> +
> +                - Bit ISOL_INHERIT_ACTIVE: Inherit task isolation activation
> +                  (requires ISOL_INHERIT_CONF to be set). The new task
> +                  should behave, after fork/clone, in the same manner
> +                  as the parent task after it executed:
> +
> +                        prctl(PR_ISOL_ACTIVATE_SET, &mask, ...);
> +
> +**PR_ISOL_ACTIVATE_GET**:
> +
> +        Retrieve task isolation activation state.
> +
> +        The general format is::
> +
> +                prctl(PR_ISOL_ACTIVATE_GET, pmask, arg3, arg4, arg5);
> +
> +        'pmask' specifies the location of a feature mask, where
> +        the current active mask will be copied. See PR_ISOL_ACTIVATE_SET
> +        for description of individual bits.
> +
> +
> +**PR_ISOL_ACTIVATE_SET**:
> +
> +        Set task isolation activation state (activates/deactivates
> +        task isolation).
> +
> +        The general format is::
> +
> +                prctl(PR_ISOL_ACTIVATE_SET, pmask, arg3, arg4, arg5);
> +
> +
> +        The 'pmask' argument specifies the location of an 8 byte mask
> +        containing which features should be activated. Features whose
> +        bits are cleared will be deactivated. The possible
> +        bits for this mask are:
> +
> +                - ``ISOL_F_QUIESCE``:
> +
> +                Activate quiescing of background kernel activities.
> +                Quiescing happens on return to userspace from this
> +                system call, and on return from subsequent
> +                system calls (unless quiesce_oneshot_mask is configured,
> +                see below).
> +
> +        If the arg3 argument is non-zero, it specifies a pointer to::
> +
> +         struct task_isol_activate_control {
> +                 __u64 flags;
> +                 __u64 quiesce_oneshot_mask;

So you are using an entire argument here to set a single feature (ISOL_F_QUIESCE).
It looks like the oneshot VS every syscall behaviour should be defined at
configuration time for individual ISOL_F_QUIESCE features.

Also do we want that to always apply to all syscalls? Should we expect corner
cases with some of them? What about exceptions and interrupts?

My wild guess is that we need to leave room for future flexibility. Either open
some configuration space on ISOL_F_QUIESCE for that or create a seperate
ISOL_F_QUIESCE_ONESHOT.

Other than that, the general interface looks good! Now time for me to
look at the implementation...

Thanks.

  reply	other threads:[~2021-10-27 12:38 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-19 15:24 [patch v5 0/8] extensible prctl task isolation interface and vmstat sync Marcelo Tosatti
2021-10-19 15:24 ` [patch v5 1/8] add basic task isolation prctl interface Marcelo Tosatti
2021-10-19 15:24 ` [patch v5 2/8] add prctl task isolation prctl docs and samples Marcelo Tosatti
2021-10-27 12:38   ` Frederic Weisbecker [this message]
2021-10-27 17:52     ` Marcelo Tosatti
2021-10-28 14:53       ` Frederic Weisbecker
2021-10-19 15:24 ` [patch v5 3/8] task isolation: sync vmstats on return to userspace Marcelo Tosatti
2021-10-19 15:24 ` [patch v5 4/8] procfs: add per-pid task isolation state Marcelo Tosatti
2021-10-19 15:24 ` [patch v5 5/8] task isolation: sync vmstats conditional on changes Marcelo Tosatti
2021-10-19 15:24 ` [patch v5 6/8] KVM: x86: call isolation prepare from VM-entry code path Marcelo Tosatti
2021-10-19 15:24 ` [patch v5 7/8] mm: vmstat: move need_update Marcelo Tosatti
2021-10-19 15:24 ` [patch v5 8/8] mm: vmstat_refresh: avoid queueing work item if cpu stats are clean Marcelo Tosatti

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=20211027123806.GA70141@lothringen \
    --to=frederic@kernel.org \
    --cc=abelits@belits.com \
    --cc=bristot@redhat.com \
    --cc=cl@linux.com \
    --cc=juri.lelli@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=nilal@redhat.com \
    --cc=nsaenzju@redhat.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox