[Differential] [Request, 33 lines] D5316: hyperv/hn: Add option to bind TX taskqueues to the specified CPU
sepherosa_gmail.com (Sepherosa Ziehau)
phabric-noreply at FreeBSD.org
Thu Feb 18 08:08:13 UTC 2016
sepherosa_gmail.com created this revision.
sepherosa_gmail.com added reviewers: network, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com.
sepherosa_gmail.com added subscribers: freebsd-net-list, freebsd-virtualization-list.
REVISION DETAIL
https://reviews.freebsd.org/D5316
AFFECTED FILES
sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
CHANGE DETAILS
diff --git a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
--- a/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
+++ b/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
@@ -269,6 +269,10 @@
SYSCTL_INT(_hw_hn, OID_AUTO, use_txdesc_bufring, CTLFLAG_RD,
&hn_use_txdesc_bufring, 0, "Use buf_ring for TX descriptors");
+static int hn_bind_tx_taskq = -1;
+SYSCTL_INT(_hw_hn, OID_AUTO, bind_tx_taskq, CTLFLAG_RDTUN,
+ &hn_bind_tx_taskq, 0, "Bind TX taskqueue to the specified cpu");
+
/*
* Forward declarations
*/
@@ -383,8 +387,20 @@
if (hn_tx_taskq == NULL) {
sc->hn_tx_taskq = taskqueue_create("hn_tx", M_WAITOK,
taskqueue_thread_enqueue, &sc->hn_tx_taskq);
- taskqueue_start_threads(&sc->hn_tx_taskq, 1, PI_NET, "%s tx",
- device_get_nameunit(dev));
+ if (hn_bind_tx_taskq >= 0) {
+ int cpu = hn_bind_tx_taskq;
+ cpuset_t cpu_set;
+
+ if (cpu > mp_ncpus - 1)
+ cpu = mp_ncpus - 1;
+ CPU_SETOF(cpu, &cpu_set);
+ taskqueue_start_threads_cpuset(&sc->hn_tx_taskq, 1,
+ PI_NET, &cpu_set, "%s tx",
+ device_get_nameunit(dev));
+ } else {
+ taskqueue_start_threads(&sc->hn_tx_taskq, 1, PI_NET,
+ "%s tx", device_get_nameunit(dev));
+ }
} else {
sc->hn_tx_taskq = hn_tx_taskq;
}
@@ -2409,7 +2425,18 @@
hn_tx_taskq = taskqueue_create("hn_tx", M_WAITOK,
taskqueue_thread_enqueue, &hn_tx_taskq);
- taskqueue_start_threads(&hn_tx_taskq, 1, PI_NET, "hn tx");
+ if (hn_bind_tx_taskq >= 0) {
+ int cpu = hn_bind_tx_taskq;
+ cpuset_t cpu_set;
+
+ if (cpu > mp_ncpus - 1)
+ cpu = mp_ncpus - 1;
+ CPU_SETOF(cpu, &cpu_set);
+ taskqueue_start_threads_cpuset(&hn_tx_taskq, 1, PI_NET,
+ &cpu_set, "hn tx");
+ } else {
+ taskqueue_start_threads(&hn_tx_taskq, 1, PI_NET, "hn tx");
+ }
}
SYSINIT(hn_txtq_create, SI_SUB_DRIVERS, SI_ORDER_FIRST,
hn_tx_taskq_create, NULL);
EMAIL PREFERENCES
https://reviews.freebsd.org/settings/panel/emailpreferences/
To: sepherosa_gmail.com, network, adrian, delphij, royger, decui_microsoft.com, honzhan_microsoft.com, howard0su_gmail.com
Cc: freebsd-virtualization-list, freebsd-net-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D5316.13407.patch
Type: text/x-patch
Size: 1893 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/freebsd-net/attachments/20160218/53d8cc03/attachment.bin>
More information about the freebsd-net
mailing list