summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorharti <harti@FreeBSD.org>2003-03-02 18:04:10 +0000
committerharti <harti@FreeBSD.org>2003-03-02 18:04:10 +0000
commit5b5b5483d30b41be53c35c658c1bb78213f93922 (patch)
tree11e68af8d51a4337fabe102930a2eba1ba2ea3d1
parent2756b6c9641bd9899a346582c191310de25cccc5 (diff)
downloadFreeBSD-src-5b5b5483d30b41be53c35c658c1bb78213f93922.zip
FreeBSD-src-5b5b5483d30b41be53c35c658c1bb78213f93922.tar.gz
Add two loader tuneables that allow one to change the maximum number of
queue items that can be allocated by netgraph and the number of free queue items that are cached on a private list. Netgraph places an upper limit on the number of queue items it may allocate. When there is a large number of netgraph messages travelling through the system (100k/sec and more) there is a high probability, that messages get queued at the nodes and netgraph runs out of queue items. In this case the data flow through netgraph gets blocked. The tuneable for the number of free items lets one trade memory for performance. The tunables are also available as read-only sysctls. PR: kern/47393 Reviewed by: julian Approved by: jake (mentor)
-rw-r--r--sys/boot/forth/loader.conf2
-rw-r--r--sys/netgraph/ng_base.c12
2 files changed, 13 insertions, 1 deletions
diff --git a/sys/boot/forth/loader.conf b/sys/boot/forth/loader.conf
index 06a76f6..73e42eb 100644
--- a/sys/boot/forth/loader.conf
+++ b/sys/boot/forth/loader.conf
@@ -102,6 +102,8 @@ module_path="/boot/kernel;/boot/modules;/modules" # Set the module search path
#debug.ktr.cpumask="0xf" # Bitmask of CPUs to enable KTR on
#debug.ktr.mask="0x1200" # Bitmask of KTR events to enable
#debug.ktr.verbose="1" # Enable console dump of KTR events
+#net.graph.maxalloc="128" # Maximum number of queue items to allocate
+#net.graph.ngqfreemax="64" # Maximum number of free queue items to cache
##############################################################
diff --git a/sys/netgraph/ng_base.c b/sys/netgraph/ng_base.c
index eb5a8eb..4c8dde3 100644
--- a/sys/netgraph/ng_base.c
+++ b/sys/netgraph/ng_base.c
@@ -3017,8 +3017,18 @@ SYSCTL_INT(_net_graph, OID_AUTO, msg_version, CTLFLAG_RD, 0, NG_VERSION, "");
static int allocated; /* number of items malloc'd */
+
static int maxalloc = 128; /* limit the damage of a leak */
-static const int ngqfreemax = 64;/* cache at most this many */
+static int ngqfreemax = 64;/* cache at most this many */
+
+TUNABLE_INT("net.graph.maxalloc", &maxalloc);
+SYSCTL_INT(_net_graph, OID_AUTO, maxalloc, CTLFLAG_RD, &maxalloc,
+ 0, "Maximum number of queue items to allocate");
+
+TUNABLE_INT("net.graph.ngqfreemax", &ngqfreemax);
+SYSCTL_INT(_net_graph, OID_AUTO, ngqfreemax, CTLFLAG_RD, &ngqfreemax,
+ 0, "Maximum number of free queue items to cache");
+
static const int ngqfreelow = 4; /* try malloc if free < this */
static volatile int ngqfreesize; /* number of cached entries */
#ifdef NETGRAPH_DEBUG
OpenPOWER on IntegriCloud