1. 20 Dec, 2006 1 commit
    • Jens Axboe's avatar
      [PATCH] cfq-iosched: don't allow sync merges across queues · da775265
      Jens Axboe authored
      
      Currently we allow any merge, even if the io originates from different
      processes. This can cause really bad starvation and unfairness, if those
      ios happen to be synchronous (reads or direct writes).
      
      So add a allow_merge hook to the io scheduler ops, so an io scheduler can
      help decide whether a bio/process combination may be merged with an
      existing request.
      Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
      da775265
  2. 13 Dec, 2006 1 commit
  3. 07 Dec, 2006 1 commit
  4. 01 Dec, 2006 1 commit
  5. 22 Nov, 2006 1 commit
    • David Howells's avatar
      WorkStruct: Pass the work_struct pointer instead of context data · 65f27f38
      David Howells authored
      
      Pass the work_struct pointer to the work function rather than context data.
      The work function can use container_of() to work out the data.
      
      For the cases where the container of the work_struct may go away the moment the
      pending bit is cleared, it is made possible to defer the release of the
      structure by deferring the clearing of the pending bit.
      
      To make this work, an extra flag is introduced into the management side of the
      work_struct.  This governs auto-release of the structure upon execution.
      
      Ordinarily, the work queue executor would release the work_struct for further
      scheduling or deallocation by clearing the pending bit prior to jumping to the
      work function.  This means that, unless the driver makes some guarantee itself
      that the work_struct won't go away, the work function may not access anything
      else in the work_struct or its container lest they be deallocated..  This is a
      problem if the auxiliary data is taken away (as done by the last patch).
      
      However, if the pending bit is *not* cleared before jumping to the work
      function, then the work function *may* access the work_struct and its container
      with no problems.  But then the work function must itself release the
      work_struct by calling work_release().
      
      In most cases, automatic release is fine, so this is the default.  Special
      initiators exist for the non-auto-release case (ending in _NAR).
      Signed-Off-By: default avatarDavid Howells <dhowells@redhat.com>
      65f27f38
  6. 31 Oct, 2006 1 commit
  7. 30 Oct, 2006 2 commits
  8. 01 Oct, 2006 1 commit
  9. 30 Sep, 2006 17 commits
  10. 21 Aug, 2006 1 commit
  11. 25 Jul, 2006 1 commit
  12. 30 Jun, 2006 1 commit
  13. 23 Jun, 2006 6 commits
    • Jens Axboe's avatar
      [PATCH] rbtree: support functions used by the io schedulers · dd67d051
      Jens Axboe authored
      
      They all duplicate macros to check for empty root and/or node, and
      clearing a node. So put those in rbtree.h.
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      dd67d051
    • Jens Axboe's avatar
      [PATCH] cfq-iosched: rq update fixes · fd61af03
      Jens Axboe authored
      
      - Remember to set ->last_sector so that the cfq_choose_req() logic
        works correctly.
      
      - Remove redundant call to cfq_choose_req()
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      fd61af03
    • Jens Axboe's avatar
      [PATCH] cfq-iosched: many performance fixes · caaa5f9f
      Jens Axboe authored
      
      This is a collection of patches that greatly improve CFQ performance
      in some circumstances.
      
      - Change the idling logic to only kick in after a request is done and we
        are deciding what to do. Before the idling included the request service
        time, so it was hard to adjust. Now it's true think/idle time.
      
      - Take advantage of TCQ/NCQ/queueing for seeky sync workloads, but keep
        it in control for sync and sequential (or close to) workloads.
      
      - Expire queues immediately and move on to other busy queues, if we are
        not going to idle after the current one finishes.
      
      - Don't rearm idle timer if there are no busy queues. Just leave the
        system idle.
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      caaa5f9f
    • Jens Axboe's avatar
      [PATCH] cfq-iosched: correctly set ioprio on both targets · 35e6077c
      Jens Axboe authored
      
      Patch originally from Vasily Tarasov <vtaras@sw.ru>
      
      If you set io-priority of process 1 using sys_ioprio_set system call by
      another process 2 (like ionice do), then cfq_init_prio_data() function
      sets priority of process 2 (current) on queue of process 1 and clears
      the flag, that designates change of ioprio.  So the process  1 will work
      like with priority of process 2.
      
      I propose not to call cfq_init_prio_data() on io-priority change, but
      only mark queue as queue with changed prority.  Every time when new
      request comes cfq-scheduler checks for this flag and atomaticaly changes
      priority of queue to new value.
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      35e6077c
    • Jens Axboe's avatar
      [PATCH] Kill PF_SYNCWRITE flag · b31dc66a
      Jens Axboe authored
      
      A process flag to indicate whether we are doing sync io is incredibly
      ugly. It also causes performance problems when one does a lot of async
      io and then proceeds to sync it. Part of the io will go out as async,
      and the other part as sync. This causes a disconnect between the
      previously submitted io and the synced io. For io schedulers such as CFQ,
      this will cause us lost merges and suboptimal behaviour in scheduling.
      
      Remove PF_SYNCWRITE completely from the fsync/msync paths, and let
      the O_DIRECT path just directly indicate that the writes are sync
      by using WRITE_SYNC instead.
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      b31dc66a
    • Jens Axboe's avatar
      [PATCH] cfq-iosched: Don't set the queue batching limits · 271f18f1
      Jens Axboe authored
      
      We cannot update them if the user changes nr_requests, so don't
      set it in the first place. The gains are pretty questionable as
      well. The batching loss has been shown to decrease throughput.
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      271f18f1
  14. 20 Jun, 2006 1 commit
  15. 14 Jun, 2006 1 commit
  16. 08 Jun, 2006 1 commit
    • Jens Axboe's avatar
      [PATCH] elevator switching race · bc1c1169
      Jens Axboe authored
      
      There's a race between shutting down one io scheduler and firing up the
      next, in which a new io could enter and cause the io scheduler to be
      invoked with bad or NULL data.
      
      To fix this, we need to maintain the queue lock for a bit longer.
      Unfortunately we cannot do that, since the elevator init requires to be
      run without the lock held.  This isn't easily fixable, without also
      changing the mempool API.  So split the initialization into two parts,
      and alloc-init operation and an attach operation.  Then we can
      preallocate the io scheduler and related structures, and run the attach
      inside the lock after we detach the old one.
      
      This patch has survived 30 minutes of 1 second io scheduler switching
      with a very busy io load.
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
      bc1c1169
  17. 01 Jun, 2006 2 commits