This revision was automatically updated to reflect the committed changes.
Closed by commit rS295792: hyperv/hn: Add option to bind TX taskqueues to the 
specified CPU (authored by sephe).

CHANGED PRIOR TO COMMIT
  https://reviews.freebsd.org/D5316?vs=13407&id=13480#toc

REPOSITORY
  rS FreeBSD src repository

CHANGES SINCE LAST UPDATE
  https://reviews.freebsd.org/D5316?vs=13407&id=13480

REVISION DETAIL
  https://reviews.freebsd.org/D5316

AFFECTED FILES
  head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c

CHANGE DETAILS
  diff --git a/head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c 
b/head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
  --- a/head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
  +++ b/head/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, delphij, royger, decui_microsoft.com, 
honzhan_microsoft.com, howard0su_gmail.com, adrian, network
Cc: freebsd-virtualization-list, freebsd-net-list
diff --git a/head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c b/head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
--- a/head/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c
+++ b/head/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);

_______________________________________________
freebsd-virtualization@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-virtualization
To unsubscribe, send any mail to 
"freebsd-virtualization-unsubscr...@freebsd.org"

Reply via email to