Date: Sat, 13 Oct 2012 21:49:21 +0400 From: "Alexander V. Chernikov" <melifaro@FreeBSD.org> To: net@freebsd.org Cc: Jack Vogel <jfvogel@gmail.com> Subject: ixgbe & if_igb RX ring locking Message-ID: <5079A9A1.4070403@FreeBSD.org>
next in thread | raw e-mail | index | archive | help
Hello list! Packets receiving code for both ixgbe and if_igb looks like the following: ixgbe_msix_que -- ixgbe_rxeof() { IXGBE_RX_LOCK(rxr); while { get_packet; -- ixgbe_rx_input() { ++ IXGBE_RX_UNLOCK(rxr); if_input(packet); ++ IXGBE_RX_LOCK(rxr); } } IXGBE_RX_UNLOCK(rxr); } Lines marked with ++ appeared in r209068(igb) and r217593(ixgbe). These lines probably do LORs masking (if any) well. However, such change introduce quite significant performance drop: On my routing setup (nearly the same from previous -Intel 10G thread in -net) adding lock/unlock causes 2.8MPPS decrease to 2.3MPPS which is nearly 20%. So my questions are: Can any real LORs happen in some complex setup? (I can't imagine any). If so: maybe we can somehow avoid/workaround such cases? (and consider removing those locks). -- WBR, Alexander
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5079A9A1.4070403>