net: convert gro_count to bitmask
gro_hash size is 192 bytes, and uses 3 cache lines, if there is few flows, gro_hash may be not fully used, so it is unnecessary to iterate all gro_hash in napi_gro_flush(), to occupy unnecessary cacheline. convert gro_count to a bitmask, and rename it as gro_bitmask, each bit represents a element of gro_hash, only flush a gro_hash element if the related bit is set, to speed up napi_gro_flush(). and update gro_bitmask only if it will be changed, to reduce cache update Suggested-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Li RongQing <lirongqing@baidu.com> Cc: Stefano Brivio <sbrivio@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
48559af345
commit
d9f37d01e2
@@ -308,9 +308,14 @@ struct gro_list {
|
||||
};
|
||||
|
||||
/*
|
||||
* Structure for NAPI scheduling similar to tasklet but with weighting
|
||||
* size of gro hash buckets, must less than bit number of
|
||||
* napi_struct::gro_bitmask
|
||||
*/
|
||||
#define GRO_HASH_BUCKETS 8
|
||||
|
||||
/*
|
||||
* Structure for NAPI scheduling similar to tasklet but with weighting
|
||||
*/
|
||||
struct napi_struct {
|
||||
/* The poll_list must only be managed by the entity which
|
||||
* changes the state of the NAPI_STATE_SCHED bit. This means
|
||||
@@ -322,7 +327,7 @@ struct napi_struct {
|
||||
|
||||
unsigned long state;
|
||||
int weight;
|
||||
unsigned int gro_count;
|
||||
unsigned long gro_bitmask;
|
||||
int (*poll)(struct napi_struct *, int);
|
||||
#ifdef CONFIG_NETPOLL
|
||||
int poll_owner;
|
||||
|
Reference in New Issue
Block a user