Skip to contentSkip to conversation

af_packet: Avoid cache line dirtying

PATCH Applied Eric Dumazet 2 participants 2 messages Oct 16, 2009 – Oct 20, 2009

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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.

---

net/packet/af_packet.c +1 -1
index bf3a295..dac775e 100644
@@ -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 {
maintainer Applied
#1 lore raw

From: Eric Dumazet <[email protected]>
Date: Fri, 16 Oct 2009 16:02:20 +0200

Quoted 7 lines

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.

Quoted 5 lines

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.

Applied.