svn commit: r301491 - head/sys/dev/sfxge

Andrew Rybchenko arybchik at FreeBSD.org
Mon Jun 6 09:05:53 UTC 2016


Author: arybchik
Date: Mon Jun  6 09:05:52 2016
New Revision: 301491
URL: https://svnweb.freebsd.org/changeset/base/301491

Log:
  sfxge(4): restrict the maximum number of RSS channels by the number of RSS buckets
  
  This is done because one has no point to have more channels since they
  will be unused.
  
  Submitted by:   Ivan Malov <Ivan.Malov at oktetlabs.ru>
  Reviewed by:    gnn
  Sponsored by:   Solarflare Communications, Inc.
  Differential Revision:  https://reviews.freebsd.org/D6720

Modified:
  head/sys/dev/sfxge/sfxge.c

Modified: head/sys/dev/sfxge/sfxge.c
==============================================================================
--- head/sys/dev/sfxge/sfxge.c	Mon Jun  6 09:05:06 2016	(r301490)
+++ head/sys/dev/sfxge/sfxge.c	Mon Jun  6 09:05:52 2016	(r301491)
@@ -34,6 +34,8 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#include "opt_rss.h"
+
 #include <sys/param.h>
 #include <sys/kernel.h>
 #include <sys/bus.h>
@@ -58,6 +60,10 @@ __FBSDID("$FreeBSD$");
 #include <net/if_media.h>
 #include <net/if_types.h>
 
+#ifdef RSS
+#include <net/rss_config.h>
+#endif
+
 #include "common/efx.h"
 
 #include "sfxge.h"
@@ -127,7 +133,15 @@ sfxge_estimate_rsrc_limits(struct sfxge_
 	 *  - hardwire maximum RSS channels
 	 *  - administratively specified maximum RSS channels
 	 */
+#ifdef RSS
+	/*
+	 * Avoid extra limitations so that the number of queues
+	 * may be configured at administrator's will
+	 */
+	evq_max = MIN(MAX(rss_getnumbuckets(), 1), EFX_MAXRSS);
+#else
 	evq_max = MIN(mp_ncpus, EFX_MAXRSS);
+#endif
 	if (sc->max_rss_channels > 0)
 		evq_max = MIN(evq_max, sc->max_rss_channels);
 
@@ -163,6 +177,14 @@ sfxge_estimate_rsrc_limits(struct sfxge_
 	KASSERT(sc->evq_max <= evq_max,
 		("allocated more than maximum requested"));
 
+#ifdef RSS
+	if (sc->evq_max < rss_getnumbuckets())
+		device_printf(sc->dev, "The number of allocated queues (%u) "
+			      "is less than the number of RSS buckets (%u); "
+			      "performance degradation might be observed",
+			      sc->evq_max, rss_getnumbuckets());
+#endif
+
 	/*
 	 * NIC is kept initialized in the case of success to be able to
 	 * initialize port to find out media types.


More information about the svn-src-all mailing list