Messages in this thread | | | Date | Thu, 7 Jun 2007 14:57:33 -0700 (PDT) | From | Davide Libenzi <> | Subject | Re: [patch 7/8] fdmap v2 - implement sys_socket2 |
| |
On Thu, 7 Jun 2007, Eric Dumazet wrote:
> Davide Libenzi a écrit : > > On Thu, 7 Jun 2007, Eric Dumazet wrote: > > > > > Davide, are you sure we want FIFO for non sequential allocations ? > > > > > > This tends to use all the fmap slots, and not very cache friendly > > > if an app does a lot of [open(),...,close()] things. We already got a perf > > > drop because of RCUification of file freeing (FIFO mode instead of LIFO > > > given by kmalloc()/kfree()) > > > > > > If the idea behind this FIFO was security (ie not easy for an app to > > > predict next glibc file handle), we/glibc might use yet another > > > FD_SECUREMODE flag, wich ORed with O_NONSEQFD would ask to fdmap_newfd() > > > to take the tail of fmap->slist, not head. > > > > Uli, would it be OK to rely only on base randomization and use a LIFO > > instead? We have base randomization, plus LIFO does not mean strictly > > sequential like legacy allocator, just more compatc and cache friendly. > > > > I am afraid randomization wont really work if /sbin/init or /bin/bash for > example uses one (or more) unseq fd : > The 'random base' will be propagated at fork()/exec() time ?
As I said to Uli, we can't move the base while fds are in there. We can re-randomize it when it's empty. This can also be done (it's a trivial and fast operation - just set fmap->base to a new value) even every time the fd count on the map touches zero.
- Davide
| |