On 14/12/15 17:35, Traynor, Kevin wrote:
How about letting the control threads just float on the non-isolcpu'd cores.
We could then potentially remove the -c argument which would simplify
setup as the user would only need to think about one mask - pmd-cpu-mask
(which of course we could also default).
Strawman for it would be something like this...
Seems good, assuming that the thread affinity at the time dpdk_init()
was called reflects what cores are allowed for non-PMD threads. And what
if the user wants to change that later?
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index e3a0771..031f405 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -2135,12 +2135,15 @@ process_vhost_flags(char *flag, char *default_val, int
size,
int
dpdk_init(int argc, char **argv)
{
int result;
int base = 0;
char *pragram_name = argv[0];
+ int err;
+ int isset;
+ cpu_set_t cpuset;
if (argc < 2 || strcmp(argv[1], "--dpdk"))
return 0;
/* Remove the --dpdk argument from arg list.*/
argc--;
@@ -2176,23 +2179,51 @@ dpdk_init(int argc, char **argv)
*/
argc -= 2;
argv += 2; /* Increment by two to bypass the vhost flag arguments
*/
base = 2;
}
+ /*NOTE: Assumes -c option removed from cmdline/db etc. */
+
+ /* Get the main thread affinity */
+ CPU_ZERO(&cpuset);
+ err = pthread_getaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
+ if (err) {
+ VLOG_ERR("Thread getaffinity error %d",err);
+ return err;
+ }
+
+ /* Extract lowest core affinity and set the -c */
+ for (i = 0; i < CPU_SETSIZE; i++) {
+ isset = CPU_ISSET(i, &cpuset);
+ if (isset) {
+ /* TODO: check for any numa inconsistencies with memory and
embedded -c
+ * option in argv for rte_eal_init() */
+ break;
+ }
+ }
+
/* Keep the program name argument as this is needed for call to
* rte_eal_init()
*/
argv[0] = pragram_name;
/* Make sure things are initialized ... */
result = rte_eal_init(argc, argv);
if (result < 0) {
ovs_abort(result, "Cannot init EAL");
}
+ /* Set the main thread affinity back to pre rte_eal_init() value */
+ err = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
+ if (err) {
+ VLOG_ERR("Thread setaffinity error %d",err);
+ return err;
+ }
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev