diff --git a/src/util-affinity.c b/src/util-affinity.c index bf75d794e9..9a30f31f5b 100644 --- a/src/util-affinity.c +++ b/src/util-affinity.c @@ -124,7 +124,7 @@ static void build_cpuset(ConfNode *node, cpu_set_t *cpu) int stop = 0; if (!strcmp(lnode->val, "all")) { a = 0; - b = UtilCpuGetNumProcessorsConfigured(); + b = UtilCpuGetNumProcessorsOnline() - 1; stop = 1; } else if (index(lnode->val, '-') != NULL) { char *sep = index(lnode->val, '-'); @@ -188,6 +188,7 @@ void AffinitySetupLoadFromConfig() TAILQ_FOREACH(affinity, &root->head, next) { ThreadsAffinityType *taf = GetAffinityTypeFromName(affinity->val); ConfNode *node = NULL; + ConfNode *nprio = NULL; if (taf == NULL) { SCLogError(SC_ERR_INVALID_ARGUMENT, "unknown cpu_affinity type"); @@ -206,29 +207,45 @@ void AffinitySetupLoadFromConfig() } CPU_ZERO(&taf->lowprio_cpu); - node = ConfNodeLookupChild(affinity->head.tqh_first, "low_prio"); - if (node == NULL) { - SCLogDebug("unable to find 'low_prio' using default value"); - } else { - build_cpuset(node, &taf->lowprio_cpu); - } - CPU_ZERO(&taf->medprio_cpu); - node = ConfNodeLookupChild(affinity->head.tqh_first, "medium_prio"); - if (node == NULL) { - SCLogDebug("unable to find 'medium_prio' using default value"); - } else { - build_cpuset(node, &taf->medprio_cpu); - } - CPU_ZERO(&taf->hiprio_cpu); - node = ConfNodeLookupChild(affinity->head.tqh_first, "high_prio"); - if (node == NULL) { - SCLogDebug("unable to find 'high_prio' using default value"); - } else { - build_cpuset(node, &taf->hiprio_cpu); - } + nprio = ConfNodeLookupChild(affinity->head.tqh_first, "prio"); + if (nprio != NULL) { + node = ConfNodeLookupChild(nprio, "low"); + if (node == NULL) { + SCLogDebug("unable to find 'low' prio using default value"); + } else { + build_cpuset(node, &taf->lowprio_cpu); + } + node = ConfNodeLookupChild(nprio, "medium"); + if (node == NULL) { + SCLogDebug("unable to find 'medium' prio using default value"); + } else { + build_cpuset(node, &taf->medprio_cpu); + } + + node = ConfNodeLookupChild(nprio, "high"); + if (node == NULL) { + SCLogDebug("unable to find 'high' prio using default value"); + } else { + build_cpuset(node, &taf->hiprio_cpu); + } + node = ConfNodeLookupChild(nprio, "default"); + if (node != NULL) { + if (!strcmp(node->val, "low")) { + taf->prio = PRIO_LOW; + } else if (!strcmp(node->val, "medium")) { + taf->prio = PRIO_MEDIUM; + } else if (!strcmp(node->val, "high")) { + taf->prio = PRIO_HIGH; + } else { + SCLogError(SC_ERR_INVALID_ARGUMENT, "unknown cpu_affinity prio"); + exit(EXIT_FAILURE); + } + SCLogInfo("Using default prio '%s'", node->val); + } + } node = ConfNodeLookupChild(affinity->head.tqh_first, "mode"); if (node != NULL) { @@ -242,20 +259,6 @@ void AffinitySetupLoadFromConfig() } } - node = ConfNodeLookupChild(affinity->head.tqh_first, "prio"); - if (node != NULL) { - if (!strcmp(node->val, "low")) { - taf->prio = PRIO_LOW; - } else if (!strcmp(node->val, "medium")) { - taf->prio = PRIO_MEDIUM; - } else if (!strcmp(node->val, "high")) { - taf->prio = PRIO_HIGH; - } else { - SCLogError(SC_ERR_INVALID_ARGUMENT, "unknown cpu_affinity prio"); - exit(EXIT_FAILURE); - } - } - node = ConfNodeLookupChild(affinity->head.tqh_first, "threads"); if (node != NULL) { taf->nb_threads = atoi(node->val); diff --git a/src/util-affinity.h b/src/util-affinity.h index 90c7eb2bd4..965450a940 100644 --- a/src/util-affinity.h +++ b/src/util-affinity.h @@ -47,7 +47,7 @@ typedef struct ThreadsAffinityType_ { char *name; cpu_set_t cpu_set; uint8_t mode_flag; - uint8_t prio; + int prio; int nb_threads; cpu_set_t lowprio_cpu; cpu_set_t medprio_cpu; diff --git a/suricata.yaml b/suricata.yaml index 3bf158bcdb..8df7e84598 100644 --- a/suricata.yaml +++ b/suricata.yaml @@ -188,19 +188,23 @@ threading: - detect_cpu_set: cpu: [ "all" ] mode: "exclusive" # run detect threads in these cpus - low_prio: [ 0 ] - medium_prio: [ "1-2" ] - high_prio: [ 3 ] - prio: "medium" + prio: + low: [ 0 ] + medium: [ "1-2" ] + high: [ 3 ] + default: "medium" - verdict_cpu_set: cpu: [ 0 ] - prio: "high" + prio: + default: "high" - reject_cpu_set: cpu: [ 0 ] - prio: "low" + prio: + default: "low" - output_cpu_set: cpu: [ "all" ] - prio: "medium" + prio: + default: "medium" # # By default Suricata creates one "detect" thread per available CPU/CPU core. # This setting allows controlling this behaviour. A ratio setting of 2 will