On 7/13/20 3:12 PM, Pavel Begunkov wrote: > On 14/07/2020 00:09, Jens Axboe wrote: >> On 7/13/20 1:59 PM, Pavel Begunkov wrote: >>> @@ -3040,8 +3040,7 @@ static int io_read(struct io_kiocb *req, bool force_nonblock, >>> } >>> } >>> out_free: >>> - if (!(req->flags & REQ_F_NEED_CLEANUP)) >>> - kfree(iovec); >>> + kfree(iovec); >>> return ret; >>> } >> >> Faster to do: >> >> if (iovec) >> kfree(iovec) >> >> to avoid a stupid call. Kind of crazy, but I just verified with this one >> as well that it's worth about 1.3% CPU in my stress test. > > That looks crazy indeed I suspect what needs to happen is that kfree should be something ala: static inline void kfree(void *ptr) { if (ptr) __kfree(ptr); } to avoid silly games like this. Needs to touch all three slab allocators, though definitely in the trivial category. -- Jens Axboe