af_packet: Avoid cache line dirtying
While doing multiple captures, I found af_packet was dirtying cache line containing its prot_hook. This slow down machines where several cpus are necessary to handle capture traffic, as each prot_hook is traversed for each packet coming in or out the host. This patches moves "struct packet_type prot_hook" to the end of packet_sock, and uses a ____cacheline_aligned_in_smp to make sure this remains shared by all cpus. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
7b6856a029
Коммит
94b059520d
|
@ -188,7 +188,6 @@ struct packet_sock {
|
|||
struct packet_ring_buffer tx_ring;
|
||||
int copy_thresh;
|
||||
#endif
|
||||
struct packet_type prot_hook;
|
||||
spinlock_t bind_lock;
|
||||
struct mutex pg_vec_lock;
|
||||
unsigned int running:1, /* prot_hook is attached*/
|
||||
|
@ -204,6 +203,7 @@ struct packet_sock {
|
|||
unsigned int tp_reserve;
|
||||
unsigned int tp_loss:1;
|
||||
#endif
|
||||
struct packet_type prot_hook ____cacheline_aligned_in_smp;
|
||||
};
|
||||
|
||||
struct packet_skb_cb {
|
||||
|
|
Загрузка…
Ссылка в новой задаче