upgrade to v1.8.0

This commit is contained in:
SuperSix173 2021-04-17 17:14:17 +08:00 committed by Liu Chao
parent c65a85a98c
commit 86bf46daa9
12 changed files with 23 additions and 768 deletions

View File

@ -1,115 +0,0 @@
From ef9bf64affbca0b030f9128d93f302296d166dac Mon Sep 17 00:00:00 2001
From: hejingxian 00273181 <hejingxian@huawei.com>
Date: Mon, 4 Jan 2021 12:34:02 +0800
Subject: [PATCH] Add hot pull method for irqbalance
Conflict:NA
Reference:https://github.com/Irqbalance/irqbalance/commit/ef9bf64affbca0b030f9128d93f302296d166dac
---
classify.c | 37 +++++++++++++++++++++++++++++++++++++
irqbalance.h | 1 +
procinterrupts.c | 4 +++-
types.h | 1 +
4 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/classify.c b/classify.c
index 4b6ffa8..beb2919 100644
--- a/classify.c
+++ b/classify.c
@@ -852,3 +852,39 @@ void sort_irq_list(GList **list)
{
*list = g_list_sort(*list, sort_irqs);
}
+
+static void remove_no_existing_irq(struct irq_info *info, void *data __attribute__((unused)))
+{
+ GList *entry = NULL;
+
+ if (info->existing) {
+ /* clear existing flag for next detection */
+ info->existing = 0;
+ return;
+ }
+
+ entry = g_list_find_custom(interrupts_db, info, compare_ints);
+ if (entry)
+ interrupts_db = g_list_delete_link(interrupts_db, entry);
+
+ entry = g_list_find_custom(rebalance_irq_list, info, compare_ints);
+ if (entry)
+ rebalance_irq_list = g_list_delete_link(rebalance_irq_list, entry);
+
+ if(info->assigned_obj) {
+ entry = g_list_find_custom(info->assigned_obj->interrupts, info, compare_ints);
+ if (entry) {
+ info->assigned_obj->interrupts = g_list_delete_link(info->assigned_obj->interrupts, entry);
+ }
+ }
+ log(TO_CONSOLE, LOG_INFO, "IRQ %d is removed from interrupts_db.\n", info->irq);
+ free_irq(info, NULL);
+}
+
+void clear_no_existing_irqs(void)
+{
+ for_each_irq(NULL, remove_no_existing_irq, NULL);
+ if (banned_irqs) {
+ for_each_irq(banned_irqs, remove_no_existing_irq, NULL);
+ }
+}
+
diff --git a/irqbalance.h b/irqbalance.h
index d8e80a9..e7f6b94 100644
--- a/irqbalance.h
+++ b/irqbalance.h
@@ -42,6 +42,7 @@ extern void set_interrupt_count(int number, uint64_t count);
extern void set_msi_interrupt_numa(int number);
extern void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq);
extern int proc_irq_hotplug(char *line, int irq, struct irq_info **pinfo);
+extern void clear_no_existing_irqs(void);
extern GList *rebalance_irq_list;
extern void force_rebalance_irq(struct irq_info *info, void *data __attribute__((unused)));
diff --git a/procinterrupts.c b/procinterrupts.c
index 0671be0..854282f 100644
--- a/procinterrupts.c
+++ b/procinterrupts.c
@@ -248,7 +248,6 @@ GList* collect_full_irq_list()
return tmp_list;
}
-
void parse_proc_interrupts(void)
{
FILE *file;
@@ -310,6 +309,7 @@ void parse_proc_interrupts(void)
break;
}
}
+ info->existing = 1;
free(savedline);
count = 0;
@@ -354,6 +354,8 @@ void parse_proc_interrupts(void)
*/
msi_found_in_sysfs = 1;
}
+ if (!need_rescan)
+ clear_no_existing_irqs();
fclose(file);
free(line);
}
diff --git a/types.h b/types.h
index a01d649..9693cf4 100644
--- a/types.h
+++ b/types.h
@@ -70,6 +70,7 @@ struct irq_info {
uint64_t last_irq_count;
uint64_t load;
int moved;
+ int existing;
struct topo_obj *assigned_obj;
char *name;
};
--
2.23.0

View File

@ -1,43 +0,0 @@
From 6ae114f8719a6a49cef73a32d820a77e900ddf08 Mon Sep 17 00:00:00 2001
From: hejingxian 00273181 <hejingxian@huawei.com>
Date: Thu, 17 Dec 2020 17:47:45 +0800
Subject: [PATCH] Add log for hotplug appropriately
Conflict:NA
Reference:https://github.com/Irqbalance/irqbalance/commit/6ae114f8719a6a49cef73a32d820a77e900ddf08
---
classify.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/classify.c b/classify.c
index 0d556e9..4b6ffa8 100644
--- a/classify.c
+++ b/classify.c
@@ -644,12 +644,13 @@ static void build_one_dev_entry(const char *dirname, GList *tmp_irqs, int build_
irqnum = strtol(entry->d_name, NULL, 10);
/* If build_irq is valid, only add irq when it's number equals to build_irq */
if (irqnum && ((build_irq < 0) || (irqnum == build_irq))) {
- printf("add irq:%d %d for %s\n", irqnum, build_irq, path);
hint.irq = irqnum;
hint.type = IRQ_TYPE_MSIX;
add_new_irq(devpath, &hint, tmp_irqs);
- if (build_irq >= 0)
+ if (build_irq >= 0) {
+ log(TO_CONSOLE, LOG_INFO, "Hotplug dev irq: %d finished.\n", irqnum);
break;
+ }
}
} while (entry != NULL);
closedir(msidir);
@@ -674,6 +675,8 @@ static void build_one_dev_entry(const char *dirname, GList *tmp_irqs, int build_
hint.irq = irqnum;
hint.type = IRQ_TYPE_LEGACY;
add_new_irq(devpath, &hint, tmp_irqs);
+ if (build_irq >= 0)
+ log(TO_CONSOLE, LOG_INFO, "Hotplug dev irq: %d finished.\n", irqnum);
}
}
--
2.23.0

View File

@ -1,39 +0,0 @@
From 31dea01f3a47aa6374560638486879e5129f9c94 Mon Sep 17 00:00:00 2001
From: Kairui Song <kasong@redhat.com>
Date: Thu, 28 Jan 2021 15:24:32 +0800
Subject: [PATCH] Also fetch node info for non-PCI devices
non-PCI devices could also be bind to a certain node. So if failed to
fetch the info from sysfs, try to get it from /proc/irq/<irq>/node.
Conflict:NA
Reference:https://github.com/Irqbalance/irqbalance/commit/31dea01f3a47aa6374560638486879e5129f9c94
---
classify.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/classify.c b/classify.c
index beb2919..105ecd6 100644
--- a/classify.c
+++ b/classify.c
@@ -361,9 +361,14 @@ static struct irq_info *add_one_irq_to_db(const char *devpath, struct irq_info *
get_numa_node:
numa_node = NUMA_NO_NODE;
- if (devpath != NULL && numa_avail) {
- sprintf(path, "%s/numa_node", devpath);
- process_one_line(path, get_int, &numa_node);
+ if (numa_avail) {
+ if (devpath != NULL) {
+ sprintf(path, "%s/numa_node", devpath);
+ process_one_line(path, get_int, &numa_node);
+ } else {
+ sprintf(path, "/proc/irq/%i/node", irq);
+ process_one_line(path, get_int, &numa_node);
+ }
}
if (pol->numa_node_set == 1)
--
2.23.0

View File

@ -1,28 +0,0 @@
From 518d81cdd8c54c820d16afb73658753b46032676 Mon Sep 17 00:00:00 2001
From: SuperSix173 <liuchao173@huawei.com>
Date: Tue, 6 Apr 2021 10:26:17 +0800
Subject: [PATCH] Hotplug may occur again during sleep, so wait until there is
no hotplug
Conflict:NA
Reference:https://github.com/Irqbalance/irqbalance/commit/518d81cdd8c54c820d16afb73658753b46032676
---
irqbalance.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/irqbalance.c b/irqbalance.c
index 458bb07..3f94847 100644
--- a/irqbalance.c
+++ b/irqbalance.c
@@ -285,7 +285,7 @@ gboolean scan(gpointer data __attribute__((unused)))
/* cope with cpu hotplug -- detected during /proc/interrupts parsing */
- if (need_rescan || need_rebuild) {
+ while (need_rescan || need_rebuild) {
int try_times = 0;
need_rescan = 0;
--
2.23.0

View File

@ -1,56 +0,0 @@
From c8757c6d870c4788da4980abaf21cb7369702ee9 Mon Sep 17 00:00:00 2001
From: Paride Legovini <paride@debian.org>
Date: Tue, 25 Aug 2020 23:18:27 +0200
Subject: [PATCH] activate_mapping: activate only online CPUs
When echoing a mask to /proc/irq/N/smp_affinity make sure to activate
only CPUs which are online. Activating a CPU which is not online results
in a EOVERFLOW.
Originally fixed in Debian by Helge Deller <deller@gmx.de>.
Conflict:NA
Reference:https://github.com/Irqbalance/irqbalance/commit/c8757c6d870c4788da4980abaf21cb7369702ee9
---
activate.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/activate.c b/activate.c
index 065f880..62cfd08 100644
--- a/activate.c
+++ b/activate.c
@@ -49,6 +49,7 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un
char buf[PATH_MAX];
FILE *file;
int ret = 0;
+ cpumask_t applied_mask;
/*
* only activate mappings for irqs that have moved
@@ -59,10 +60,13 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un
if (!info->assigned_obj)
return;
+ /* activate only online cpus, otherwise writing to procfs returns EOVERFLOW */
+ cpus_and(applied_mask, cpu_online_map, info->assigned_obj->mask);
+
/*
* Don't activate anything for which we have an invalid mask
*/
- if (check_affinity(info, info->assigned_obj->mask))
+ if (check_affinity(info, applied_mask))
return;
sprintf(buf, "/proc/irq/%i/smp_affinity", info->irq);
@@ -70,7 +74,7 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un
if (!file)
return;
- cpumask_scnprintf(buf, PATH_MAX, info->assigned_obj->mask);
+ cpumask_scnprintf(buf, PATH_MAX, applied_mask);
ret = fprintf(file, "%s", buf);
if (ret < 0) {
log(TO_ALL, LOG_WARNING, "cannot change irq %i's affinity, add it to banned list", info->irq);
--
2.23.0

View File

@ -1,53 +0,0 @@
From 677b686e223c74e64f5b230bdb4079555a5a62a9 Mon Sep 17 00:00:00 2001
From: ChanderG <mail@chandergovind.org>
Date: Tue, 25 Aug 2020 15:46:56 +0530
Subject: [PATCH] add env variable to ban cpus using cpulist syntax
allows banning of cpus using the taskset cpulist syntax in addition to the
bitmap syntax supported via the existing environment variable
IRQBALANCE_BANNED_CPUS
Conflict:NA
Reference:https://github.com/Irqbalance/irqbalance/commit/677b686e223c74e64f5b230bdb4079555a5a62a9
---
cputree.c | 6 ++++++
irqbalance.1 | 6 ++++++
2 files changed, 12 insertions(+)
diff --git a/cputree.c b/cputree.c
index 0433657..00cf47f 100644
--- a/cputree.c
+++ b/cputree.c
@@ -127,6 +127,12 @@ static void setup_banned_cpus(void)
goto out;
}
+ env = getenv("IRQBALANCE_BANNED_CPULIST");
+ if (env && strlen(env)) {
+ cpulist_parse(env, strlen(env), banned_cpus);
+ goto out;
+ }
+
path = "/sys/devices/system/cpu/isolated";
process_one_line(path, get_mask_from_cpulist, &isolated_cpus);
diff --git a/irqbalance.1 b/irqbalance.1
index 3005f6b..33ffd26 100644
--- a/irqbalance.1
+++ b/irqbalance.1
@@ -158,6 +158,12 @@ Provides a mask of CPUs which irqbalance should ignore and never assign interrup
If not specified, irqbalance use mask of isolated and adaptive-ticks CPUs on the
system as the default value.
+.TP
+.B IRQBALANCE_BANNED_CPULIST
+Provides a cpulist which irqbalance should ignore and never assign interrupts to.
+If not specified, irqbalance use mask of isolated and adaptive-ticks CPUs on the
+system as the default value.
+
.SH "SIGNALS"
.TP
.B SIGHUP
--
2.23.0

View File

@ -1,352 +0,0 @@
From 0ba4a60a2a732150e5016389e32b2e81906a72c2 Mon Sep 17 00:00:00 2001
From: hejingxian 00273181 <hejingxian@huawei.com>
Date: Fri, 4 Dec 2020 10:52:57 +0800
Subject: [PATCH] add irq hotplug feature for irqbalance
Conflict:NA
Reference:https://github.com/Irqbalance/irqbalance/commit/0ba4a60a2a732150e5016389e32b2e81906a72c2
---
classify.c | 70 +++++++++++++++++++++++--------
irqbalance.c | 2 +-
irqbalance.h | 4 +-
procinterrupts.c | 104 ++++++++++++++++++++++++++++-------------------
4 files changed, 120 insertions(+), 60 deletions(-)
diff --git a/classify.c b/classify.c
index 9f588bc..0d556e9 100644
--- a/classify.c
+++ b/classify.c
@@ -619,7 +619,7 @@ static void add_new_irq(char *path, struct irq_info *hint, GList *proc_interrupt
/*
* Figures out which interrupt(s) relate to the device we"re looking at in dirname
*/
-static void build_one_dev_entry(const char *dirname, GList *tmp_irqs)
+static void build_one_dev_entry(const char *dirname, GList *tmp_irqs, int build_irq)
{
struct dirent *entry;
DIR *msidir;
@@ -642,10 +642,14 @@ static void build_one_dev_entry(const char *dirname, GList *tmp_irqs)
if (!entry)
break;
irqnum = strtol(entry->d_name, NULL, 10);
- if (irqnum) {
+ /* If build_irq is valid, only add irq when it's number equals to build_irq */
+ if (irqnum && ((build_irq < 0) || (irqnum == build_irq))) {
+ printf("add irq:%d %d for %s\n", irqnum, build_irq, path);
hint.irq = irqnum;
hint.type = IRQ_TYPE_MSIX;
add_new_irq(devpath, &hint, tmp_irqs);
+ if (build_irq >= 0)
+ break;
}
} while (entry != NULL);
closedir(msidir);
@@ -665,9 +669,12 @@ static void build_one_dev_entry(const char *dirname, GList *tmp_irqs)
#else
if (irqnum) {
#endif
- hint.irq = irqnum;
- hint.type = IRQ_TYPE_LEGACY;
- add_new_irq(devpath, &hint, tmp_irqs);
+ /* If build_irq is valid, only add irq when it's number equals to build_irq */
+ if ((build_irq < 0) || (irqnum == build_irq)) {
+ hint.irq = irqnum;
+ hint.type = IRQ_TYPE_LEGACY;
+ add_new_irq(devpath, &hint, tmp_irqs);
+ }
}
done:
@@ -712,31 +719,60 @@ static void free_tmp_irqs(gpointer data)
free(info);
}
-void rebuild_irq_db(void)
+static struct irq_info * build_dev_irqs(GList *tmp_irqs, int build_irq)
{
DIR *devdir;
struct dirent *entry;
- GList *tmp_irqs = NULL;
-
- free_irq_db();
-
- tmp_irqs = collect_full_irq_list();
+ struct irq_info *new_irq = NULL;
devdir = opendir(SYSPCI_DIR);
-
if (devdir) {
do {
entry = readdir(devdir);
-
if (!entry)
break;
-
- build_one_dev_entry(entry->d_name, tmp_irqs);
-
+ /* when hotplug irqs, we add one irq at one time */
+ build_one_dev_entry(entry->d_name, tmp_irqs, build_irq);
+ if (build_irq >= 0) {
+ new_irq = get_irq_info(build_irq);
+ if (new_irq)
+ break;
+ }
} while (entry != NULL);
-
closedir(devdir);
}
+ return new_irq;
+}
+
+int proc_irq_hotplug(char *savedline, int irq, struct irq_info **pinfo)
+{
+ struct irq_info tmp_info = {0};
+
+ /* firstly, init irq info by read device info */
+ *pinfo = build_dev_irqs(interrupts_db, irq);
+ if (*pinfo == NULL) {
+ /* secondly, init irq info by parse savedline */
+ init_irq_class_and_type(savedline, &tmp_info, irq);
+ add_new_irq(NULL, &tmp_info, interrupts_db);
+ *pinfo = get_irq_info(irq);
+ }
+ if (*pinfo == NULL) {
+ return -1;
+ }
+
+ force_rebalance_irq(*pinfo, NULL);
+ return 0;
+}
+
+void rebuild_irq_db(void)
+{
+ GList *tmp_irqs = NULL;
+
+ free_irq_db();
+
+ tmp_irqs = collect_full_irq_list();
+
+ build_dev_irqs(tmp_irqs, -1);
for_each_irq(tmp_irqs, add_missing_irq, interrupts_db);
diff --git a/irqbalance.c b/irqbalance.c
index eaa0ce1..9baa955 100644
--- a/irqbalance.c
+++ b/irqbalance.c
@@ -249,7 +249,7 @@ static void dump_object_tree(void)
for_each_object(numa_nodes, dump_numa_node_info, NULL);
}
-static void force_rebalance_irq(struct irq_info *info, void *data __attribute__((unused)))
+void force_rebalance_irq(struct irq_info *info, void *data __attribute__((unused)))
{
if (info->level == BALANCE_NONE)
return;
diff --git a/irqbalance.h b/irqbalance.h
index acf0ed5..d8e80a9 100644
--- a/irqbalance.h
+++ b/irqbalance.h
@@ -40,8 +40,11 @@ extern GList* collect_full_irq_list();
extern void parse_proc_stat(void);
extern void set_interrupt_count(int number, uint64_t count);
extern void set_msi_interrupt_numa(int number);
+extern void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq);
+extern int proc_irq_hotplug(char *line, int irq, struct irq_info **pinfo);
extern GList *rebalance_irq_list;
+extern void force_rebalance_irq(struct irq_info *info, void *data __attribute__((unused)));
void update_migration_status(void);
void dump_workloads(void);
@@ -52,7 +55,6 @@ void dump_tree(void);
void activate_mappings(void);
void clear_cpu_tree(void);
void free_cpu_topo(gpointer data);
-
/*===================NEW BALANCER FUNCTIONS============================*/
/*
diff --git a/procinterrupts.c b/procinterrupts.c
index 858b66b..0671be0 100644
--- a/procinterrupts.c
+++ b/procinterrupts.c
@@ -145,16 +145,59 @@ static void guess_arm_irq_hints(char *name, struct irq_info *info)
}
#endif
+void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq)
+{
+ char *irq_name = NULL;
+ char *irq_mod = NULL;
+ char *savedptr = NULL;
+ char *last_token = NULL;
+ char *p = NULL;
+ int is_xen_dyn = 0;
+#ifdef AARCH64
+ char *tmp = NULL;
+#endif
+
+ irq_name = strtok_r(savedline, " ", &savedptr);
+ if (strstr(irq_name, "xen-dyn") != NULL)
+ is_xen_dyn = 1;
+ last_token = strtok_r(NULL, " ", &savedptr);
+ while ((p = strtok_r(NULL, " ", &savedptr))) {
+ irq_name = last_token;
+ if (strstr(irq_name, "xen-dyn") != NULL)
+ is_xen_dyn = 1;
+ last_token = p;
+ }
+
+#ifdef AARCH64
+ irq_name = last_token;
+ tmp = strchr(irq_name, '\n');
+ if (tmp)
+ *tmp = 0;
+#endif
+ irq_mod = last_token;
+ info->irq = irq;
+
+ if (strstr(irq_name, "-event") != NULL && is_xen_dyn == 1) {
+ info->type = IRQ_TYPE_VIRT_EVENT;
+ info->class = IRQ_VIRT_EVENT;
+ } else {
+#ifdef AARCH64
+ guess_arm_irq_hints(irq_name, info);
+#else
+ info->type = IRQ_TYPE_LEGACY;
+ info->class = IRQ_OTHER;
+#endif
+ }
+ info->numa_node = get_numa_node(0);
+ info->name = strdup(irq_mod);
+}
+
GList* collect_full_irq_list()
{
GList *tmp_list = NULL;
FILE *file;
char *line = NULL;
size_t size = 0;
- char *irq_name, *irq_mod, *savedptr, *last_token, *p;
-#ifdef AARCH64
- char *tmp;
-#endif
file = fopen("/proc/interrupts", "r");
if (!file)
@@ -169,7 +212,6 @@ GList* collect_full_irq_list()
while (!feof(file)) {
int number;
- int is_xen_dyn = 0;
struct irq_info *info;
char *c;
char *savedline = NULL;
@@ -191,44 +233,12 @@ GList* collect_full_irq_list()
savedline = strdup(line);
if (!savedline)
break;
- irq_name = strtok_r(savedline, " ", &savedptr);
- if (strstr(irq_name, "xen-dyn") != NULL)
- is_xen_dyn = 1;
- last_token = strtok_r(NULL, " ", &savedptr);
- while ((p = strtok_r(NULL, " ", &savedptr))) {
- irq_name = last_token;
- if (strstr(irq_name, "xen-dyn") != NULL)
- is_xen_dyn = 1;
- last_token = p;
- }
-
-#ifdef AARCH64
- /* Of course the formatting for /proc/interrupts is different on different arches */
- irq_name = last_token;
- tmp = strchr(irq_name, '\n');
- if (tmp)
- *tmp = 0;
-#endif
- irq_mod = last_token;
-
*c = 0;
number = strtoul(line, NULL, 10);
info = calloc(1, sizeof(struct irq_info));
if (info) {
- info->irq = number;
- if (strstr(irq_name, "-event") != NULL && is_xen_dyn == 1) {
- info->type = IRQ_TYPE_VIRT_EVENT;
- info->class = IRQ_VIRT_EVENT;
- } else {
-#ifdef AARCH64
- guess_arm_irq_hints(irq_name, info);
-#else
- info->type = IRQ_TYPE_LEGACY;
- info->class = IRQ_OTHER;
-#endif
- }
- info->name = strdup(irq_mod);
+ init_irq_class_and_type(savedline, info, number);
tmp_list = g_list_append(tmp_list, info);
}
free(savedline);
@@ -238,11 +248,13 @@ GList* collect_full_irq_list()
return tmp_list;
}
+
void parse_proc_interrupts(void)
{
FILE *file;
char *line = NULL;
size_t size = 0;
+ int ret;
file = fopen("/proc/interrupts", "r");
if (!file)
@@ -261,6 +273,7 @@ void parse_proc_interrupts(void)
uint64_t count;
char *c, *c2;
struct irq_info *info;
+ char *savedline = NULL;
if (getline(&line, &size, file)<=0)
break;
@@ -280,15 +293,24 @@ void parse_proc_interrupts(void)
if (!c)
continue;
+ savedline = strdup(line);
+ if (!savedline)
+ break;
*c = 0;
c++;
number = strtoul(line, NULL, 10);
info = get_irq_info(number);
if (!info) {
- need_rescan = 1;
- break;
+ ret = proc_irq_hotplug(savedline, number, &info);
+ if (ret < 0) {
+ /* hotplug fail, need to rescan */
+ need_rescan = 1;
+ free(savedline);
+ break;
+ }
}
+ free(savedline);
count = 0;
cpunr = 0;
@@ -316,7 +338,7 @@ void parse_proc_interrupts(void)
break;
}
- info->last_irq_count = info->irq_count;
+ info->last_irq_count = info->irq_count;
info->irq_count = count;
/* is interrupt MSI based? */
--
2.23.0

View File

@ -1,57 +0,0 @@
From 6fe032945b69d8f382fa3e8de8e4fdce84063199 Mon Sep 17 00:00:00 2001
From: Yunfeng Ye <yeyunfeng@huawei.com>
Date: Fri, 20 Nov 2020 00:15:58 +0800
Subject: [PATCH] log correctly for isolated and nohz_full cpus
When the banded CPU is configured, and the "isolcpus" or "nohz_full"
is configured, the log for isolated and nohz CPUs are not correct.
So only log relevant infomation when isolcpus and nohz_full has been
handled, also put the cpus_clear() closer.
Conflict:NA
Reference:https://github.com/Irqbalance/irqbalance/commit/6fe032945b69d8f382fa3e8de8e4fdce84063199
---
cputree.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/cputree.c b/cputree.c
index 80a6d9d..eed20db 100644
--- a/cputree.c
+++ b/cputree.c
@@ -112,9 +112,6 @@ static void setup_banned_cpus(void)
cpumask_t isolated_cpus;
char *env = NULL;
- cpus_clear(isolated_cpus);
- cpus_clear(nohz_full);
-
/* A manually specified cpumask overrides auto-detection. */
if (cpu_ban_string != NULL && banned_cpumask_from_ui != NULL) {
cpulist_parse(banned_cpumask_from_ui,
@@ -133,6 +130,9 @@ static void setup_banned_cpus(void)
goto out;
}
+ cpus_clear(isolated_cpus);
+ cpus_clear(nohz_full);
+
path = "/sys/devices/system/cpu/isolated";
process_one_line(path, get_mask_from_cpulist, &isolated_cpus);
@@ -141,11 +141,11 @@ static void setup_banned_cpus(void)
cpus_or(banned_cpus, nohz_full, isolated_cpus);
-out:
cpumask_scnprintf(buffer, 4096, isolated_cpus);
log(TO_CONSOLE, LOG_INFO, "Isolated CPUs: %s\n", buffer);
cpumask_scnprintf(buffer, 4096, nohz_full);
log(TO_CONSOLE, LOG_INFO, "Adaptive-ticks CPUs: %s\n", buffer);
+out:
cpumask_scnprintf(buffer, 4096, banned_cpus);
log(TO_CONSOLE, LOG_INFO, "Banned CPUs: %s\n", buffer);
}
--
2.23.0

View File

@ -17,8 +17,8 @@ index 010e672..48d3d0d 100644
indent[i] = log_indent[0]; indent[i] = log_indent[0];
indent[i] = '\0'; indent[i] = '\0';
- log(TO_CONSOLE, LOG_INFO, "%sInterrupt %i node_num is %d (%s/%lu:%lu) \n", indent, - log(TO_CONSOLE, LOG_INFO, "%sInterrupt %i node_num is %d (%s/%" PRIu64 ":%" PRIu64 ") \n", indent,
+ log(TO_ALL, LOG_INFO, "%sInterrupt %i node_num is %d (%s/%lu:%lu) \n", indent, + log(TO_ALL, LOG_INFO, "%sInterrupt %i node_num is %d (%s/%" PRIu64 ":%" PRIu64 ") \n", indent,
info->irq, irq_numa_node(info)->number, classes[info->class], info->load, (info->irq_count - info->last_irq_count)); info->irq, irq_numa_node(info)->number, classes[info->class], info->load, (info->irq_count - info->last_irq_count));
free(indent); free(indent);
} }

Binary file not shown.

BIN
irqbalance-1.8.0.tar.gz Normal file

Binary file not shown.

View File

@ -1,38 +1,28 @@
Summary: A dynamic adaptive IRQ balancing daemon Summary: A dynamic adaptive IRQ balancing daemon
Name: irqbalance Name: irqbalance
Version: 1.7.0 Version: 1.8.0
Release: 5 Release: 1
Epoch: 3 Epoch: 3
License: GPLv2 License: GPLv2
Source0: https://github.com/Irqbalance/irqbalance/archive/v%{version}.tar.gz#/irqbalance-%{version}.tar.gz Source0: https://github.com/Irqbalance/irqbalance/archive/v%{version}.tar.gz#/irqbalance-%{version}.tar.gz
Source1: irqbalance.service Source1: irqbalance.service
Source2: irqbalance.sysconfig Source2: irqbalance.sysconfig
Source3: irqbalance.rules Source3: irqbalance.rules
Source4: irq_balancer Source4: irq_balancer
Url: https://github.com/irqbalance/irqbalance Url: https://github.com/irqbalance/irqbalance
BuildRequires: autoconf automake libtool libcap-ng systemd BuildRequires: autoconf automake libtool libcap-ng systemd
BuildRequires: glib2-devel pkgconf libcap-ng-devel ncurses-devel BuildRequires: glib2-devel pkgconf libcap-ng-devel ncurses-devel
Requires: ncurses-libs Requires: ncurses-libs
%ifnarch %{arm} %ifnarch %{arm}
BuildRequires: numactl-devel BuildRequires: numactl-devel
Requires: numactl-libs Requires: numactl-libs
%endif %endif
%define _hardened_build 1 %define _hardened_build 1
Patch6000: backport-add-env-variable-to-ban-cpus-using-cpulist-syntax.patch
Patch6001: backport-activate_mapping-activate-only-online-CPUs.patch
Patch6002: backport-log-correctly-for-isolated-and-nohz_full-cpus.patch
Patch6003: backport-add-irq-hotplug-feature-for-irqbalance.patch
Patch6004: backport-Add-log-for-hotplug-appropriately.patch
Patch6005: backport-Add-hot-pull-method-for-irqbalance.patch
Patch6006: backport-Also-fetch-node-info-for-non-PCI-devices.patch
Patch6007: backport-Hotplug-may-occur-again-during-sleep-so-wait-until-t.patch
Patch9000: feature-aarch64-add-the-regular-to-get-the-correct-i.patch Patch9000: feature-aarch64-add-the-regular-to-get-the-correct-i.patch
Patch9001: feature-add-new-user-irq-policy-config-rule.patch Patch9001: feature-add-new-user-irq-policy-config-rule.patch
Patch9002: feature-add-the-switch-of-printing-log.patch Patch9002: feature-add-the-switch-of-printing-log.patch
@ -83,7 +73,8 @@ cd -
install -D -p -m 0755 %{name} %{buildroot}%{_sbindir}/%{name} install -D -p -m 0755 %{name} %{buildroot}%{_sbindir}/%{name}
install -D -p -m 0644 %{SOURCE1} %{buildroot}/%{_unitdir}/%{name}.service install -D -p -m 0644 %{SOURCE1} %{buildroot}/%{_unitdir}/%{name}.service
install -D -p -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/%{name} install -D -p -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/%{name}
install -D -p -m 0755 %{SOURCE3} %{buildroot}%{_sbindir}/irq_balancer install -D -p -m 0755 %{SOURCE3} %{buildroot}%{_sysconfdir}/sysconfig/%{name}.rules
install -D -p -m 0755 %{SOURCE4} %{buildroot}%{_sbindir}/irq_balancer
install -D -p -m 0755 ui/irqbalance_client.h %{buildroot}/%{_includedir}/irqbalance_client.h install -D -p -m 0755 ui/irqbalance_client.h %{buildroot}/%{_includedir}/irqbalance_client.h
install -D -p -m 0755 ui/libirqbalance_client.so %{buildroot}/%{_libdir}/libirqbalance_client.so install -D -p -m 0755 ui/libirqbalance_client.so %{buildroot}/%{_libdir}/libirqbalance_client.so
@ -99,6 +90,7 @@ make check
%{_sbindir}/%{name} %{_sbindir}/%{name}
%{_unitdir}/%{name}.service %{_unitdir}/%{name}.service
%config(noreplace) %{_sysconfdir}/sysconfig/%{name} %config(noreplace) %{_sysconfdir}/sysconfig/%{name}
%{_sysconfdir}/sysconfig/%{name}.rules
%{_sbindir}/irq_balancer %{_sbindir}/irq_balancer
%files devel %files devel
@ -126,6 +118,12 @@ fi
/sbin/chkconfig --del %{name} >/dev/null 2>&1 || : /sbin/chkconfig --del %{name} >/dev/null 2>&1 || :
%changelog %changelog
* Sat Apr 17 2021 Liu Chao <liuchao173@huawei.com> - 3:1.8.0-1
- Type:enhanced
- ID:NA
- SUG:restart
- DESC:upgrade to v1.8.0
* Fri Apr 9 2021 Liu Chao <liuchao173@huawei.com> - 3:1.7.0-5 * Fri Apr 9 2021 Liu Chao <liuchao173@huawei.com> - 3:1.7.0-5
- Type:enhanced - Type:enhanced
- ID:NA - ID:NA