mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-11-16 12:34:33 +00:00
[smart] add CPU/thread usage tracing config (#8947)
* [smart] add CPU usage tracing config This patch introduces following features: - Added CPU usage tracing functionality, enabled by default, for applications like 'top' - update time as smart independent Signed-off-by: Shell <smokewood@qq.com> * fixup: add ump idle thread --------- Signed-off-by: Shell <smokewood@qq.com>
This commit is contained in:
@@ -701,6 +701,18 @@ enum
|
||||
#define RT_THREAD_CTRL_INFO 0x03 /**< Get thread information. */
|
||||
#define RT_THREAD_CTRL_BIND_CPU 0x04 /**< Set thread bind cpu. */
|
||||
|
||||
/**
|
||||
* CPU usage statistics data
|
||||
*/
|
||||
struct rt_cpu_usage_stats
|
||||
{
|
||||
rt_ubase_t user;
|
||||
rt_ubase_t system;
|
||||
rt_ubase_t irq;
|
||||
rt_ubase_t idle;
|
||||
};
|
||||
typedef struct rt_cpu_usage_stats *rt_cpu_usage_stats_t;
|
||||
|
||||
#ifdef RT_USING_SMP
|
||||
|
||||
#define RT_CPU_DETACHED RT_CPUS_NR /**< The thread not running on cpu. */
|
||||
@@ -714,15 +726,6 @@ enum
|
||||
#define RT_STOP_IPI 1
|
||||
#endif /* RT_STOP_IPI */
|
||||
|
||||
struct rt_cpu_usage_stats
|
||||
{
|
||||
rt_uint64_t user;
|
||||
rt_uint64_t system;
|
||||
rt_uint64_t irq;
|
||||
rt_uint64_t idle;
|
||||
};
|
||||
typedef struct rt_cpu_usage_stats *rt_cpu_usage_stats_t;
|
||||
|
||||
#define _SCHEDULER_CONTEXT(fileds) fileds
|
||||
|
||||
/**
|
||||
@@ -762,14 +765,21 @@ struct rt_cpu
|
||||
|
||||
#ifdef RT_USING_SMART
|
||||
struct rt_spinlock spinlock;
|
||||
#endif /* RT_USING_SMART */
|
||||
#ifdef RT_USING_CPU_USAGE_TRACER
|
||||
struct rt_cpu_usage_stats cpu_stat;
|
||||
#endif
|
||||
#endif /* RT_USING_CPU_USAGE_TRACER */
|
||||
};
|
||||
|
||||
#else /* !RT_USING_SMP */
|
||||
struct rt_cpu
|
||||
{
|
||||
struct rt_thread *current_thread;
|
||||
struct rt_thread *idle_thread;
|
||||
|
||||
#ifdef RT_USING_CPU_USAGE_TRACER
|
||||
struct rt_cpu_usage_stats cpu_stat;
|
||||
#endif /* RT_USING_CPU_USAGE_TRACER */
|
||||
};
|
||||
|
||||
#endif /* RT_USING_SMP */
|
||||
@@ -947,9 +957,6 @@ struct rt_thread
|
||||
void *susp_recycler; /**< suspended recycler on this thread */
|
||||
void *robust_list; /**< pi lock, very carefully, it's a userspace list!*/
|
||||
|
||||
rt_uint64_t user_time;
|
||||
rt_uint64_t system_time;
|
||||
|
||||
#ifndef ARCH_MM_MMU
|
||||
lwp_sighandler_t signal_handler[32];
|
||||
#else
|
||||
@@ -963,6 +970,11 @@ struct rt_thread
|
||||
#endif /* ARCH_MM_MMU */
|
||||
#endif /* RT_USING_SMART */
|
||||
|
||||
#ifdef RT_USING_CPU_USAGE_TRACER
|
||||
rt_ubase_t user_time; /**< Ticks on user */
|
||||
rt_ubase_t system_time; /**< Ticks on system */
|
||||
#endif /* RT_USING_CPU_USAGE_TRACER */
|
||||
|
||||
#ifdef RT_USING_MEM_PROTECTION
|
||||
void *mem_regions;
|
||||
#ifdef RT_USING_HW_STACK_GUARD
|
||||
@@ -976,7 +988,9 @@ struct rt_thread
|
||||
typedef struct rt_thread *rt_thread_t;
|
||||
|
||||
#ifdef RT_USING_SMART
|
||||
#define IS_USER_MODE(t) ((t)->user_ctx.ctx == RT_NULL)
|
||||
#define LWP_IS_USER_MODE(t) ((t)->user_ctx.ctx == RT_NULL)
|
||||
#else
|
||||
#define LWP_IS_USER_MODE(t) (0)
|
||||
#endif /* RT_USING_SMART */
|
||||
|
||||
/**@}*/
|
||||
|
||||
Reference in New Issue
Block a user