• E
    sysctl: Index sysctl directories with rbtrees. · ac13ac6f
    Eric W. Biederman 提交于
    One of the most important jobs of sysctl is to export network stack
    tunables.  Several of those tunables are per network device.  In
    several instances people are running with 1000+ network devices in
    there network stacks, which makes the simple per directory linked list
    in sysctl a scaling bottleneck.   Replace O(N^2) sysctl insertion and
    lookup times with O(NlogN) by using an rbtree to index the sysctl
    directories.
    
    Benchmark before:
        make-dummies 0 999 -> 0.32s
        rmmod dummy        -> 0.12s
        make-dummies 0 9999 -> 1m17s
        rmmod dummy         -> 17s
    
    Benchmark after:
        make-dummies 0 999 -> 0.074s
        rmmod dummy        -> 0.070s
        make-dummies 0 9999 -> 3.4s
        rmmod dummy         -> 0.44s
    
    Benchmark after (without dev_snmp6):
        make-dummies 0 9999 -> 0.75s
        rmmod dummy         -> 0.44s
        make-dummies 0 99999 -> 11s
        rmmod dummy          -> 4.3s
    
    At 10,000 dummy devices the bottleneck becomes the time to add and
    remove the files under /proc/sys/net/dev_snmp6.  I have commented
    out the code that adds and removes files under /proc/sys/net/dev_snmp6
    and taken measurments of creating and destroying 100,000 dummies to
    verify the sysctl continues to scale.
    Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
    ac13ac6f
sysctl.h 31.1 KB