net/pppoe: make number of hash bits configurable
When running large numbers of pppoe connections, a bucket size of 16 may be too small and 256 may be more appropriate. This sacrifices some RAM but should result in faster processing of incoming PPPoE frames. On our systems we run upwards of 150 PPPoE connections at any point in time, and we suspect we're starting to see the effects of this small number of buckets. The legal values according to pppoe.c is anything that when 8 is divided by that results in a modulo of 0, ie, 1, 2, 4 and 8. The size of the per-underlying-interface structure is: sizeof(rwlock_t) + sizeof(pppox_sock*) * PPPOE_HASH_SIZE. Assuming a 64-bit pointer this will result in just over a 2KiB structure for PPPOE_HASH_BITS=8, which will likely result in a 4KiB allocation, which for us at least is acceptable. Not sure what the minimum allocation size is, and thus if values of 1 and 2 truly make sense. Default results in historic sizing and behaviour. Signed-off-by: Jaco Kroon <jaco@uls.co.za> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c83ae452d2
commit
96ba44c637
@ -129,6 +129,40 @@ config PPPOE
|
||||
which contains instruction on how to use this driver (under
|
||||
the heading "Kernel mode PPPoE").
|
||||
|
||||
choice
|
||||
prompt "Number of PPPoE hash bits"
|
||||
default PPPOE_HASH_BITS_4
|
||||
depends on PPPOE
|
||||
help
|
||||
Select the number of bits used for hashing PPPoE interfaces.
|
||||
|
||||
Larger sizes reduces the risk of hash collisions at the cost
|
||||
of slightly increased memory usage.
|
||||
|
||||
This hash table is on a per outer ethernet interface.
|
||||
|
||||
config PPPOE_HASH_BITS_2
|
||||
bool "1 bit (2 buckets)"
|
||||
|
||||
config PPPOE_HASH_BITS_2
|
||||
bool "2 bits (4 buckets)"
|
||||
|
||||
config PPPOE_HASH_BITS_4
|
||||
bool "4 bits (16 buckets)"
|
||||
|
||||
config PPPOE_HASH_BITS_8
|
||||
bool "8 bits (256 buckets)"
|
||||
|
||||
endchoice
|
||||
|
||||
config PPPOE_HASH_BITS
|
||||
int
|
||||
default 1 if PPPOE_HASH_BITS_1
|
||||
default 2 if PPPOE_HASH_BITS_2
|
||||
default 4 if PPPOE_HASH_BITS_4
|
||||
default 8 if PPPOE_HASH_BITS_8
|
||||
default 4
|
||||
|
||||
config PPTP
|
||||
tristate "PPP over IPv4 (PPTP)"
|
||||
depends on PPP && NET_IPGRE_DEMUX
|
||||
|
@ -80,7 +80,7 @@
|
||||
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
#define PPPOE_HASH_BITS 4
|
||||
#define PPPOE_HASH_BITS CONFIG_PPPOE_HASH_BITS
|
||||
#define PPPOE_HASH_SIZE (1 << PPPOE_HASH_BITS)
|
||||
#define PPPOE_HASH_MASK (PPPOE_HASH_SIZE - 1)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user