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)) # define LOAD_FRAC(x) (LOAD_INT(((x) & (FIXED_1 - 1)) * 100))
#endif #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 * 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 */ /* Finally, print the status information */
nsh_output(vtbl, "%5s ", entryp->d_name); nsh_output(vtbl,
nsh_output(vtbl, "%5s ", status.td_groupid); "%5s %5s "
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
nsh_output(vtbl, "%3s ", status.td_cpu); "%3s "
#endif #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_priority, status.td_policy, status.td_type,
status.td_flags, status.td_state, status.td_event); status.td_flags, status.td_state, status.td_event,
nsh_output(vtbl, "%-8s ", status.td_sigmask); status.td_sigmask);
#if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE) #if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE)
/* Get the Heap AllocSize */ /* 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 #endif
#if !defined(CONFIG_NSH_DISABLE_PSSTACKUSAGE) #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 #ifdef CONFIG_STACK_COLORATION
nsh_output(vtbl, "%06lu ", stack_used);
if (stack_size > 0 && stack_used > 0) 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; 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
#endif #endif
@ -520,8 +524,40 @@ static int ps_callback(FAR struct nsh_vtbl_s *vtbl, FAR const char *dirpath,
vtbl->iobuffer[0] = '\0'; 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 #endif
/* Read the task/thread command line */ /* 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(argc);
UNUSED(argv); UNUSED(argv);
nsh_output(vtbl, "%5s ", "PID"); nsh_output(vtbl, "%5s %5s "
nsh_output(vtbl, "%5s ", "GROUP");
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
nsh_output(vtbl, "%3s ", "CPU"); "%3s "
#endif #endif
"%3s %-8s %-7s %3s %-8s %-9s "
nsh_output(vtbl, "%3s %-8s %-7s %3s %-8s %-9s ", "%-8s "
"PRI", "POLICY", "TYPE", "NPX", "STATE", "EVENT");
nsh_output(vtbl, "%-8s ", "SIGMASK");
#if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE) #if CONFIG_MM_BACKTRACE >= 0 && !defined(CONFIG_NSH_DISABLE_PSHEAPUSAGE)
nsh_output(vtbl, "%8s ", "HEAP"); "%8s "
#endif #endif
#if !defined(CONFIG_NSH_DISABLE_PSSTACKUSAGE) #if !defined(CONFIG_NSH_DISABLE_PSSTACKUSAGE)
nsh_output(vtbl, "%6s ", "STACK"); "%6s "
#ifdef CONFIG_STACK_COLORATION #ifdef CONFIG_STACK_COLORATION
nsh_output(vtbl, "%6s ", "USED"); "%6s "
nsh_output(vtbl, "%7s ", "FILLED"); "%7s "
#endif #endif
#endif #endif
#ifdef NSH_HAVE_CPULOAD #ifdef NSH_HAVE_CPULOAD
nsh_output(vtbl, "%6s ", "CPU"); "%6s "
#endif #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, return nsh_foreach_direntry(vtbl, "ps", CONFIG_NSH_PROC_MOUNTPOINT,
ps_callback, NULL); ps_callback, NULL);