• Changheun Lee's avatar
    bio: limit bio max size · cd2c7545
    Changheun Lee authored
    bio size can grow up to 4GB when muli-page bvec is enabled.
    but sometimes it would lead to inefficient behaviors.
    in case of large chunk direct I/O, - 32MB chunk read in user space -
    all pages for 32MB would be merged to a bio structure if the pages
    physical addresses are contiguous. it makes some delay to submit
    until merge complete. bio max size should be limited to a proper size.
    
    When 32MB chunk read with direct I/O option is coming from userspace,
    kernel behavior is below now in do_direct_IO() loop. it's timeline.
    
     | bio merge for 32MB. total 8,192 pages are merged.
     | total elapsed time is over 2ms.
     |------------------ ... ----------------------->|
                                                     | 8,192 pages merged a bio.
                                                     | at this time, first bio submit is done.
                                                     | 1 bio is split to 32 read request and issue.
                                                     |--------------->
                                                      |--------------->
                                                       |--------------->
                                                                  ......
                                                                       |--------------->
                                                                        |--------------->|
                              total 19ms elapsed to complete 32MB read done from device. |
    
    If bio max size is limited with 1MB, behavior is changed below.
    
     | bio merge for 1MB. 256 pages are merged for each bio.
     | total 32 bio will be made.
     | total elapsed time is over 2ms. it's same.
     | but, first bio submit timing is fast. about 100us.
     |--->|--->|--->|---> ... -->|--->|--->|--->|--->|
          | 256 pages merged a bio.
          | at this time, first bio submit is done.
          | and 1 read request is issued for 1 bio.
          |--------------->
               |--------------->
                    |--------------->
                                          ......
                                                     |--------------->
                                                      |--------------->|
            total 17ms elapsed to complete 32MB read done from device. |
    
    As a result, read request issue timing is faster if bio max size is limited.
    Current kernel behavior with multipage bvec, super large bio can be created.
    And it lead to delay first I/O request issue.
    Signed-off-by: default avatarChangheun Lee <nanich.lee@samsung.com>
    Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
    Link: https://lore.kernel.org/r/20210503095203.29076-1-nanich.lee@samsung.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    cd2c7545
bio.c 44.2 KB