Messages in this thread | | | Date | Thu, 13 Jun 2013 15:08:31 -0400 | From | "J. Bruce Fields" <> | Subject | Re: [PATCH] Percpu tag allocator |
| |
On Thu, Jun 13, 2013 at 11:53:18AM -0700, Tejun Heo wrote: > The thing is that id[r|a] guarantee that the lowest available slot is > allocated and this is important because it's used to name things which > are visible to userland - things like block device minor number, > device indicies and so on. That alone pretty much ensures that > alloc/free paths can't be very scalable which usually is fine for most > id[r|a] use cases as long as lookup is fast. I'm doubtful that it's a > good idea to push per-cpu tag allocation into id[r|a]. The use cases > are quite different. > > In fact, maybe what we can do is adding some features on top of the > tag allocator and moving id[r|a] users which don't require strict > in-order allocation to it. For example, NFS allocates an ID for each > transaction it performs and uses it to index the associate command > structure (Jeff, Bruce, please correct me if I'm getting it wrong).
It's not really per-transaction: it's more like an identifier for a piece of lock state (an open, a lock, whatever), so a bit like a file descriptor, but there's no requirement they be "small".
> The only requirement on IDs is that they shouldn't be recycled too > fast.
Yep.--b.
> Currently, idr implements cyclic mode for it but it can easily > be replaced with per-cpu tag allocator like this one and it'd be a lot > more scalable. There are a couple things to worry about tho - it > probably should use the highbits as generation number as a tag is > given out so that the actual ID doesn't get recycled quickly, and some > form dynamic tag sizing would be nice too. > > Thanks. > > -- > tejun
| |