[PATCH 2/2] sched/debug: adjust newlines for better alignment

2018-03-19 Thread Joe Lawrence
Scheduler debug stats include newlines that display out of alignment
when prefixed by timestamps.  For example, the dmesg utility:

  % echo t > /proc/sysrq-trigger
  % dmesg
  ...
  [   83.124251]
  runnable tasks:
   S   task   PID tree-key  switches  prio wait-time
  sum-execsum-sleep
  
---

At the same time, some syslog utilities (like rsyslog by default) don't
like the additional newlines control characters, saving lines like this
to /var/log/messages:

  Mar 16 16:02:29 localhost kernel: #012runnable tasks:#012 S   task   
PID tree-key ...
   
Clean these up by moving newline characters to their own SEQ_printf
invocation.  This leaves the /proc/sched_debug unchanged, but brings the
entire output into alignment when prefixed:

  % echo t > /proc/sysrq-trigger
  % dmesg
  ...
  [   62.410368] runnable tasks:
  [   62.410368]  S   task   PID tree-key  switches  prio 
wait-time sum-execsum-sleep
  [   62.410369] 
---
  [   62.410369]  I  kworker/u12:0 5  1932.215593   332   120   
  0.00 3.621252 0.00 0 0 /

and no escaped control characters from rsyslog in /var/log/messages:

  Mar 16 16:15:06 localhost kernel: runnable tasks:
  Mar 16 16:15:06 localhost kernel: S   task   PID tree-key  ...

Signed-off-by: Joe Lawrence 
---
 kernel/sched/debug.c | 27 ---
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
index 50026aa2d81e..72c401b3b15c 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -501,12 +501,12 @@ static void print_rq(struct seq_file *m, struct rq *rq, 
int rq_cpu)
 {
struct task_struct *g, *p;
 
-   SEQ_printf(m,
-   "\nrunnable tasks:\n"
-   " S   task   PID tree-key  switches  prio"
-   " wait-time sum-execsum-sleep\n"
-   "---"
-   "\n");
+   SEQ_printf(m, "\n");
+   SEQ_printf(m, "runnable tasks:\n");
+   SEQ_printf(m, " S   task   PID tree-key  switches  prio"
+  " wait-time sum-execsum-sleep\n");
+   SEQ_printf(m, "---"
+  "\n");
 
rcu_read_lock();
for_each_process_thread(g, p) {
@@ -527,9 +527,11 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct 
cfs_rq *cfs_rq)
unsigned long flags;
 
 #ifdef CONFIG_FAIR_GROUP_SCHED
-   SEQ_printf(m, "\ncfs_rq[%d]:%s\n", cpu, task_group_path(cfs_rq->tg));
+   SEQ_printf(m, "\n");
+   SEQ_printf(m, "cfs_rq[%d]:%s\n", cpu, task_group_path(cfs_rq->tg));
 #else
-   SEQ_printf(m, "\ncfs_rq[%d]:\n", cpu);
+   SEQ_printf(m, "\n");
+   SEQ_printf(m, "cfs_rq[%d]:\n", cpu);
 #endif
SEQ_printf(m, "  .%-30s: %Ld.%06ld\n", "exec_clock",
SPLIT_NS(cfs_rq->exec_clock));
@@ -595,9 +597,11 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct 
cfs_rq *cfs_rq)
 void print_rt_rq(struct seq_file *m, int cpu, struct rt_rq *rt_rq)
 {
 #ifdef CONFIG_RT_GROUP_SCHED
-   SEQ_printf(m, "\nrt_rq[%d]:%s\n", cpu, task_group_path(rt_rq->tg));
+   SEQ_printf(m, "\n");
+   SEQ_printf(m, "rt_rq[%d]:%s\n", cpu, task_group_path(rt_rq->tg));
 #else
-   SEQ_printf(m, "\nrt_rq[%d]:\n", cpu);
+   SEQ_printf(m, "\n");
+   SEQ_printf(m, "rt_rq[%d]:\n", cpu);
 #endif
 
 #define P(x) \
@@ -624,7 +628,8 @@ void print_dl_rq(struct seq_file *m, int cpu, struct dl_rq 
*dl_rq)
 {
struct dl_bw *dl_bw;
 
-   SEQ_printf(m, "\ndl_rq[%d]:\n", cpu);
+   SEQ_printf(m, "\n");
+   SEQ_printf(m, "dl_rq[%d]:\n", cpu);
 
 #define PU(x) \
SEQ_printf(m, "  .%-30s: %lu\n", #x, (unsigned long)(dl_rq->x))
-- 
1.8.3.1



[PATCH 2/2] sched/debug: adjust newlines for better alignment

2018-03-19 Thread Joe Lawrence
Scheduler debug stats include newlines that display out of alignment
when prefixed by timestamps.  For example, the dmesg utility:

  % echo t > /proc/sysrq-trigger
  % dmesg
  ...
  [   83.124251]
  runnable tasks:
   S   task   PID tree-key  switches  prio wait-time
  sum-execsum-sleep
  
---

At the same time, some syslog utilities (like rsyslog by default) don't
like the additional newlines control characters, saving lines like this
to /var/log/messages:

  Mar 16 16:02:29 localhost kernel: #012runnable tasks:#012 S   task   
PID tree-key ...
   
Clean these up by moving newline characters to their own SEQ_printf
invocation.  This leaves the /proc/sched_debug unchanged, but brings the
entire output into alignment when prefixed:

  % echo t > /proc/sysrq-trigger
  % dmesg
  ...
  [   62.410368] runnable tasks:
  [   62.410368]  S   task   PID tree-key  switches  prio 
wait-time sum-execsum-sleep
  [   62.410369] 
---
  [   62.410369]  I  kworker/u12:0 5  1932.215593   332   120   
  0.00 3.621252 0.00 0 0 /

and no escaped control characters from rsyslog in /var/log/messages:

  Mar 16 16:15:06 localhost kernel: runnable tasks:
  Mar 16 16:15:06 localhost kernel: S   task   PID tree-key  ...

Signed-off-by: Joe Lawrence 
---
 kernel/sched/debug.c | 27 ---
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
index 50026aa2d81e..72c401b3b15c 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -501,12 +501,12 @@ static void print_rq(struct seq_file *m, struct rq *rq, 
int rq_cpu)
 {
struct task_struct *g, *p;
 
-   SEQ_printf(m,
-   "\nrunnable tasks:\n"
-   " S   task   PID tree-key  switches  prio"
-   " wait-time sum-execsum-sleep\n"
-   "---"
-   "\n");
+   SEQ_printf(m, "\n");
+   SEQ_printf(m, "runnable tasks:\n");
+   SEQ_printf(m, " S   task   PID tree-key  switches  prio"
+  " wait-time sum-execsum-sleep\n");
+   SEQ_printf(m, "---"
+  "\n");
 
rcu_read_lock();
for_each_process_thread(g, p) {
@@ -527,9 +527,11 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct 
cfs_rq *cfs_rq)
unsigned long flags;
 
 #ifdef CONFIG_FAIR_GROUP_SCHED
-   SEQ_printf(m, "\ncfs_rq[%d]:%s\n", cpu, task_group_path(cfs_rq->tg));
+   SEQ_printf(m, "\n");
+   SEQ_printf(m, "cfs_rq[%d]:%s\n", cpu, task_group_path(cfs_rq->tg));
 #else
-   SEQ_printf(m, "\ncfs_rq[%d]:\n", cpu);
+   SEQ_printf(m, "\n");
+   SEQ_printf(m, "cfs_rq[%d]:\n", cpu);
 #endif
SEQ_printf(m, "  .%-30s: %Ld.%06ld\n", "exec_clock",
SPLIT_NS(cfs_rq->exec_clock));
@@ -595,9 +597,11 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct 
cfs_rq *cfs_rq)
 void print_rt_rq(struct seq_file *m, int cpu, struct rt_rq *rt_rq)
 {
 #ifdef CONFIG_RT_GROUP_SCHED
-   SEQ_printf(m, "\nrt_rq[%d]:%s\n", cpu, task_group_path(rt_rq->tg));
+   SEQ_printf(m, "\n");
+   SEQ_printf(m, "rt_rq[%d]:%s\n", cpu, task_group_path(rt_rq->tg));
 #else
-   SEQ_printf(m, "\nrt_rq[%d]:\n", cpu);
+   SEQ_printf(m, "\n");
+   SEQ_printf(m, "rt_rq[%d]:\n", cpu);
 #endif
 
 #define P(x) \
@@ -624,7 +628,8 @@ void print_dl_rq(struct seq_file *m, int cpu, struct dl_rq 
*dl_rq)
 {
struct dl_bw *dl_bw;
 
-   SEQ_printf(m, "\ndl_rq[%d]:\n", cpu);
+   SEQ_printf(m, "\n");
+   SEQ_printf(m, "dl_rq[%d]:\n", cpu);
 
 #define PU(x) \
SEQ_printf(m, "  .%-30s: %lu\n", #x, (unsigned long)(dl_rq->x))
-- 
1.8.3.1