On 5/22/22 7:28 PM, Jens Axboe wrote: > On 5/22/22 7:22 PM, Jens Axboe wrote: >> On 5/22/22 6:42 PM, Al Viro wrote: >>> On Sun, May 22, 2022 at 02:03:35PM -0600, Jens Axboe wrote: >>> >>>> Right, I'm saying it's not _immediately_ clear which cases are what when >>>> reading the code. >>>> >>>>> up a while ago. And no, turning that into indirect calls ended up with >>>>> arseloads of overhead, more's the pity... >>>> >>>> It's a shame, since indirect calls make for nicer code, but it's always >>>> been slower and these days even more so. >>>> >>>>> Anyway, at the moment I have something that builds; hadn't tried to >>>>> boot it yet. >>>> >>>> Nice! >>> >>> Boots and survives LTP and xfstests... Current variant is in >>> vfs.git#work.iov_iter (head should be at 27fa77a9829c). I have *not* >>> looked into the code generation in primitives; the likely/unlikely on >>> those cascades of ifs need rethinking. >> >> I noticed too. Haven't fiddled much in iov_iter.c, but for uio.h I had >> the below. iov_iter.c is a worse "offender" though, with 53 unlikely and >> 22 likely annotations... > > Here it is... Few more, most notably making sure that dio dirties reads even if they are not of the iovec type. Last two just add a helper for import_ubuf() and then adopts it for io_uring send/recv which is also a hot path. The single range read/write can be converted too, but that needs a bit more work... -- Jens Axboe