public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH linux-2.6-block:master 00/05] blk: generic dispatch queue
@ 2005-10-19 12:35 Tejun Heo
  2005-10-19 12:35 ` [PATCH linux-2.6-block:master 01/05] blk: implement " Tejun Heo
                   ` (4 more replies)
  0 siblings, 5 replies; 24+ messages in thread
From: Tejun Heo @ 2005-10-19 12:35 UTC (permalink / raw)
  To: axboe; +Cc: linux-kernel

 Hello, Jens.

 This patchset implements generic dispatch queue.

 This patchset is composed of three parts.

 * Implementation of generic dispatch queue & updating individual
   elevators.
 * Move last_merge handling into generic elevator.
 * biodoc update

 Currently, each specific iosched maintains its own dispatch queue to
handle ordering, requeueing, cluster dispatching, etc...  This causes
the following problems.

 * duplicated codes
 * difficult to enforce semantics over dispatch queue (request
   ordering, requeueing, ...)
 * specific ioscheds have to deal with non-fs or ordered requests.

 With generic dispatch queue, specific ioscheds are guaranteed to be
handed only non-barrier fs requests, such that ioscheds only have to
implement ordering logic of normal fs requests.  Also, callback
invocation is stricter now.  Each fs request follows one of the
following paths.

 set_req_fn ->

 i.   add_req_fn -> (merged_fn ->)* -> dispatch_fn -> activate_req_fn ->
      (deactivate_req_fn -> activate_req_fn ->)* -> completed_req_fn
 ii.  add_req_fn -> (merged_fn ->)* -> merge_req_fn
 iii. [nothing]

 -> put_req_fn

 Previously, elv_remove_request() and elv_completed_request() weren't
invoked for requests which are allocated outside blk layer (!rq->rl);
however, other elevator/iosched functions are called for such requests
making things a bit confusing.  As this patchset prevents non-fs
requests from going into specific ioscheds and removing the
inconsistency is necessary for implementation.  rq->rl tests in those
places are removed.

 With generic dispatch queue implemented, last_merge handling can be
moved into generic elevator proper.  The second part of this patchset
does that.  One problem this change introduces is that, noop iosched
loses its ability to merge requests (as no merging is allowed for
requests on a generic dispatch queue).  To add it back cleanly, we
need to make noop use a separate list instead of q->queue_head to keep
requests before dispatching.  I don't know how meaningful this would
be.  The change should be simple & easy.  If merging capability of
noop iosched is important, plz let me know.

[ Start of patch descriptions ]

01_blk_implement-generic-dispatch-queue.patch
	: implement generic dispatch queue

	Implements generic dispatch queue which can replace all
        dispatch queues implemented by each iosched.  This reduces
        code duplication, eases enforcing semantics over dispatch
        queue, and simplifies specific ioscheds.

02_blk_generic-dispatch-queue-update-for-ioscheds.patch
	: update ioscheds to use generic dispatch queue

	This patch updates all four ioscheds to use generic dispatch
	queue.  There's one behavior change in as-iosched.

	* In as-iosched, when force dispatching
	  (ELEVATOR_INSERT_BACK), batch_data_dir is reset to REQ_SYNC
	  and changed_batch and new_batch are cleared to zero.  This
	  prevernts AS from doing incorrect update_write_batch after
	  the forced dispatched requests are finished.

	* In cfq-iosched, cfqd->rq_in_driver currently counts the
	  number of activated (removed) requests to determine
	  whether queue-kicking is needed and cfq_max_depth has been
	  reached.  With generic dispatch queue, I think counting
	  the number of dispatched requests would be more appropriate.

	* cfq_max_depth can be lowered to 1 again.

03_blk_generic-last_merge-handling.patch
	: move last_merge handling into generic elevator code

	Currently, both generic elevator code and specific ioscheds
        participate in the management and usage of last_merge.  This
        and the following patches move last_merge handling into
        generic elevator code.

04_blk_generic-last_merge-handling-update-for-ioscheds.patch
	: remove last_merge handling from ioscheds

	Remove last_merge handling from all ioscheds.  This patch
	removes merging capability of noop iosched.

05_blk_update-biodoc.patch
	: update biodoc

	Updates biodoc to reflect changes in elevator API.

[ End of patch descriptions ]

 Thanks.

--
tejun


^ permalink raw reply	[flat|nested] 24+ messages in thread
* [PATCH linux-2.6-block:master 00/05] blk: generic dispatch queue
@ 2005-07-26 13:56 Tejun Heo
  2005-07-26 13:56 ` [PATCH linux-2.6-block:master 02/05] blk: update ioscheds to use " Tejun Heo
  0 siblings, 1 reply; 24+ messages in thread
From: Tejun Heo @ 2005-07-26 13:56 UTC (permalink / raw)
  To: axboe; +Cc: linux-kernel

 Hello, Jens.

 This patchset implements generic dispatch queue.  The patches are
against the master head of linux-2.6-block tree.

 Changes from the first posting of this patchset are...

 * elevator_activate_req_fn is now called when the driver first sees
   the request (the first elv_next_request() of a request) not when
   the request is removed.  This makes iosched's accounting identical
   to before.  There should be no noticeable behavior change.
 * All ioscheds are updated
 * Doc update
 * Misc comment/code changes

 This patchset is composed of three parts.

 * Implementation of generic dispatch queue & updating individual
   elevators.
 * Move last_merge handling into generic elevator.
 * biodoc update

 Currently, each specific iosched maintains its own dispatch queue to
handle ordering, requeueing, cluster dispatching, etc...  This causes
the following problems.

 * duplicated codes
 * difficult to enforce semantics over dispatch queue (request
   ordering, requeueing, ...)
 * specific ioscheds have to deal with non-fs or ordered requests.

 With generic dispatch queue, specific ioscheds are guaranteed to be
handed only non-barrier fs requests, such that ioscheds only have to
implement ordering logic of normal fs requests.  Also, callback
invocation is stricter now.  Each fs request follows one of the
following paths.

 set_req_fn ->

 i.   add_req_fn -> (merged_fn ->)* -> dispatch_fn -> activate_req_fn ->
      (deactivate_req_fn -> activate_req_fn ->)* -> completed_req_fn
 ii.  add_req_fn -> (merged_fn ->)* -> merge_req_fn
 iii. [none]

 -> put_req_fn

 Previously, elv_remove_request() and elv_completed_request() weren't
invoked for requests which are allocated outside blk layer (!rq->rl);
however, other elevator/iosched functions are called for such requests
making things a bit confusing.  As this patchset prevents non-fs
requests from going into specific ioscheds and removing the
inconsistency is necessary for implementation.  rq->rl tests in those
places are removed.

 With generic dispatch queue implemented, last_merge handling can be
moved into generic elevator proper.  The second part of this patchset
does that.  One problem this change introduces is that, noop iosched
loses its ability to merge requests (as no merging is allowed for
requests on a generic dispatch queue).  To add it back cleanly, we
need to make noop use a separate list instead of q->queue_head to keep
requests before dispatching.  I don't know how meaningful this would
be.  The change should be simple & easy.  If merging capability of
noop iosched is important, plz let me know.

[ Start of patch descriptions ]

01_blk_implement-generic-dispatch-queue.patch
	: implement generic dispatch queue

	Implements generic dispatch queue which can replace all
        dispatch queues implemented by each iosched.  This reduces
        code duplication, eases enforcing semantics over dispatch
        queue, and simplifies specific ioscheds.

02_blk_generic-dispatch-queue-update-for-ioscheds.patch
	: update ioscheds to use generic dispatch queue

	This patch updates all four ioscheds to use generic dispatch
	queue.  There's one behavior change in as-iosched.

	* In as-iosched, when force dispatching
	  (ELEVATOR_INSERT_BACK), batch_data_dir is reset to REQ_SYNC
	  and changed_batch and new_batch are cleared to zero.  This
	  prevernts AS from doing incorrect update_write_batch after
	  the forced dispatched requests are finished.

03_blk_generic-last_merge-handling.patch
	: move last_merge handling into generic elevator code

	Currently, both generic elevator code and specific ioscheds
        participate in the management and usage of last_merge.  This
        and the following patches move last_merge handling into
        generic elevator code.

04_blk_generic-last_merge-handling-update-for-ioscheds.patch
	: remove last_merge handling from ioscheds

	Remove last_merge handling from all ioscheds.  This patch
	removes merging capability of noop iosched.

05_blk_update-biodoc.patch
	: update biodoc

	Updates biodoc to reflect changes in elevator API.

[ End of patch descriptions ]

 Thanks.

--
tejun


^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2005-11-17 13:45 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-10-19 12:35 [PATCH linux-2.6-block:master 00/05] blk: generic dispatch queue Tejun Heo
2005-10-19 12:35 ` [PATCH linux-2.6-block:master 01/05] blk: implement " Tejun Heo
2005-10-20 10:00   ` Jens Axboe
2005-10-20 13:45     ` Tejun Heo
2005-10-20 14:04       ` Jens Axboe
2005-10-20 14:19         ` Tejun Heo
2005-10-19 12:35 ` [PATCH linux-2.6-block:master 02/05] blk: update ioscheds to use " Tejun Heo
2005-10-20 11:21   ` Jens Axboe
2005-10-20 13:51     ` Tejun Heo
2005-10-20 14:11       ` Jens Axboe
2005-10-20 14:35         ` Tejun Heo
2005-10-20 14:41           ` Jens Axboe
2005-10-20 15:00             ` Tejun Heo
2005-10-20 17:07               ` Jens Axboe
2005-10-20 17:31                 ` Tejun Heo
2005-11-17 13:34               ` [PATCH linux-2.6-14-mm2] block: problem unloading I/O-Scheduler Module Dirk Henning Gerdes
2005-11-17 13:46                 ` Jens Axboe
2005-10-19 12:35 ` [PATCH linux-2.6-block:master 03/05] blk: move last_merge handling into generic elevator code Tejun Heo
2005-10-20 11:26   ` Jens Axboe
2005-10-19 12:35 ` [PATCH linux-2.6-block:master 04/05] blk: remove last_merge handling from ioscheds Tejun Heo
2005-10-20 11:26   ` Jens Axboe
2005-10-19 12:35 ` [PATCH linux-2.6-block:master 05/05] blk: update biodoc Tejun Heo
2005-10-20 11:27   ` Jens Axboe
  -- strict thread matches above, loose matches on Subject: below --
2005-07-26 13:56 [PATCH linux-2.6-block:master 00/05] blk: generic dispatch queue Tejun Heo
2005-07-26 13:56 ` [PATCH linux-2.6-block:master 02/05] blk: update ioscheds to use " Tejun Heo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox