GIT 90e7b63ba35692583b400528ab7e0379e954c11d git+ssh://master.kernel.org/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git#for-akpm commit 59a8955915d9ec77139880fe8fe2c8992b18334a Author: Jens Axboe Date: Thu Apr 26 14:41:53 2007 +0200 [PATCH] elevator: elv_list_lock does not need irq disabling It's never grabbed from irq context, so just make it plain spin_lock(). Signed-off-by: Jens Axboe commit 9d80aac3ba2a7881b4635c4c4d3a29bcae7b930e Author: Jens Axboe Date: Mon Apr 2 10:06:42 2007 +0200 [BLOCK] Don't pin lots of memory in mempools Currently we scale the mempool sizes depending on memory installed in the machine, except for the bio pool itself which sits at a fixed 256 entry pre-allocation. There's really no point in "optimizing" this OOM path, we just need enough preallocated to make progress. A single unit is enough, lets scale it down to 2 just to be on the safe side. This patch saves ~150kb of pinned kernel memory on a 32-bit box. Signed-off-by: Jens Axboe commit 40e4ded36f9a0e2249fc09b39b6e6824589a66db Author: Jens Axboe Date: Tue Apr 24 21:23:53 2007 +0200 cfq-iosched: speedup cic rb lookup We often lookup the same queue many times in succession, so cache the last looked up queue to avoid browsing the rbtree. Signed-off-by: Jens Axboe commit e76fb480429eafaaa572b1c8721f03dd7b0541ff Author: Jens Axboe Date: Tue Apr 24 21:17:33 2007 +0200 ll_rw_blk: add io_context private pointer To be used by as/cfq as they see fit. Signed-off-by: Jens Axboe commit ed7e5b51e6b79377cf955f49ff605da2bbc87b71 Author: Vasily Tarasov Date: Wed Apr 25 12:29:51 2007 +0200 cfq-iosched: get rid of cfqq hash cfq hash is no more necessary. We always can get cfqq from io context. cfq_get_io_context_noalloc() function is introduced, because we don't want to allocate cic on merging and checking may_queue. In order to identify sync queue we've used hash key = CFQ_KEY_ASYNC. Since hash is eliminated we need to use other criterion: sync flag for queue is added. In all places where we dig in rb_tree we're in current context, so no additional locking is required. Advantages of this patch: no additional memory for hash, no seeking in hash, code is cleaner. But it is necessary now to seek cic in per-ioc rbtree, but it is faster: - most processes work only with few devices - most systems have only few block devices - it is a rb-tree Signed-off-by: Vasily Tarasov Changes by me: - Merge into CFQ devel branch - Get rid of cfq_get_io_context_noalloc() - Fix various bugs with dereferencing cic->cfqq[] with offset other than 0 or 1. - Fix bug in cfqq setup, is_sync condition was reversed. - Fix bug where only bio_sync() is used, we need to check for a READ too Signed-off-by: Jens Axboe commit b6cabf2de8385f2d001be8a241433903e2cdc88e Author: Jens Axboe Date: Fri Apr 20 20:45:39 2007 +0200 cfq-iosched: tighten queue request overlap condition For tagged devices, allow overlap of requests if the idle window isn't enabled on the current active queue. Signed-off-by: Jens Axboe commit 0661cb98dd67fbb3ad3f13a3307220aa54d57628 Author: Jens Axboe Date: Mon Apr 23 08:33:33 2007 +0200 cfq-iosched: improve sync vs async workloads Signed-off-by: Jens Axboe commit 1200a411dd500323996408f2e61242e5542a7933 Author: Jens Axboe Date: Thu Apr 19 14:32:26 2007 +0200 cfq-iosched: never allow an async queue idling We don't enable it by default, don't let it get enabled during runtime. Signed-off-by: Jens Axboe commit 05ab1d403c90874ae91c1ae879916545c78a0e67 Author: Jens Axboe Date: Mon Apr 23 08:26:36 2007 +0200 cfq-iosched: get rid of ->dispatch_slice We can track it fairly accurately locally, let the slice handling take care of the rest. Signed-off-by: Jens Axboe commit fd48f289a601b0de0082883de5419dd4345b0e8d Author: Jens Axboe Date: Mon Apr 23 08:25:00 2007 +0200 cfq-iosched: don't pass unused preemption variable around We don't use it anymore in the slice expiry handling. Signed-off-by: Jens Axboe commit 018460296d68daa8a678dc57675434b802a4b039 Author: Jens Axboe Date: Thu Apr 19 12:03:34 2007 +0200 cfq-iosched: get rid of ->cur_rr and ->cfq_list It's only used for preemption now that the IDLE and RT queues also use the rbtree. If we pass an 'add_front' variable to cfq_service_tree_add(), we can set ->rb_key to 0 to force insertion at the front of the tree. Signed-off-by: Jens Axboe commit d735358661de5f8f1af423e5864c3324f4273252 Author: Jens Axboe Date: Fri Apr 20 14:18:00 2007 +0200 cfq-iosched: slice offset should take ioprio into account Use the max_slice-cur_slice as the multipler for the insertion offset. Signed-off-by: Jens Axboe commit e982d068e0353bdcb75003b43ab5e6961d4cc506 Author: Jens Axboe Date: Thu Apr 26 12:54:48 2007 +0200 [PATCH] cfq-iosched: style cleanups and comments Signed-off-by: Jens Axboe commit 70c296ba2222a8ac8123e3f61021e8ed61719575 Author: Jens Axboe Date: Wed Apr 18 20:13:32 2007 +0200 cfq-iosched: sort IDLE queues into the rbtree Same treatment as the RT conversion, just put the sorted idle branch at the end of the tree. Signed-off-by: Jens Axboe commit 246206c4e2851d76701bceeb36e9e70f744676ab Author: Jens Axboe Date: Wed Apr 18 20:01:57 2007 +0200 cfq-iosched: sort RT queues into the rbtree Currently CFQ does a linked insert into the current list for RT queues. We can just factor the class into the rb insertion, and then we don't have to treat RT queues in a special way. It's faster, too. Signed-off-by: Jens Axboe commit 53e6c18a6017595979c4027762c86efa24e95dba Author: Jens Axboe Date: Thu Apr 26 12:53:50 2007 +0200 [PATCH] cfq-iosched: speed up rbtree handling For cases where the rbtree is mainly used for sorting and min retrieval, a nice speedup of the rbtree code is to maintain a cache of the leftmost node in the tree. Also spotted in the CFS CPU scheduler code. Improved by Alan D. Brunelle by updating the leftmost hint in cfq_rb_first() if it isn't set, instead of only updating it on insert. Signed-off-by: Jens Axboe commit 35fd25815bc7f5b9d82493758a84a6e55c413020 Author: Jens Axboe Date: Fri Apr 20 14:27:50 2007 +0200 cfq-iosched: rework the whole round-robin list concept Drawing on some inspiration from the CFS CPU scheduler design, overhaul the pending cfq_queue concept list management. Currently CFQ uses a doubly linked list per priority level for sorting and service uses. Kill those lists and maintain an rbtree of cfq_queue's, sorted by when to service them. This unfortunately means that the ionice levels aren't as strong anymore, will work on improving those later. We only scale the slice time now, not the number of times we service. This means that latency is better (for all priority levels), but that the distinction between the highest and lower levels aren't as big. The diffstat speaks for itself. cfq-iosched.c | 363 +++++++++++++++++--------------------------------- 1 file changed, 125 insertions(+), 238 deletions(-) Signed-off-by: Jens Axboe commit b2503683bd75376ce195bb24522b36cd7878e365 Author: Jens Axboe Date: Tue Apr 17 12:47:55 2007 +0200 cfq-iosched: minor updates - Move the queue_new flag clear to when the queue is selected - Only select the non-first queue in cfq_get_best_queue(), if there's a substantial difference between the best and first. - Get rid of ->busy_rr - Only select a close cooperator, if the current queue is known to take a while to "think". Signed-off-by: Jens Axboe commit 16c97c493977bee7d01129950fe62ae3bc627ce6 Author: Jens Axboe Date: Wed Apr 25 12:44:27 2007 +0200 cfq-iosched: development update - Implement logic for detecting cooperating processes, so we choose the best available queue whenever possible. - Improve residual slice time accounting. - Remove dead code: we no longer see async requests coming in on sync queues. That part was removed a long time ago. That means that we can also remove the difference between cfq_cfqq_sync() and cfq_cfqq_class_sync(), they are now indentical. And we can kill the on_dispatch array, just make it a counter. - Allow a process to go into the current list, if it hasn't been serviced in this scheduler tick yet. Possible future improvements including caching the cfqq lookup in cfq_close_cooperator(), so we don't have to look it up twice. cfq_get_best_queue() should just use that last decision instead of doing it again. Signed-off-by: Jens Axboe commit 557a66efc69279c1a05be9a947d967a21622046b Author: Jens Axboe Date: Wed Feb 14 19:59:49 2007 +0100 cfq-iosched: improve preemption for cooperating tasks When testing the syslet async io approach, I discovered that CFQ sometimes didn't perform as well as expected. cfq_should_preempt() needs to better check for cooperating tasks, so fix that by allowing preemption of an equal priority queue if the recently queued request is as good a candidate for IO as the one we are currently waiting for. Signed-off-by: Jens Axboe fs/bio.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/fs/bio.c b/fs/bio.c index 093345f..9b98302 100644 --- a/fs/bio.c +++ b/fs/bio.c @@ -1193,7 +1193,12 @@ static void __init biovec_init_slabs(voi static int __init init_bio(void) { +<<<<<<< HEAD/fs/bio.c bio_slab = KMEM_CACHE(bio, SLAB_HWCACHE_ALIGN|SLAB_PANIC); +======= + bio_slab = kmem_cache_create("bio", sizeof(struct bio), 0, + SLAB_HWCACHE_ALIGN|SLAB_PANIC, NULL, NULL); +>>>>>>> /fs/bio.c biovec_init_slabs();