1. 12 2月, 2007 1 次提交
  2. 03 1月, 2007 1 次提交
    • J
      [PATCH] cfq-iosched: merging problem · ec8acb69
      Jens Axboe 提交于
      Two issues:
      
      - The final return 1 should be a return 0, otherwise comparing cfqq is
        a noop.
      
      - bio_sync() only checks the sync flag, while rq_is_sync() checks both
        for READ and sync. The latter is what we want. Expand the bio check
        to include reads, and relax the restriction to allow merging of async
        io into sync requests.
      
      In the future we want to clean up the SYNC logic, right now it means
      both sync request (such as READ and O_DIRECT WRITE) and unplug-on-issue.
      Leave that for later.
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      ec8acb69
  3. 23 12月, 2006 1 次提交
  4. 20 12月, 2006 1 次提交
    • J
      [PATCH] cfq-iosched: don't allow sync merges across queues · da775265
      Jens Axboe 提交于
      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: NJens Axboe <jens.axboe@oracle.com>
      da775265
  5. 13 12月, 2006 1 次提交
  6. 08 12月, 2006 1 次提交
  7. 01 12月, 2006 1 次提交
  8. 22 11月, 2006 1 次提交
    • D
      WorkStruct: Pass the work_struct pointer instead of context data · 65f27f38
      David Howells 提交于
      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: NDavid Howells <dhowells@redhat.com>
      65f27f38
  9. 01 11月, 2006 1 次提交
  10. 31 10月, 2006 2 次提交
  11. 01 10月, 2006 18 次提交
  12. 21 8月, 2006 1 次提交
  13. 25 7月, 2006 1 次提交
  14. 01 7月, 2006 1 次提交
  15. 23 6月, 2006 6 次提交
    • J
      [PATCH] rbtree: support functions used by the io schedulers · dd67d051
      Jens Axboe 提交于
      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: NJens Axboe <axboe@suse.de>
      dd67d051
    • J
      [PATCH] cfq-iosched: rq update fixes · fd61af03
      Jens Axboe 提交于
      - Remember to set ->last_sector so that the cfq_choose_req() logic
        works correctly.
      
      - Remove redundant call to cfq_choose_req()
      Signed-off-by: NJens Axboe <axboe@suse.de>
      fd61af03
    • J
      [PATCH] cfq-iosched: many performance fixes · caaa5f9f
      Jens Axboe 提交于
      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: NJens Axboe <axboe@suse.de>
      caaa5f9f
    • J
      [PATCH] cfq-iosched: correctly set ioprio on both targets · 35e6077c
      Jens Axboe 提交于
      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: NJens Axboe <axboe@suse.de>
      35e6077c
    • J
      [PATCH] Kill PF_SYNCWRITE flag · b31dc66a
      Jens Axboe 提交于
      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: NJens Axboe <axboe@suse.de>
      b31dc66a
    • J
      [PATCH] cfq-iosched: Don't set the queue batching limits · 271f18f1
      Jens Axboe 提交于
      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: NJens Axboe <axboe@suse.de>
      271f18f1
  16. 21 6月, 2006 1 次提交
  17. 15 6月, 2006 1 次提交