Skip site navigation (1)Skip section navigation (2)
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>