Linux-Fsdevel Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Jan Ziak <0xe2.0x9a.0x9b@gmail.com>
To: Matthew Wilcox <willy@infradead.org>
Cc: gregkh@linuxfoundation.org, linux-api@vger.kernel.org,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org, linux-man@vger.kernel.org,
mtk.manpages@gmail.com, shuah@kernel.org,
viro@zeniv.linux.org.uk
Subject: Re: [PATCH 0/3] readfile(2): a new syscall to make open/read/close faster
Date: Sun, 5 Jul 2020 04:46:04 +0200 [thread overview]
Message-ID: <CAODFU0qwtPTaBRbA3_ufA6N7fajhi61Sp5iE75Shdk25NSOTLA@mail.gmail.com> (raw)
In-Reply-To: <20200705021631.GR25523@casper.infradead.org>
On Sun, Jul 5, 2020 at 4:16 AM Matthew Wilcox <willy@infradead.org> wrote:
>
> On Sun, Jul 05, 2020 at 04:06:22AM +0200, Jan Ziak wrote:
> > Hello
> >
> > At first, I thought that the proposed system call is capable of
> > reading *multiple* small files using a single system call - which
> > would help increase HDD/SSD queue utilization and increase IOPS (I/O
> > operations per second) - but that isn't the case and the proposed
> > system call can read just a single file.
> >
> > Without the ability to read multiple small files using a single system
> > call, it is impossible to increase IOPS (unless an application is
> > using multiple reader threads or somehow instructs the kernel to
> > prefetch multiple files into memory).
>
> What API would you use for this?
>
> ssize_t readfiles(int dfd, char **files, void **bufs, size_t *lens);
>
> I pretty much hate this interface, so I hope you have something better
> in mind.
I am proposing the following:
struct readfile_t {
int dirfd;
const char *pathname;
void *buf;
size_t count;
int flags;
ssize_t retval; // set by kernel
int reserved; // not used by kernel
};
int readfiles(struct readfile_t *requests, size_t count);
Returns zero if all requests succeeded, otherwise the returned value
is non-zero (glibc wrapper: -1) and user-space is expected to check
which requests have succeeded and which have failed. retval in
readfile_t is set to what the single-file readfile syscall would
return if it was called with the contents of the corresponding
readfile_t struct.
The glibc library wrapper of this system call is expected to store the
errno in the "reserved" field. Thus, a programmer using glibc sees:
struct readfile_t {
int dirfd;
const char *pathname;
void *buf;
size_t count;
int flags;
ssize_t retval; // set by glibc (-1 on error)
int errno; // set by glibc if retval is -1
};
retval and errno in glibc's readfile_t are set to what the single-file
glibc readfile would return (retval) and set (errno) if it was called
with the contents of the corresponding readfile_t struct. In case of
an error, glibc will pick one readfile_t which failed (such as: the
1st failed one) and use it to set glibc's errno.
next prev parent reply other threads:[~2020-07-05 2:46 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-05 2:06 Jan Ziak
2020-07-05 2:16 ` Matthew Wilcox
2020-07-05 2:46 ` Jan Ziak [this message]
2020-07-05 3:12 ` Matthew Wilcox
2020-07-05 3:18 ` Jan Ziak
2020-07-05 3:27 ` Matthew Wilcox
2020-07-05 4:09 ` Jan Ziak
2020-07-05 11:58 ` Greg KH
2020-07-06 6:07 ` Jan Ziak
2020-07-06 11:11 ` Matthew Wilcox
2020-07-06 11:18 ` Greg KH
2020-07-05 8:07 ` Vito Caputo
2020-07-05 11:44 ` Greg KH
2020-07-05 20:34 ` Vito Caputo
2020-07-05 6:32 ` Andreas Dilger
2020-07-05 7:25 ` Jan Ziak
2020-07-05 12:00 ` Greg KH
2020-07-05 11:50 ` Greg KH
2020-07-14 6:51 ` Pavel Machek
2020-07-14 8:07 ` Miklos Szeredi
2020-07-14 11:34 ` Pavel Begunkov
2020-07-14 11:55 ` Miklos Szeredi
2020-07-15 8:31 ` Pavel Begunkov
2020-07-15 8:41 ` Miklos Szeredi
2020-07-15 8:49 ` Pavel Begunkov
2020-07-15 9:00 ` Pavel Begunkov
2020-07-15 11:17 ` Miklos Szeredi
-- strict thread matches above, loose matches on Subject: below --
2020-07-04 14:02 Greg Kroah-Hartman
2020-07-04 19:30 ` Al Viro
2020-07-05 11:47 ` Greg Kroah-Hartman
2020-07-06 17:25 ` Dave Martin
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=CAODFU0qwtPTaBRbA3_ufA6N7fajhi61Sp5iE75Shdk25NSOTLA@mail.gmail.com \
--to=0xe2.0x9a.0x9b@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-man@vger.kernel.org \
--cc=mtk.manpages@gmail.com \
--cc=shuah@kernel.org \
--cc=viro@zeniv.linux.org.uk \
--cc=willy@infradead.org \
--subject='Re: [PATCH 0/3] readfile(2): a new syscall to make open/read/close faster' \
/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
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).