Thread (29 messages) 29 messages, 14 authors, 2020-07-24

Re: strace of io_uring events?

From: Pavel Begunkov <asml.silence@gmail.com>
Date: 2020-07-15 19:43:59
Also in: io-uring, linux-fsdevel, lkml

On 15/07/2020 20:11, Matthew Wilcox wrote:
On Wed, Jul 15, 2020 at 07:35:50AM -0700, Andy Lutomirski wrote:
quoted
quoted
On Jul 15, 2020, at 4:12 AM, Miklos Szeredi [off-list ref] wrote:

<feff>Hi,
feff?  Are we doing WTF-16 in email now?  ;-)
quoted
quoted
This thread is to discuss the possibility of stracing requests
submitted through io_uring.   I'm not directly involved in io_uring
development, so I'm posting this out of  interest in using strace on
processes utilizing io_uring.

io_uring gives the developer a way to bypass the syscall interface,
which results in loss of information when tracing.  This is a strace
fragment on  "io_uring-cp" from liburing:

io_uring_enter(5, 40, 0, 0, NULL, 8)    = 40
io_uring_enter(5, 1, 0, 0, NULL, 8)     = 1
io_uring_enter(5, 1, 0, 0, NULL, 8)     = 1
...

What really happens are read + write requests.  Without that
information the strace output is mostly useless.

This loss of information is not new, e.g. calls through the vdso or
futext fast paths are also invisible to strace.  But losing filesystem
I/O calls are a major blow, imo.
To clear details for those who are not familiar with io_uring:

io_uring has a pair of queues, submission (SQ) and completion queues (CQ),
both shared between kernel and user spaces. The userspace submits requests
by filling a chunk of memory in SQ. The kernel picks up SQ entries in
(syscall io_uring_enter) or asynchronously by polling SQ.

CQ entries are filled by the kernel completely asynchronously and
in parallel. Some users just poll CQ to get them, but also have a way
to wait for them.
quoted
quoted
What do people think?

From what I can tell, listing the submitted requests on
io_uring_enter() would not be hard.  Request completion is
asynchronous, however, and may not require  io_uring_enter() syscall.
Am I correct?
Both, submission and completion sides may not require a syscall.
quoted
quoted
Is there some existing tracing infrastructure that strace could use to
get async completion events?  Should we be introducing one?
There are static trace points covering all needs.

And if not used the whole thing have to be zero-overhead. Otherwise
there is perf, which is zero-overhead, and this IMHO won't fly. 
quoted
Let’s add some seccomp folks. We probably also want to be able to run
seccomp-like filters on io_uring requests. So maybe io_uring should
call into seccomp-and-tracing code for each action.
Adding Stefano since he had a complementary proposal for iouring
restrictions that weren't exactly seccomp.
-- 
Pavel Begunkov
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help