1. 23 Oct, 2021 1 commit
    • Hao Xu's avatar
      io_uring: implement async hybrid mode for pollable requests · 90fa0288
      Hao Xu authored
      The current logic of requests with IOSQE_ASYNC is first queueing it to
      io-worker, then execute it in a synchronous way. For unbound works like
      pollable requests(e.g. read/write a socketfd), the io-worker may stuck
      there waiting for events for a long time. And thus other works wait in
      the list for a long time too.
      Let's introduce a new way for unbound works (currently pollable
      requests), with this a request will first be queued to io-worker, then
      executed in a nonblock try rather than a synchronous way. Failure of
      that leads it to arm poll stuff and then the worker can begin to handle
      other works.
      The detail process of this kind of requests is:
      
      step1: original context:
                 queue it to io-worker
      step2: io-worker context:
                 nonblock try(the old logic is a synchronous try here)
                     |
                     |--fail--> arm poll
                                  |
                                  |--(fail/ready)-->synchronous issue
                                  |
                                  |--(succeed)-->worker finish it's job, tw
                                                 take over the req
      
      This works much better than the old IOSQE_ASYNC logic in cases where
      unbound max_worker is relatively small. In this case, number of
      io-worker eazily increments to max_worker, new worker cannot be created
      and running workers stuck there handling old works in IOSQE_ASYNC mode.
      
      In my 64-core machine, set unbound max_worker to 20, run echo-server,
      turns out:
      (arguments: register_file, connetion number is 1000, message size is 12
      Byte)
      original IOSQE_ASYNC: 76664.151 tps
      after this patch: 166934.985 tps
      Suggested-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarHao Xu <haoxu@linux.alibaba.com>
      Link: https://lore.kernel.org/r/20211018133445.103438-1-haoxu@linux.alibaba.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
      90fa0288
  2. 20 Oct, 2021 2 commits
  3. 19 Oct, 2021 37 commits