• Dave Chinner's avatar
    GFS2: ordered writes are backwards · e5884636
    Dave Chinner authored
    When we queue data buffers for ordered write, the buffers are added
    to the head of the ordered write list. When the log needs to push
    these buffers to disk, it also walks the list from the head. The
    result is that the the ordered buffers are submitted to disk in
    reverse order.
    
    For large writes, this means that whenever the log flushes large
    streams of reverse sequential order buffers are pushed down into the
    block layers. The elevators don't handle this particularly well, so
    IO rates tend to be significantly lower than if the IO was issued in
    ascending block order.
    
    Queue new ordered buffers to the tail of the ordered buffer list to
    ensure that IO is dispatched in the order it was submitted. This
    should significantly improve large sequential write speeds. On a
    disk capable of 85MB/s, speeds increase from 50MB/s to 65MB/s for
    noop and from 38MB/s to 50MB/s for cfq.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
    e5884636
lops.c 18.9 KB