nsh: Improve performance of ps by merge nsh_output

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
This commit is contained in:
Huang Qi 2023-03-02 22:35:00 +08:00 committed by Masayuki Ishikawa
parent e957e1633c
commit f1ba1a40ed

View File

@ -56,6 +56,17 @@
# define LOAD_FRAC(x) (LOAD_INT(((x) & (FIXED_1 - 1)) * 100))
#endif
#if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE)
# define PS_SHOW_HEAPSIZE
#endif
#ifndef CONFIG_NSH_DISABLE_PSSTACKUSAGE
# define PS_SHOW_STACKSIZE
# ifdef CONFIG_STACK_COLORATION
# define PS_SHOW_STACKUSAGE
# endif
#endif
/****************************************************************************
* Private Types
****************************************************************************/
@ -341,17 +352,20 @@ static int ps_callback(FAR struct nsh_vtbl_s *vtbl, FAR const char *dirpath,
/* Finally, print the status information */
nsh_output(vtbl, "%5s ", entryp->d_name);
nsh_output(vtbl, "%5s ", status.td_groupid);
nsh_output(vtbl,
"%5s %5s "
#ifdef CONFIG_SMP
nsh_output(vtbl, "%3s ", status.td_cpu);
"%3s "
#endif
nsh_output(vtbl, "%3s %-8s %-7s %3s %-8s %-9s ",
"%3s %-8s %-7s %3s %-8s %-9s %-8s ",
entryp->d_name, status.td_groupid,
#ifdef CONFIG_SMP
status.td_cpu,
#endif
status.td_priority, status.td_policy, status.td_type,
status.td_flags, status.td_state, status.td_event);
nsh_output(vtbl, "%-8s ", status.td_sigmask);
status.td_flags, status.td_state, status.td_event,
status.td_sigmask);
#if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE)
/* Get the Heap AllocSize */
@ -412,7 +426,6 @@ static int ps_callback(FAR struct nsh_vtbl_s *vtbl, FAR const char *dirpath,
}
}
nsh_output(vtbl, "%08lu ", heap_size);
#endif
#if !defined(CONFIG_NSH_DISABLE_PSSTACKUSAGE)
@ -480,10 +493,7 @@ static int ps_callback(FAR struct nsh_vtbl_s *vtbl, FAR const char *dirpath,
}
}
nsh_output(vtbl, "%06lu ", stack_size);
#ifdef CONFIG_STACK_COLORATION
nsh_output(vtbl, "%06lu ", stack_used);
if (stack_size > 0 && stack_used > 0)
{
@ -491,12 +501,6 @@ static int ps_callback(FAR struct nsh_vtbl_s *vtbl, FAR const char *dirpath,
stack_filled = 10 * 100 * stack_used / stack_size;
}
/* Additionally print a '!' if the stack is filled more than 80% */
nsh_output(vtbl, "%3lu.%lu%%%c ",
stack_filled / 10, stack_filled % 10,
(stack_filled >= 10 * 80 ? '!' : ' '));
#endif
#endif
@ -520,8 +524,40 @@ static int ps_callback(FAR struct nsh_vtbl_s *vtbl, FAR const char *dirpath,
vtbl->iobuffer[0] = '\0';
}
}
#endif
nsh_output(vtbl, "%6s ", nsh_trimspaces(vtbl->iobuffer));
#if defined(PS_SHOW_HEAPSIZE) || defined (PS_SHOW_STACKSIZE) || \
defined (PS_SHOW_STACKUSAGE) || defined (NSH_HAVE_CPULOAD)
nsh_output(vtbl,
#ifdef PS_SHOW_HEAPSIZE
"%08lu "
#endif
#ifdef PS_SHOW_STACKSIZE
"%06lu "
#endif
#ifdef PS_SHOW_STACKUSAGE
"%06lu "
"%3lu.%lu%%%c "
#endif
#ifdef NSH_HAVE_CPULOAD
"%6s "
#endif
#if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE)
, heap_size
#endif
#if !defined(CONFIG_NSH_DISABLE_PSSTACKUSAGE)
, stack_size
#endif
#ifdef PS_SHOW_STACKUSAGE
, stack_used,
stack_filled / 10,
stack_filled % 10,
(stack_filled >= 10 * 80 ? '!' : ' ')
#endif
#ifdef NSH_HAVE_CPULOAD
, nsh_trimspaces(vtbl->iobuffer)
#endif
);
#endif
/* Read the task/thread command line */
@ -586,33 +622,47 @@ int cmd_ps(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
UNUSED(argc);
UNUSED(argv);
nsh_output(vtbl, "%5s ", "PID");
nsh_output(vtbl, "%5s ", "GROUP");
nsh_output(vtbl, "%5s %5s "
#ifdef CONFIG_SMP
nsh_output(vtbl, "%3s ", "CPU");
"%3s "
#endif
nsh_output(vtbl, "%3s %-8s %-7s %3s %-8s %-9s ",
"PRI", "POLICY", "TYPE", "NPX", "STATE", "EVENT");
nsh_output(vtbl, "%-8s ", "SIGMASK");
"%3s %-8s %-7s %3s %-8s %-9s "
"%-8s "
#if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE)
nsh_output(vtbl, "%8s ", "HEAP");
"%8s "
#endif
#if !defined(CONFIG_NSH_DISABLE_PSSTACKUSAGE)
nsh_output(vtbl, "%6s ", "STACK");
"%6s "
#ifdef CONFIG_STACK_COLORATION
nsh_output(vtbl, "%6s ", "USED");
nsh_output(vtbl, "%7s ", "FILLED");
"%6s "
"%7s "
#endif
#endif
#ifdef NSH_HAVE_CPULOAD
nsh_output(vtbl, "%6s ", "CPU");
"%6s "
#endif
nsh_output(vtbl, "%s\n", "COMMAND");
"%s\n",
"PID", "GROUP",
#ifdef CONFIG_SMP
"CPU",
#endif
"PRI", "POLICY", "TYPE", "NPX", "STATE", "EVENT",
"SIGMASK",
#if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE)
"HEAP",
#endif
#if !defined(CONFIG_NSH_DISABLE_PSSTACKUSAGE)
"STACK",
#ifdef CONFIG_STACK_COLORATION
"USED",
"FILLED",
#endif
#endif
#ifdef NSH_HAVE_CPULOAD
"CPU",
#endif
"COMMAND"
);
return nsh_foreach_direntry(vtbl, "ps", CONFIG_NSH_PROC_MOUNTPOINT,
ps_callback, NULL);