mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Vito Caputo <vcaputo@pengaru.com>
To: Daniel Colascione <dancol@google.com>
Cc: Davidlohr Bueso <dave@stgolabs.net>,
	Andrew Morton <akpm@linux-foundation.org>,
	longman@redhat.com, linux-fsdevel@vger.kernel.org,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Davidlohr Bueso <dbueso@suse.de>
Subject: Re: [PATCH] fs/proc: introduce /proc/stat2 file
Date: Mon, 29 Oct 2018 17:58:45 -0700	[thread overview]
Message-ID: <20181030005845.c3x2z72ns4qhbida@shells.gnugeneration.com> (raw)
In-Reply-To: <CAKOZuevx9beEB-KWz0gRNaJQLfzu0cu7nuMYaB5ZT1O_ooQYAA@mail.gmail.com>

On Mon, Oct 29, 2018 at 11:04:45PM +0000, Daniel Colascione wrote:
> On Mon, Oct 29, 2018 at 7:25 PM, Davidlohr Bueso <dave@stgolabs.net> wrote:
> > This patch introduces a new /proc/stat2 file that is identical to the
> > regular 'stat' except that it zeroes all hard irq statistics. The new
> > file is a drop in replacement to stat for users that need performance.
> 
> For a while now, I've been thinking over ways to improve the
> performance of collecting various bits of kernel information. I don't
> think that a proliferation of special-purpose named bag-of-fields file
> variants is the right answer, because even if you add a few info-file
> variants, you're still left with a situation where a given file
> provides a particular caller with too little or too much information.
> I'd much rather move to a model in which userspace *explicitly* tells
> the kernel which fields it wants, with the kernel replying with just
> those particular fields, maybe in their raw binary representations.
> The ASCII-text bag-of-everything files would remain available for
> ad-hoc and non-performance critical use, but programs that cared about
> performance would have an efficient bypass. One concrete approach is
> to let users open up today's proc files and, instead of read(2)ing a
> text blob, use an ioctl to retrieve specified and targeted information
> of the sort that would normally be encoded in the text blob. Because
> callers would open the same file when using either the text or binary
> interfaces, little would have to change, and it'd be easy to implement
> fallbacks when a particular system doesn't support a particular
> fast-path ioctl.


We have two extremes of granularity in the /proc and /sys virtual
filesystems today:

On procfs there's these legacy files which aggregate loosely-related
system information, and in cases where you actually want most of what's
provided, it's a nice optimization because you can sample it all in a
single pread() call.

On sysfs the granularity is much finer with it being fairly common to
find a file-per-datum.  This has other advantages, like not needing to
parse snowflake formats which sometimes varied across kernel versions
like in procfs, or needing to burden the kernel to produce more
information than necessary.

But anyone who has written tools trying to sample large subsets of the
granular information in sysfs at a high rate will know how quickly it
becomes rather costly in terms of system calls.

The last time I went down this path, I wished there were a system call
like readv() which accepted a vector a new iovec type specifying an fd.

Then the sysfs model could be made a more efficient by coalescing all
the required read syscalls into a single megaread bundling all the
relevant fds that are simply kept open and reused.

If we had such a readv() variant, the sysfs granular model could be used
to granularly expose all the information we currently expose in /proc,
while still being relatively efficient in terms of system calls per
sample.  Sure you still have to lookup and open all the files of
interest, but that only needs to occur once at initialization.

Regards,
Vito Caputo

  reply	other threads:[~2018-10-30  0:58 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-29 19:25 Davidlohr Bueso
2018-10-29 19:35 ` Waiman Long
2018-10-29 20:00   ` Davidlohr Bueso
2018-10-29 20:29     ` Waiman Long
2018-10-29 20:38       ` Davidlohr Bueso
2018-10-29 20:59         ` Waiman Long
2018-10-29 21:23           ` Vito Caputo
2018-10-29 21:35             ` Waiman Long
2018-10-29 22:41               ` Vito Caputo
2018-10-30 18:57             ` Davidlohr Bueso
2018-10-30 22:40               ` Vito Caputo
2018-10-30 23:15                 ` Davidlohr Bueso
2018-10-29 21:01 ` Waiman Long
2018-10-29 23:04 ` Daniel Colascione
2018-10-30  0:58   ` Vito Caputo [this message]
2018-11-06 23:48   ` Andrew Morton
2018-11-07  3:32     ` Davidlohr Bueso
2018-11-07 16:31       ` Waiman Long
2018-11-07 10:03     ` Miklos Szeredi
2018-11-07 15:42       ` Daniel Colascione
2018-11-07 15:54         ` Miklos Szeredi
2018-11-07 16:01           ` Daniel Colascione
2018-11-07 20:32       ` Vito Caputo
2018-11-08  2:07       ` Dave Chinner
2018-11-08  7:24         ` Davidlohr Bueso
2018-11-08  7:44           ` Davidlohr Bueso
2018-10-29 20:01 Alexey Dobriyan

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=20181030005845.c3x2z72ns4qhbida@shells.gnugeneration.com \
    --to=vcaputo@pengaru.com \
    --cc=akpm@linux-foundation.org \
    --cc=dancol@google.com \
    --cc=dave@stgolabs.net \
    --cc=dbueso@suse.de \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=longman@redhat.com \
    /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

all inboxes | Powered by JetHome®