lkml.org 
[lkml]   [2018]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH] block: kyber: make kyber more friendly with merging
    From
    Date
    On 5/22/18 10:17 AM, Holger Hoffstätte wrote:
    > On 05/22/18 16:48, Jianchao Wang wrote:
    >> Currently, kyber is very unfriendly with merging. kyber depends
    >> on ctx rq_list to do merging, however, most of time, it will not
    >> leave any requests in ctx rq_list. This is because even if tokens
    >> of one domain is used up, kyber will try to dispatch requests
    >> from other domain and flush the rq_list there.
    >>
    >> To improve this, we setup kyber_ctx_queue (kcq) which is similar
    >> with ctx, but it has rq_lists for different domain and build same
    >> mapping between kcq and khd as the ctx & hctx. Then we could merge,
    >> insert and dispatch for different domains separately. If one domain
    >> token is used up, the requests could be left in the rq_list of
    >> that domain and maybe merged with following io.
    >>
    >> Following is my test result on machine with 8 cores and NVMe card
    >> INTEL SSDPEKKR128G7
    >>
    >> fio size=256m ioengine=libaio iodepth=64 direct=1 numjobs=8
    >> seq/random
    >> +------+---------------------------------------------------------------+
    >> |patch?| bw(MB/s) | iops | slat(usec) | clat(usec) | merge |
    >> +----------------------------------------------------------------------+
    >> | w/o | 606/612 | 151k/153k | 6.89/7.03 | 3349.21/3305.40 | 0/0 |
    >> +----------------------------------------------------------------------+
    >> | w/ | 1083/616 | 277k/154k | 4.93/6.95 | 1830.62/3279.95 | 223k/3k |
    >> +----------------------------------------------------------------------+
    >> When set numjobs to 16, the bw and iops could reach 1662MB/s and 425k
    >> on my platform.
    >>
    >> Signed-off-by: Jianchao Wang <jianchao.w.wang@oracle.com>
    >
    > <snip>
    >
    > This looks great but prevents kyber from being built as module,
    > which is AFAIK supposed to work (and works now):
    >
    > ..
    > CC [M] block/kyber-iosched.o
    > Building modules, stage 2.
    > MODPOST 313 modules
    > ERROR: "bio_attempt_back_merge" [block/kyber-iosched.ko] undefined!
    > ERROR: "bio_attempt_front_merge" [block/kyber-iosched.ko] undefined!
    > ERROR: "bio_attempt_discard_merge" [block/kyber-iosched.ko] undefined!
    > ERROR: "blk_try_merge" [block/kyber-iosched.ko] undefined!
    > ERROR: "blk_rq_merge_ok" [block/kyber-iosched.ko] undefined!
    > ..
    >
    > It does build fine when compiled in, obviously. :)

    It's basically duplicating the contents of blk_attempt_plug_merge().
    I would suggest abstracting out the list loop and merge check
    into a helper, that could then both be called from kyber and the
    plug merge function.

    --
    Jens Axboe

    \
     
     \ /
      Last update: 2018-05-22 18:21    [W:5.258 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site