All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <axboe@suse.de>
To: Andrew Morton <akpm@osdl.org>
Cc: markw@osdl.org, linux-kernel@vger.kernel.org
Subject: Re: 2.6.4-mm2
Date: Fri, 19 Mar 2004 09:31:25 +0100	[thread overview]
Message-ID: <20040319083125.GE22234@suse.de> (raw)
In-Reply-To: <20040319001921.269380a3.akpm@osdl.org>

On Fri, Mar 19 2004, Andrew Morton wrote:
> Jens Axboe <axboe@suse.de> wrote:
> >
> > > Is it not the case that two dm maps can refer to the same queue?  Say, one
> > > map uses /dev/hda1 and another map uses /dev/hda2?
> > > 
> > > If so, then when the /dev/hda queue is plugged we need to tell both the
> > > higher-level maps that this queue needs an unplug.  So blk_plug_device()
> > > and the various unplug functions need to perform upcalls to an arbitrary
> > > number of higher-level drivers, and those drivers need to keep track of the
> > > currently-plugged queues without adding data structures to the
> > > request_queue structure.
> > > 
> > > It can be done of course, but could get messy.
> > 
> > That would get nasty, it's much more natural to track it from the other
> > end. I view it as a dm (or whatever problem) that they need to track who
> > has pending io on their behalf, which is pretty easy to to from eg
> > __map_bio().
> 
> But dm doesn't know enough.  Suppose it is managing a map which includes
> /dev/hda1 and I do some I/O against /dev/hda2 which plugs the queue.  dm
> needs to know about that plug.

I don't follow at all. If dm initiates io against /dev/hda2, it's part
of that mapped device and it can trigger and note the unplug just fine.
If io goes through a 2nd level of dm maps that isn't an issue either,
the 2nd level dm device will maintain the state needed to unplug that
device automagically.

But it does get a bit hairy, and I'm getting lost in dm data
structures...

> Actually the data structure isn't toooo complex.
> 
> - In the request_queue add a list_head of "interested drivers"
> 
> - In a dm map, add:
> 
> 	struct interested_driver {
> 		list_head list;
> 		void (*plug_upcall)(struct request_queue *q, void *private);
> 		void (*unplug_upcall)(struct request_queue *q, void *private);
> 		void *private;
> 	}
> 
>   and when setting up a map, dm does:
> 
>   blk_register_interested_driver(struct request_queue *q,
> 			struct interested_driver *d)
>   {
> 	list_add(&d->list, q->interested_driver_list);
>   }
> 
> - In blk_device_plug():
> 
>      list_for_each_entry(d, q->interested_driver_list, list) {
> 	(*d->plug_upcall)(q, d->private);
>      }
> 
> - Similar in the unplug functions.
> 
> 
> And in dm, maintain a dynamically allocated array of request_queue*'s:
> 
>   dm_plug_upcall(struct request_queue *q, void *private)
>   {
> 	map = private;
> 
> 	map->plugged_queues[map->nr_plugged_queues++] = q;
>   }
> 
>   dm_unplug_upcall(struct request_queue *q, void *private)
>   {
> 	map = private;
> 
>  	for (i = 0; i < map->nr_plugged_queues; i++) {
> 		if (map->plugged_queues[i] == q) {
> 			memcpy(&map->plugged_queues[i],
> 				&map->plugged_queues[i+1],
> 				<whatever>
> 		}
> 	}
>   }
> 
> unplug_upcall is a bit sucky, but they're much less frequent than the
> current unplug downcalls.  

I guess that'd work ok, as far as I can see..

> Frankly, I wouldn't bother.  0.5% CPU when hammering the crap out of a
> 56-disk LVM isn't too bad.  I'd suggest you first try to simply reduce the
> number of cache misses in the inner loop, see what that leaves us with.

Yeah I guess you are right, probably not a worry. At least not now, and
the dm folks can always play with the above if they want.

I'll send you a small update for -mm with the unconditional unplug
killed (at least it cuts it in half) and analyzed the loop.

-- 
Jens Axboe


  reply	other threads:[~2004-03-19  8:31 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-03-15  1:28 2.6.4-mm2 Andrew Morton
2004-03-15  1:57 ` 2.6.4-mm2 Joshua Kwan
2004-03-15  6:08   ` 2.6.4-mm2 Sam Ravnborg
2004-03-15  9:32 ` [patch] 2.6.4-mm2: ALSA au88x0.c doesn't compile with gcc 2.95 Adrian Bunk
2004-03-15  9:36 ` 2.6.4-mm2: ALSA au88{1,2}0: multiply defined symbols Adrian Bunk
2004-03-15 18:54 ` 2.6.4-mm2 Sam Ravnborg
2004-03-20 22:50   ` 2.6.4-mm2 Olaf Hering
2004-03-15 19:18 ` 2.6.4-mm2 (compile stats) John Cherry
2004-03-15 20:57 ` 2.6.4-mm2 Thomas Schlichter
2004-03-15 21:08   ` 2.6.4-mm2 Thomas Schlichter
2004-03-15 21:18   ` 2.6.4-mm2 Andrew Morton
2004-03-15 21:18     ` 2.6.4-mm2 Jens Axboe
2004-03-15 22:40     ` 2.6.4-mm2 Thomas Schlichter
2004-03-15 22:11 ` 2.6.4-mm2 Jesse Barnes
2004-03-16 18:32 ` 2.6.4-mm2 Daniel McNeil
2004-03-16 21:58   ` 2.6.4-mm2 Chris Mason
2004-03-16 23:21     ` 2.6.4-mm2 Andrew Morton
2004-03-16 23:28       ` 2.6.4-mm2 Andrew Morton
2004-03-16 23:39         ` 2.6.4-mm2 Andrew Morton
2004-03-17  0:10           ` 2.6.4-mm2 Daniel McNeil
     [not found]           ` <1079485055.4181.1115.camel@watt.suse.com>
     [not found]             ` <1079487710.3100.22.camel@ibm-c.pdx.osdl.net>
     [not found]               ` <20040316180043.441e8150.akpm@osdl.org>
2004-03-17 20:11                 ` 2.6.4-mm2 Chris Mason
2004-03-17 20:33                   ` 2.6.4-mm2 Andrew Morton
2004-03-17 22:46                     ` 2.6.4-mm2 Chris Mason
2004-03-17 23:09                       ` 2.6.4-mm2 Andrew Morton
2004-03-17 23:27                         ` 2.6.4-mm2 Chris Mason
2004-03-17 23:51                           ` 2.6.4-mm2 Andrew Morton
2004-03-18  0:06                             ` 2.6.4-mm2 Chris Mason
2004-03-18  0:13                               ` 2.6.4-mm2 Andrew Morton
2004-03-18  0:31                                 ` 2.6.4-mm2 Chris Mason
2004-03-18  0:33                                   ` 2.6.4-mm2 Andrew Morton
2004-03-18  0:41                                     ` 2.6.4-mm2 Chris Mason
2004-03-18  1:15                                     ` 2.6.4-mm2 Daniel McNeil
2004-03-18 17:53                                       ` 2.6.4-mm2 Daniel McNeil
2004-03-18 18:47                                         ` 2.6.4-mm2 Chris Mason
2004-03-18 19:10                                           ` 2.6.4-mm2 Daniel McNeil
2004-03-19 16:49                                             ` 2.6.5-rc2-mm2 and direct_read_under Daniel McNeil
2004-03-19 17:05                                               ` 2.6.5-rc1-mm2 " Daniel McNeil
2004-03-21 14:36                                                 ` Chris Mason
2004-03-22 18:10                                                   ` 2.6.5-rc1-mm2 and direct_read_under and wb Daniel McNeil
2004-03-22 18:23                                                     ` Chris Mason
2004-03-22 18:27                                                       ` Chris Mason
2004-03-22 18:35                                                     ` Chris Mason
2004-03-22 18:51                                                       ` Daniel McNeil
2004-03-22 23:13                                                         ` Andrew Morton
2004-03-23  0:51                                                           ` Daniel McNeil
2004-03-23  9:25                                                             ` Andrew Morton
2004-03-23 17:05                                                               ` Daniel McNeil
2004-03-23 17:59                                                                 ` Andrew Morton
2004-03-23 21:38                                                                   ` Daniel McNeil
2004-03-23 21:47                                                                     ` Andrew Morton
2004-03-18 17:37 ` 2.6.4-mm2 markw
2004-03-18 18:06   ` 2.6.4-mm2 Andrew Morton
2004-03-18 18:48     ` 2.6.4-mm2 markw
2004-03-18 19:10       ` 2.6.4-mm2 Chris Mason
2004-03-18 19:27     ` 2.6.4-mm2 Jens Axboe
2004-03-18 23:38       ` 2.6.4-mm2 markw
2004-03-19  7:39         ` 2.6.4-mm2 Jens Axboe
2004-03-19  3:15       ` 2.6.4-mm2 Andrew Morton
2004-03-19  7:39         ` 2.6.4-mm2 Jens Axboe
2004-03-19  7:52           ` 2.6.4-mm2 Andrew Morton
2004-03-19  7:57             ` 2.6.4-mm2 Jens Axboe
2004-03-19  8:19               ` 2.6.4-mm2 Andrew Morton
2004-03-19  8:31                 ` Jens Axboe [this message]
2004-03-19  8:39                   ` 2.6.4-mm2 Andrew Morton
2004-03-19  8:48                     ` 2.6.4-mm2 Jens Axboe
2004-03-19  9:56             ` 2.6.4-mm2 Miquel van Smoorenburg
2004-03-19 10:00               ` 2.6.4-mm2 Jens Axboe
     [not found]         ` <20040318194150.4de65049.akpm@osdl.org>
2004-03-20  2:39           ` 2.6.4-mm2 Mark Wong
2004-03-20  2:47             ` 2.6.4-mm2 Mark Wong
2004-03-20  2:50             ` 2.6.4-mm2 Andrew Morton
2004-03-20  2:53               ` 2.6.4-mm2 Mark Wong
2004-03-20  3:52                 ` 2.6.4-mm2 Nick Piggin
2004-03-20  4:14                   ` 2.6.4-mm2 Andrew Morton
2004-03-20  4:24                     ` 2.6.4-mm2 Nick Piggin
2004-03-20  4:26                       ` 2.6.4-mm2 Nick Piggin
2004-03-20 21:17                       ` 2.6.4-mm2 Martin J. Bligh
2004-03-22 17:19             ` 2.6.4-mm2 Mary Edie Meredith
2004-03-22 17:19               ` 2.6.4-mm2 Mary Edie Meredith
2004-03-23  0:27               ` 2.6.4-mm2 Andrew Morton
2004-03-23  0:27                 ` 2.6.4-mm2 Andrew Morton
2004-03-23 19:21                 ` 2.6.4-mm2 Mary Edie Meredith
2004-03-23 19:21                   ` 2.6.4-mm2 Mary Edie Meredith
2004-03-23 19:32                   ` 2.6.4-mm2 Andrew Morton
2004-03-23 19:32                     ` 2.6.4-mm2 Andrew Morton
2004-03-24  0:07                     ` 2.6.4-mm2 Mary Edie Meredith
2004-03-24  0:07                       ` 2.6.4-mm2 Mary Edie Meredith
2004-03-30 21:30                       ` 2.6.4-mm2 Mary Edie Meredith
2004-03-30 21:30                         ` 2.6.4-mm2 Mary Edie Meredith
     [not found] <A6974D8E5F98D511BB910002A50A6647615F5E26@hdsmsx402.hd.intel.com>
2004-03-20  4:19 ` 2.6.4-mm2 Len Brown
2004-03-20  4:26   ` 2.6.4-mm2 Andrew Morton
2004-03-20  4:32     ` 2.6.4-mm2 Mark Wong
     [not found] <A6974D8E5F98D511BB910002A50A6647615F5E2B@hdsmsx402.hd.intel.com>
2004-03-20  4:27 ` 2.6.4-mm2 Len Brown
2004-03-20  9:01   ` 2.6.4-mm2 Nick Piggin
2004-03-22 16:24     ` 2.6.4-mm2 markw
  -- strict thread matches above, loose matches on Subject: below --
2004-03-20 23:12 2.6.4-mm2 sam
2004-03-20 23:41 ` 2.6.4-mm2 Olaf Hering

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040319083125.GE22234@suse.de \
    --to=axboe@suse.de \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markw@osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.