• V
    [PATCH] fdtable: Implement new pagesize-based fdtable allocator · 5466b456
    Vadim Lobanov 提交于
    This patch provides an improved fdtable allocation scheme, useful for
    expanding fdtable file descriptor entries.  The main focus is on the fdarray,
    as its memory usage grows 128 times faster than that of an fdset.
    
    The allocation algorithm sizes the fdarray in such a way that its memory usage
    increases in easy page-sized chunks. The overall algorithm expands the allowed
    size in powers of two, in order to amortize the cost of invoking vmalloc() for
    larger allocation sizes. Namely, the following sizes for the fdarray are
    considered, and the smallest that accommodates the requested fd count is
    chosen:
    
        pagesize / 4
        pagesize / 2
        pagesize      <- memory allocator switch point
        pagesize * 2
        pagesize * 4
        ...etc...
    
    Unlike the current implementation, this allocation scheme does not require a
    loop to compute the optimal fdarray size, and can be done in efficient
    straightline code.
    
    Furthermore, since the fdarray overflows the pagesize boundary long before any
    of the fdsets do, it makes sense to optimize run-time by allocating both
    fdsets in a single swoop.  Even together, they will still be, by far, smaller
    than the fdarray.  The fdtable->open_fds is now used as the anchor for the
    fdset memory allocation.
    Signed-off-by: NVadim Lobanov <vlobanov@speakeasy.net>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Dipankar Sarma <dipankar@in.ibm.com>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    5466b456
file.c 6.3 KB