Port of Niels Provos's file descriptor allocation code

Dag-ErlingSmørgrav des at des.no
Thu Dec 4 07:24:31 PST 2003


Tim Robbins <tjr at freebsd.org> writes:
> It doesn't seem to make a noticeable impact on execution time for processes
> with small numbers of descriptors. It's probably swamped by the overhead of
> mode switches, locking, and filesystem operations. What makes uneasy is the
> amount of extra memory it consumes when processes have a small number of
> descriptors: (32**2)/8 = 128 bytes (when int is 32 bits), or (64**2)/8 =
> 512 bytes (when int is 64 bits).

I'm not sure where you get these numbers from.  Actual growth of
struct filedesc is:

 - two pointers
 - one 32-bit int (himap) (used when nfiles <= 1024)
 - one array of 32 32-bit ints (lomap) (used when nfiles <= 1024)

For higher values of nfiles, larger arrays are malloc'ed and the
static arrays are left unused.

The total is 35*4 = 140 bytes per struct filedesc on 32-bit platforms
and 2*8 + 33*4 = 148 bytes per struct filedesc on 64-bit platforms.

Modifying the code to use 64-bit ints on 64-bit platforms would change
that number to 67*8 = 536 bytes per struct filedesc, but the cutoff
would be at nfiles == 4096 instead of 1024.

>                                  I've been thinking of switching to a flat
> bitmap for small fd tables, possibly just using a single "int", or falling
> back to the old way of scanning fd_ofiles directly.

That would increase code complexity.  The patch already increases fd
allocation overhead by about 7% on my ev56 and 1% on my p4 for low
values of nfiles (though the performance improvement for higher values
is immense).  It is possible that a pure 64-bit implementation would
fare better on the Alpha than the current 32-bit implementation.

>                                                     Once I decide what to
> do about that and find someone to test my latest patch on a 64-bit machine,
> I'll commit it.

It works fine on my Alpha, using 32-bit ints.  I haven't tried
modifying the patch to use 64-bit ints on 64-bit platforms.

DES
-- 
Dag-Erling Smørgrav - des at des.no


More information about the freebsd-current mailing list