• Jens Axboe's avatar
    [PATCH] CFQ io scheduler updates · 3b18152c
    Jens Axboe authored
    - 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: default avatarJens Axboe <axboe@suse.de>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    3b18152c
cfq-iosched.c 62 KB