netmap: add a tunable for the maximum number of VALE switches
The new dev.netmap.max_bridges sysctl tunable can be set in loader.conf(5) to change the default maximum number of VALE switches that can be created. Current defaults is 8. MFC after: 2 weeks
This commit is contained in:
parent
09a1893398
commit
dd6ab49a9a
|
@ -27,7 +27,7 @@
|
||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd October 3, 2020
|
.Dd March 6, 2022
|
||||||
.Dt NETMAP 4
|
.Dt NETMAP 4
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -933,6 +933,11 @@ Batch size used when moving packets across a
|
||||||
switch.
|
switch.
|
||||||
Values above 64 generally guarantee good
|
Values above 64 generally guarantee good
|
||||||
performance.
|
performance.
|
||||||
|
.It Va dev.netmap.max_bridges: 8
|
||||||
|
Max number of
|
||||||
|
.Nm VALE
|
||||||
|
switches that can be created. This tunable can be specified
|
||||||
|
at loader time.
|
||||||
.It Va dev.netmap.ptnet_vnet_hdr: 1
|
.It Va dev.netmap.ptnet_vnet_hdr: 1
|
||||||
Allow ptnet devices to use virtio-net headers
|
Allow ptnet devices to use virtio-net headers
|
||||||
.El
|
.El
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\" $Id: $
|
.\" $Id: $
|
||||||
.\"
|
.\"
|
||||||
.Dd February 6, 2020
|
.Dd March 6, 2022
|
||||||
.Dt VALE 4
|
.Dt VALE 4
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
@ -77,7 +77,8 @@ See
|
||||||
for details on the API.
|
for details on the API.
|
||||||
.Ss LIMITS
|
.Ss LIMITS
|
||||||
.Nm
|
.Nm
|
||||||
currently supports up to 8 switches, with 254 ports per switch.
|
currently supports up to 254 ports per switch. The maximum
|
||||||
|
number of switches is provided by the max_bridges sysctl variable.
|
||||||
.Sh SYSCTL VARIABLES
|
.Sh SYSCTL VARIABLES
|
||||||
See
|
See
|
||||||
.Xr netmap 4
|
.Xr netmap 4
|
||||||
|
|
|
@ -1828,7 +1828,7 @@ netmap_init_bridges(void)
|
||||||
#ifdef CONFIG_NET_NS
|
#ifdef CONFIG_NET_NS
|
||||||
return netmap_bns_register();
|
return netmap_bns_register();
|
||||||
#else
|
#else
|
||||||
nm_bridges = netmap_init_bridges2(NM_BRIDGES);
|
nm_bridges = netmap_init_bridges2(vale_max_bridges);
|
||||||
if (nm_bridges == NULL)
|
if (nm_bridges == NULL)
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1841,6 +1841,6 @@ netmap_uninit_bridges(void)
|
||||||
#ifdef CONFIG_NET_NS
|
#ifdef CONFIG_NET_NS
|
||||||
netmap_bns_unregister();
|
netmap_bns_unregister();
|
||||||
#else
|
#else
|
||||||
netmap_uninit_bridges2(nm_bridges, NM_BRIDGES);
|
netmap_uninit_bridges2(nm_bridges, vale_max_bridges);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -1559,6 +1559,8 @@ int netmap_get_vale_na(struct nmreq_header *hdr, struct netmap_adapter **na,
|
||||||
void *netmap_vale_create(const char *bdg_name, int *return_status);
|
void *netmap_vale_create(const char *bdg_name, int *return_status);
|
||||||
int netmap_vale_destroy(const char *bdg_name, void *auth_token);
|
int netmap_vale_destroy(const char *bdg_name, void *auth_token);
|
||||||
|
|
||||||
|
extern unsigned int vale_max_bridges;
|
||||||
|
|
||||||
#else /* !WITH_VALE */
|
#else /* !WITH_VALE */
|
||||||
#define netmap_bdg_learning(_1, _2, _3, _4) 0
|
#define netmap_bdg_learning(_1, _2, _3, _4) 0
|
||||||
#define netmap_get_vale_na(_1, _2, _3, _4) 0
|
#define netmap_get_vale_na(_1, _2, _3, _4) 0
|
||||||
|
@ -1606,7 +1608,7 @@ extern struct nm_bridge *nm_bridges;
|
||||||
#define netmap_bns_get()
|
#define netmap_bns_get()
|
||||||
#define netmap_bns_put(_1)
|
#define netmap_bns_put(_1)
|
||||||
#define netmap_bns_getbridges(b, n) \
|
#define netmap_bns_getbridges(b, n) \
|
||||||
do { *b = nm_bridges; *n = NM_BRIDGES; } while (0)
|
do { *b = nm_bridges; *n = vale_max_bridges; } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Various prototypes */
|
/* Various prototypes */
|
||||||
|
|
|
@ -84,10 +84,9 @@ __FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* system parameters (most of them in netmap_kern.h)
|
* system parameters (most of them in netmap_kern.h)
|
||||||
* NM_BDG_NAME prefix for switch port names, default "vale"
|
* NM_BDG_NAME prefix for switch port names, default "vale"
|
||||||
* NM_BDG_MAXPORTS number of ports
|
* NM_BDG_MAXPORTS number of ports
|
||||||
* NM_BRIDGES max number of switches in the system.
|
* NM_BRIDGES max number of switches in the system.
|
||||||
* XXX should become a sysctl or tunable
|
|
||||||
*
|
*
|
||||||
* Switch ports are named valeX:Y where X is the switch name and Y
|
* Switch ports are named valeX:Y where X is the switch name and Y
|
||||||
* is the port. If Y matches a physical interface name, the port is
|
* is the port. If Y matches a physical interface name, the port is
|
||||||
|
@ -115,10 +114,16 @@ __FBSDID("$FreeBSD$");
|
||||||
* last packet in the block may overflow the size.
|
* last packet in the block may overflow the size.
|
||||||
*/
|
*/
|
||||||
static int bridge_batch = NM_BDG_BATCH; /* bridge batch size */
|
static int bridge_batch = NM_BDG_BATCH; /* bridge batch size */
|
||||||
|
|
||||||
|
/* Max number of vale bridges (loader tunable). */
|
||||||
|
unsigned int vale_max_bridges = NM_BRIDGES;
|
||||||
|
|
||||||
SYSBEGIN(vars_vale);
|
SYSBEGIN(vars_vale);
|
||||||
SYSCTL_DECL(_dev_netmap);
|
SYSCTL_DECL(_dev_netmap);
|
||||||
SYSCTL_INT(_dev_netmap, OID_AUTO, bridge_batch, CTLFLAG_RW, &bridge_batch, 0,
|
SYSCTL_INT(_dev_netmap, OID_AUTO, bridge_batch, CTLFLAG_RW, &bridge_batch, 0,
|
||||||
"Max batch size to be used in the bridge");
|
"Max batch size to be used in the bridge");
|
||||||
|
SYSCTL_UINT(_dev_netmap, OID_AUTO, max_bridges, CTLFLAG_RDTUN, &vale_max_bridges, 0,
|
||||||
|
"Max number of vale bridges");
|
||||||
SYSEND;
|
SYSEND;
|
||||||
|
|
||||||
static int netmap_vale_vp_create(struct nmreq_header *hdr, struct ifnet *,
|
static int netmap_vale_vp_create(struct nmreq_header *hdr, struct ifnet *,
|
||||||
|
@ -366,7 +371,7 @@ netmap_vale_list(struct nmreq_header *hdr)
|
||||||
j = req->nr_port_idx;
|
j = req->nr_port_idx;
|
||||||
|
|
||||||
NMG_LOCK();
|
NMG_LOCK();
|
||||||
for (error = ENOENT; i < NM_BRIDGES; i++) {
|
for (error = ENOENT; i < vale_max_bridges; i++) {
|
||||||
b = bridges + i;
|
b = bridges + i;
|
||||||
for ( ; j < NM_BDG_MAXPORTS; j++) {
|
for ( ; j < NM_BDG_MAXPORTS; j++) {
|
||||||
if (b->bdg_ports[j] == NULL)
|
if (b->bdg_ports[j] == NULL)
|
||||||
|
|
Loading…
Reference in New Issue