From: Hao Xu <hao.xu@linux.dev>
To: io-uring@vger.kernel.org, Jens Axboe <axboe@kernel.dk>
Cc: Dominique Martinet <asmadeus@codewreck.org>,
Pavel Begunkov <asml.silence@gmail.com>,
Christian Brauner <brauner@kernel.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Stefan Roesch <shr@fb.com>, Clay Harris <bugs@claycon.org>,
Dave Chinner <david@fromorbit.com>,
"Darrick J . Wong" <djwong@kernel.org>,
linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org,
linux-ext4@vger.kernel.org, Wanpeng Li <wanpengli@tencent.com>
Subject: [RFC 0/7] io_uring lseek
Date: Wed, 26 Jul 2023 18:25:56 +0800 [thread overview]
Message-ID: <20230726102603.155522-1-hao.xu@linux.dev> (raw)
From: Hao Xu <howeyxu@tencent.com>
This series adds lseek for io_uring, the motivation to import this
syscall is in previous io_uring getdents patchset, we lack a way to
rewind the file cursor when it goes to the end of file. Another reason
is lseek is a common syscall, it's good for coding consistency when
users use io_uring as their main loop.
Patch 1 is code clean for iomap
Patch 2 adds IOMAP_NOWAIT logic for iomap lseek
Patch 3 adds a nowait parameter to for IOMAP_NOWAIT control
Patch 4 adds llseek_nowait() for file_operations so that specific
filesystem can implement it for nowait lseek
Patch 5 adds llseek_nowait() implementation for xfs
Patch 6 adds a new vfs wrapper for io_uring use
Patch 7 is the main io_uring lseek implementation
Note, this series depends on the previous io_uring getdents series.
This is marked RFC since there is (at least) an issue to be discussed:
The work in this series is mainly to reslove a problem that the current
llseek() in struct file_operations doesn't have a place to deliver
nowait info, and adding an argument to it results in update for llseek
implementation of all filesystems (35 functions), so here I introduce
a new llseek_nowait() as a workaround.
For performance, it has about 20%~30% improvement on iops.
The test program is just like the one for io_uring getdents, here is the
link to it: https://github.com/HowHsu/liburing/blob/llseek/test/lseek.c
- Each test runs about 30000 async requests/sync syscalls
- Each test runs 100 times and get the average value.
- offset is randomly generated value
- the file is a 1M all zero file
[howeyxu@~]$ python3 run_lseek.py
test args: seek mode:SEEK_SET, offset: 334772
Average of sync : 0.012300650000000002
Average of iouring : 0.008528009999999999
30.67%
[howeyxu@~]$ python3 run_lseek.py
test args: seek mode:SEEK_CUR, offset: 389292
Average of sync : 0.012736129999999995
Average of iouring : 0.00928725
27.08%
[howeyxu@~]$ python3 run_lseek.py
test args: seek mode:SEEK_END, offset: 281141
Average of sync : 0.01221595
Average of iouring : 0.008442890000000003
30.89%
[howeyxu@~]$ python3 run_lseek.py
test args: seek mode:SEEK_DATA, offset: 931103
Average of sync : 0.015496230000000005
Average of iouring : 0.012341509999999998
20.36%
[howeyxu@~]$ python3 run_lseek.py
test args: seek mode:SEEK_HOLE, offset: 430194
Average of sync : 0.01555663000000001
Average of iouring : 0.012064940000000003
22.45%
Hao Xu (7):
iomap: merge iomap_seek_hole() and iomap_seek_data()
xfs: add nowait support for xfs_seek_iomap_begin()
add nowait parameter for iomap_seek()
add llseek_nowait() for struct file_operations
add llseek_nowait support for xfs
add vfs_lseek_nowait()
add lseek for io_uring
fs/ext4/file.c | 9 ++---
fs/gfs2/inode.c | 4 +--
fs/iomap/seek.c | 42 ++++++-----------------
fs/read_write.c | 18 ++++++++++
fs/xfs/xfs_file.c | 34 ++++++++++++++++---
fs/xfs/xfs_iomap.c | 4 ++-
include/linux/fs.h | 4 +++
include/linux/iomap.h | 6 ++--
include/uapi/linux/io_uring.h | 1 +
io_uring/fs.c | 63 +++++++++++++++++++++++++++++++++++
io_uring/fs.h | 3 ++
io_uring/opdef.c | 8 +++++
12 files changed, 145 insertions(+), 51 deletions(-)
base-commit: 4a4b046082eca8ae90b654d772fccc30e9f23f4d
--
2.25.1
next reply other threads:[~2023-07-26 10:26 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-26 10:25 Hao Xu [this message]
2023-07-26 10:25 ` [PATCH 1/7] iomap: merge iomap_seek_hole() and iomap_seek_data() Hao Xu
2023-07-26 21:50 ` Dave Chinner
2023-07-27 12:10 ` Hao Xu
2023-07-26 10:25 ` [PATCH 2/7] xfs: add nowait support for xfs_seek_iomap_begin() Hao Xu
2023-07-26 21:55 ` Dave Chinner
2023-07-26 22:14 ` Darrick J. Wong
2023-07-27 12:17 ` Hao Xu
2023-07-26 10:25 ` [PATCH 3/7] add nowait parameter for iomap_seek() Hao Xu
2023-07-26 22:01 ` Dave Chinner
2023-07-26 10:26 ` [PATCH 4/7] add llseek_nowait() for struct file_operations Hao Xu
2023-07-27 13:25 ` Matthew Wilcox
2023-07-26 10:26 ` [PATCH 5/7] add llseek_nowait support for xfs Hao Xu
2023-07-26 22:14 ` Dave Chinner
2023-07-27 12:26 ` Hao Xu
2023-07-26 10:26 ` [PATCH 6/7] add vfs_lseek_nowait() Hao Xu
2023-07-26 10:26 ` [PATCH 7/7] add lseek for io_uring Hao Xu
2023-07-26 13:22 ` [RFC 0/7] io_uring lseek Christian Brauner
2023-07-27 12:30 ` Hao Xu
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=20230726102603.155522-1-hao.xu@linux.dev \
--to=hao.xu@linux.dev \
--cc=asmadeus@codewreck.org \
--cc=asml.silence@gmail.com \
--cc=axboe@kernel.dk \
--cc=brauner@kernel.org \
--cc=bugs@claycon.org \
--cc=david@fromorbit.com \
--cc=djwong@kernel.org \
--cc=io-uring@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=shr@fb.com \
--cc=viro@zeniv.linux.org.uk \
--cc=wanpengli@tencent.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 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.