• Hisashi Hifumi's avatar
    readahead: add blk_run_backing_dev · 65a80b4c
    Hisashi Hifumi authored
    I added blk_run_backing_dev on page_cache_async_readahead so readahead I/O
    is unpluged to improve throughput on especially RAID environment.
    
    The normal case is, if page N become uptodate at time T(N), then T(N) <=
    T(N+1) holds.  With RAID (and NFS to some degree), there is no strict
    ordering, the data arrival time depends on runtime status of individual
    disks, which breaks that formula.  So in do_generic_file_read(), just
    after submitting the async readahead IO request, the current page may well
    be uptodate, so the page won't be locked, and the block device won't be
    implicitly unplugged:
    
                   if (PageReadahead(page))
                            page_cache_async_readahead()
                    if (!PageUptodate(page))
                                    goto page_not_up_to_date;
                    //...
    page_not_up_to_date:
                    lock_page_killable(page);
    
    Therefore explicit unplugging can help.
    
    Following is the test result with dd.
    
    #dd if=testdir/testfile of=/de...
    65a80b4c
readahead.c 15.3 KB