14 Sep, 2016

1 commit


20 Mar, 2012

1 commit

  • cfq caches the associated cfqq's for a given cic. The cache needs to
    be flushed if the cic's ioprio or blkcg has changed. It is currently
    done by requiring the changing action to set the respective
    ICQ_*_CHANGED bit in the icq and testing it from cfq_set_request(),
    which involves iterating through all the affected icqs.

    All cfq wants to know is whether ioprio and/or blkcg have changed
    since the last flush and can be easily achieved by just remembering
    the current ioprio and blkcg ID in cic.

    This patch adds cic->{ioprio|blkcg_id}, updates all ioprio users to
    use the remembered value instead, and updates cfq_set_request() path
    such that, instead of using icq_get_changed(), the current values are
    compared against the remembered ones and trigger appropriate flush
    action if not. Condition tests are moved inside both _changed
    functions which are now named check_ioprio_changed() and
    check_blkcg_changed().

    ioprio.h::task_ioprio*() can't be used anymore and replaced with
    open-coded IOPRIO_CLASS_NONE case in cfq_async_queue_prio().

    Signed-off-by: Tejun Heo
    Cc: Vivek Goyal
    Signed-off-by: Jens Axboe

    Tejun Heo
     

06 Jan, 2009

1 commit


07 May, 2008

1 commit


28 Jan, 2008

1 commit


20 Jul, 2007

1 commit

  • If we have two processes with different ioprio_class, but the same
    ioprio_data, their async requests will fall into the same queue. I guess
    such behavior is not expected, because it's not right to put real-time
    requests and best-effort requests in the same queue.

    The attached patch fixes the problem by introducing additional *cfqq
    fields on cfqd, pointing to per-(class,priority) async queues.

    Signed-off-by: Jens Axboe

    Vasily Tarasov
     

10 Jul, 2007

1 commit

  • With the cfq_queue hash removal, we inadvertently got rid of the
    async queue sharing. This was not intentional, in fact CFQ purposely
    shares the async queue per priority level to get good merging for
    async writes.

    So put some logic in cfq_get_queue() to track the shared queues.

    Signed-off-by: Jens Axboe

    Jens Axboe
     

21 Aug, 2006

1 commit


08 Jul, 2005

1 commit

  • - Make ioprio syscalls return long, like set/getpriority syscalls.
    - Move function prototypes into syscalls.h so we can pick them up in the
    32/64bit compat code.

    Signed-off-by: Anton Blanchard
    Acked-by: Jens Axboe
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Anton Blanchard
     

28 Jun, 2005

2 commits

  • - Adjust slice values

    - Instead of one async queue, one is defined per priority level. This
    prevents kernel threads (such as reiserfs/x and others) that run at
    higher io priority from conflicting with others. Previously, it was a
    coin toss what io prio the async queue got, it was defined by who
    first set up the queue.

    - Let a time slice only begin, when the previous slice is completely
    done. Previously we could be somewhat unfair to a new sync slice, if
    the previous slice was async and had several ios queued. This might
    need a little tweaking if throughput suffers a little due to this,
    allowing perhaps an overlap of a single request or so.

    - Optimize the calling of kblockd_schedule_work() by doing it only when
    it is strictly necessary (no requests in driver and work left to do).

    - Correct sync vs async logic. A 'normal' process can be purely async as
    well, and a flusher can be purely sync as well. Sync or async is now a
    property of the class defined and requests pending. Previously writers
    could be considered sync, when they were really async.

    - Get rid of the bit fields in cfqq and crq, use flags instead.

    - Various other cleanups and fixes

    Signed-off-by: Jens Axboe
    Signed-off-by: Linus Torvalds

    Jens Axboe
     
  • This updates the CFQ io scheduler to the new time sliced design (cfq
    v3). It provides full process fairness, while giving excellent
    aggregate system throughput even for many competing processes. It
    supports io priorities, either inherited from the cpu nice value or set
    directly with the ioprio_get/set syscalls. The latter closely mimic
    set/getpriority.

    This import is based on my latest from -mm.

    Signed-off-by: Jens Axboe
    Signed-off-by: Linus Torvalds

    Jens Axboe