Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 17 Jun 2015 16:30:11 +0530
From:      Lakshmi Narasimhan Sundararajan <lakshmi.n@msystechnologies.com>
To:        freebsd-net@freebsd.org
Cc:        "Pokala, Ravi" <rpokala@panasas.com>, "Lewis, Fred" <flewis@panasas.com>,  "Kloss, Joe" <jkloss@panasas.com>, "Tallam, Sreen" <sreen@panasas.com>
Subject:   Reg Intel Fortville IXL driver on 11-CURRENT
Message-ID:  <CA%2BNkpghE=Y2aWJ3pJorR7%2BC75wVL=SMdiCx_ufmKRUx7_cvwHw@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hi FreeBSD folks,
I am part of Panasas and working on evaluating IXL over FreeBSD
[11-CURRENT] on Intel Taylor Pass platform for our next product.

In that regard, while evaluating performance, we found the Tx performance
to be very poor. We found it to be so because the tx interrupts are spread
over all the CPUs even if the traffic handling process is pinned at a
particular cpu.

And we narrowed it down to the below lines of code in the tx path within
the IXL driver. It seems to me that the logic for finding whether tx queue
is stalled might be incorrect or too aggressive. Either ways, removing the
below lines makes the tx interrupt being handled on the same cpu on which
the request was raised and the performance is very good as expected.

Filename: sys/dev/ixl/ixl_txrx.c

[lakshmis@mau-bsd-10a ~/fortville/hol/sys/dev/ixl]$ diff -c5pt ixl_txrx.c
ixl_txrx.c.mod
*** ixl_txrx.c Fri Jun 12 06:56:51 2015
--- ixl_txrx.c.mod Fri Jun 12 06:56:33 2015
*************** ixl_mq_start(struct ifnet *ifp, struct m
*** 96,112 ****
--- 96,115 ----
                  } else
  #endif
                          i = m->m_pkthdr.flowid % vsi->num_queues;
          } else
                  i = curcpu % vsi->num_queues;
+
+ #if 0
          /*
          ** This may not be perfect, but until something
          ** better comes along it will keep from scheduling
          ** on stalled queues.
          */
          if (((1 << i) & vsi->active_queues) == 0)
                  i = ffsl(vsi->active_queues);
+ #endif

          que = &vsi->queues[i];
          txr = &que->txr;

          err = drbr_enqueue(ifp, txr->br, m);
[lakshmis@mau-bsd-10a ~/fortville/hol/sys/dev/ixl]$


Would appreciate your feedback on the same.

Thanks,
LN



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CA%2BNkpghE=Y2aWJ3pJorR7%2BC75wVL=SMdiCx_ufmKRUx7_cvwHw>