Skip to content
  • Shaohua Li's avatar
    block: improve rq_affinity placement · bcf30e75
    Shaohua Li authored
    This patch reverts commit 35ae66e0
    
    (block: Make rq_affinity = 1
    work as expected). The purpose is to avoid an unnecessary IPI.
    Let's take an example. My test box has cpu 0-7, one socket. Say request is
    added from CPU 1, blk_complete_request() occurs at CPU 7. Without the reverted
    patch, softirq will be done at CPU 7. With it, an IPI will be directed to CPU
    0, and softirq will be done at CPU 0. In this case, doing softirq at CPU 0 and
    CPU 7 have no difference from cache sharing point view and we can avoid an
    ipi if doing it in CPU 7.
    An immediate concern is this is just like QUEUE_FLAG_SAME_FORCE, but actually
    not. blk_complete_request() is running in interrupt handler, and currently
    I/O controller doesn't support multiple interrupts (I checked several LSI
    cards and AHCI), so only one CPU can run blk_complete_request(). This is
    still quite different as QUEUE_FLAG_SAME_FORCE.
    Since only one CPU runs softirq, the only difference with below patch is
    softirq not always runs at the first CPU of a group.
    
    Signed-off-by: default avatarShaohua Li <shaohua.li@intel.com>
    Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
    bcf30e75