[irqbalance] [RFC][PATCH 2/5] Optimized indentation for systemd journal

  • From: Andrej Manduch <amanduch@xxxxxxxxx>
  • To: irqbalance@xxxxxxxxxxxxx
  • Date: Tue, 3 Mar 2015 12:51:43 -0500

When you run irqbalance with systemd on debug mode it produces
really bad logs in to yournal 'because journalctl will strip your
indentation and result looks like that:

burlak@borg ~ $ journalctl -u irqbalance -n 100 -o cat
Package 0:  numa_node is 0 cpu mask is 0000000f (load 0)
Cache domain 0:  numa_node is 0 cpu mask is 0000000f  (load 0)
CPU number 0  numa_node is 0 (load 0)
Interrupt 32 node_num is -1 (ethernet/1)
CPU number 1  numa_node is 0 (load 0)
Interrupt 30 node_num is -1 (timer/1)
CPU number 2  numa_node is 0 (load 0)
Interrupt 29 node_num is -1 (ethernet/1)
CPU number 3  numa_node is 0 (load 0)
Interrupt 26 node_num is -1 (storage/1)
Interrupt 23 node_num is -1 (legacy/1)
Interrupt 18 node_num is -1 (legacy/1)
Interrupt 16 node_num is -1 (legacy/1)

instead of:

burlak@borg ~ $ irqbalance --debug
Package 0:  numa_node is -1 cpu mask is 0000000f (load 0)
        Cache domain 0:  numa_node is -1 cpu mask is 00000003  (load 0)
                CPU number 0  numa_node is -1 (load 0)
                  Interrupt 32 node_num is -1 (ethernet/1)
                CPU number 1  numa_node is -1 (load 0)
          Interrupt 23 node_num is -1 (legacy/1)
          Interrupt 16 node_num is -1 (legacy/1)
          Interrupt 27 node_num is -1 (legacy/1)
        Cache domain 1:  numa_node is -1 cpu mask is 0000000c  (load 0)
                CPU number 2  numa_node is -1 (load 0)
                  Interrupt 26 node_num is -1 (storage/1)
                  Interrupt 30 node_num is -1 (video/1)
                CPU number 3  numa_node is -1 (load 0)
                  Interrupt 29 node_num is -1 (ethernet/1)
          Interrupt 18 node_num is -1 (legacy/1)
  Interrupt 25 node_num is -1 (other/1)
  Interrupt 24 node_num is -1 (other/1)
  Interrupt 12 node_num is -1 (other/1)

This patch add support with different characters in indentation
when you compile irqbalance with ./configure --with-systemd

Signed-off-by: Andrej Manduch <amanduch@xxxxxxxxx>
Reported-by: Peter Holasek <pholasek@xxxxxxxxxx>
---
 cputree.c    | 10 +++++++---
 irqbalance.c | 13 ++++++++++++-
 irqbalance.h |  1 +
 3 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/cputree.c b/cputree.c
index c56b1be..df40d1a 100644
--- a/cputree.c
+++ b/cputree.c
@@ -294,7 +294,9 @@ static void dump_irq(struct irq_info *info, void *data)
 {
        int spaces = (long int)data;
        int i;
-       for (i=0; i<spaces; i++) log(TO_CONSOLE, LOG_INFO, " ");
+       char indent_char[2] = {log_indent[0], '\0'};
+
+       for (i=0; i<spaces; i++) log(TO_CONSOLE, LOG_INFO, indent_char);
        log(TO_CONSOLE, LOG_INFO, "Interrupt %i node_num is %d (%s/%u) \n",
            info->irq, irq_numa_node(info)->number, classes[info->class], 
(unsigned int)info->load);
 }
@@ -302,7 +304,8 @@ static void dump_irq(struct irq_info *info, void *data)
 static void dump_topo_obj(struct topo_obj *d, void *data 
__attribute__((unused)))
 {
        struct topo_obj *c = (struct topo_obj *)d;
-       log(TO_CONSOLE, LOG_INFO, "                CPU number %i  numa_node is 
%d (load %lu)\n",
+       log(TO_CONSOLE, LOG_INFO, "%s%s%s%sCPU number %i  numa_node is %d (load 
%lu)\n",
+           log_indent, log_indent, log_indent, log_indent,
            c->number, cpu_numa_node(c)->number , (unsigned long)c->load);
        if (c->interrupts)
                for_each_irq(c->interrupts, dump_irq, (void *)18);
@@ -312,7 +315,8 @@ static void dump_cache_domain(struct topo_obj *d, void 
*data)
 {
        char *buffer = data;
        cpumask_scnprintf(buffer, 4095, d->mask);
-       log(TO_CONSOLE, LOG_INFO, "        Cache domain %i:  numa_node is %d 
cpu mask is %s  (load %lu) \n",
+       log(TO_CONSOLE, LOG_INFO, "%s%sCache domain %i:  numa_node is %d cpu 
mask is %s  (load %lu) \n",
+           log_indent, log_indent,
            d->number, cache_domain_numa_node(d)->number, buffer, (unsigned 
long)d->load);
        if (d->children)
                for_each_object(d->children, dump_topo_obj, NULL);
diff --git a/irqbalance.c b/irqbalance.c
index 4059ef5..8057591 100644
--- a/irqbalance.c
+++ b/irqbalance.c
@@ -49,6 +49,7 @@ int numa_avail;
 int journal_logging = 0;
 int need_rescan;
 unsigned int log_mask = TO_ALL;
+char * log_indent;
 enum hp_e global_hint_policy = HINT_POLICY_IGNORE;
 unsigned long power_thresh = ULONG_MAX;
 unsigned long deepest_cache = 2;
@@ -180,6 +181,8 @@ static void parse_command_line(int argc, char **argv)
 #ifdef HAVE_SYSTEMD
                        case 'j':
                                journal_logging=1;
+                               foreground_mode=1;
+                               debug_mode=1;
                                break;
 #endif /* HAVE_SYSTEMD */
                }
@@ -269,8 +272,11 @@ int main(int argc, char** argv)
        if (argc>1 && strstr(argv[1],"--oneshot"))
                one_shot_mode=1;
 #      ifdef HAVE_SYSTEMD
-       if (argc>1 && strstr(argv[1],"--journal"))
+       if (argc>1 && strstr(argv[1],"--journal")) {
                journal_logging=1;
+               foreground_mode=1;
+               debug_mode=1;
+       }
 #      endif /* HAVE_SYSTEMD */
 #endif /* HAVE_GETOPT_LONG */
 
@@ -293,6 +299,11 @@ int main(int argc, char** argv)
         * If we are't in debug mode, don't dump anything to the console
         * note that everything goes to the console before we check this
         */
+       if (journal_logging)
+               log_indent = strdup("....");
+       else
+               log_indent = strdup("    ");
+
        if (!debug_mode)
                log_mask &= ~TO_CONSOLE;
 
diff --git a/irqbalance.h b/irqbalance.h
index 266f0ce..e6f4f87 100644
--- a/irqbalance.h
+++ b/irqbalance.h
@@ -134,6 +134,7 @@ static inline void for_each_object(GList *list, void 
(*cb)(struct topo_obj *obj,
 #define TO_CONSOLE     (1 << 1)
 #define TO_ALL         (TO_SYSLOG | TO_CONSOLE)
 
+extern char * log_indent;
 extern unsigned int log_mask;
 #define log(mask, lvl, fmt, args...) do {\
        if (log_mask & mask & TO_SYSLOG)\
-- 
2.1.0


Other related posts:

  • » [irqbalance] [RFC][PATCH 2/5] Optimized indentation for systemd journal - Andrej Manduch