diff options
author | nickcooper-zhangtonghao <nic@opencloud.tech> | 2017-01-09 21:56:14 -0800 |
---|---|---|
committer | Daniele Di Proietto <diproiettod@vmware.com> | 2017-01-10 18:53:34 -0800 |
commit | bf9f6f80c017d31e8cfae89b575ec87c7187909d (patch) | |
tree | 9fbb3c826cdab2345771b78edd450b4defa37a29 /lib/netdev-dummy.c | |
parent | ec2b070143c2ad54565c2130fcf4cfe9ad03018f (diff) | |
download | openvswitch-bf9f6f80c017d31e8cfae89b575ec87c7187909d.tar.gz |
netdev-dummy: Limits the number of tx/rx queues.
This patch avoids the ovs_rcu to report WARN, caused by blocked
for a long time, when ovs-vswitchd processes a port with many
rx/tx queues. The number of tx/rx queues per port may be appropriate,
because the dpdk uses it as an default max value.
Signed-off-by: nickcooper-zhangtonghao <nic@opencloud.tech>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
Diffstat (limited to 'lib/netdev-dummy.c')
-rw-r--r-- | lib/netdev-dummy.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/netdev-dummy.c b/lib/netdev-dummy.c index bdb77e131..2f9365e15 100644 --- a/lib/netdev-dummy.c +++ b/lib/netdev-dummy.c @@ -827,6 +827,8 @@ netdev_dummy_set_in6(struct netdev *netdev_, struct in6_addr *in6, return 0; } +#define DUMMY_MAX_QUEUES_PER_PORT 1024 + static int netdev_dummy_set_config(struct netdev *netdev_, const struct smap *args) { @@ -870,6 +872,21 @@ netdev_dummy_set_config(struct netdev *netdev_, const struct smap *args) new_n_rxq = MAX(smap_get_int(args, "n_rxq", NR_QUEUE), 1); new_n_txq = MAX(smap_get_int(args, "n_txq", NR_QUEUE), 1); + + if (new_n_rxq > DUMMY_MAX_QUEUES_PER_PORT || + new_n_txq > DUMMY_MAX_QUEUES_PER_PORT) { + VLOG_WARN("The one or both of interface %s queues" + "(rxq: %d, txq: %d) exceed %d. Sets it %d.\n", + netdev_get_name(netdev_), + new_n_rxq, + new_n_txq, + DUMMY_MAX_QUEUES_PER_PORT, + DUMMY_MAX_QUEUES_PER_PORT); + + new_n_rxq = MIN(DUMMY_MAX_QUEUES_PER_PORT, new_n_rxq); + new_n_txq = MIN(DUMMY_MAX_QUEUES_PER_PORT, new_n_txq); + } + new_numa_id = smap_get_int(args, "numa_id", 0); if (new_n_rxq != netdev->requested_n_rxq || new_n_txq != netdev->requested_n_txq |