summaryrefslogtreecommitdiff
path: root/include/rtdef.h
diff options
context:
space:
mode:
authorShell <[email protected]>2024-06-04 00:06:41 +0800
committerGitHub <[email protected]>2024-06-04 00:06:41 +0800
commit6ca327d8ce1d9c98204ab7c6d62123cfd5e12dcf (patch)
treeed2cd81b10d249c22c07271d8f94085dbffd1c30 /include/rtdef.h
parente03342ff6b237d3ac6c38e133cb23b9770281f4a (diff)
[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 <[email protected]> * fixup: add ump idle thread --------- Signed-off-by: Shell <[email protected]>
Diffstat (limited to 'include/rtdef.h')
-rw-r--r--include/rtdef.h42
1 files changed, 28 insertions, 14 deletions
diff --git a/include/rtdef.h b/include/rtdef.h
index 3e48a137f6..26a1647ee6 100644
--- a/include/rtdef.h
+++ b/include/rtdef.h
@@ -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 */
/**@}*/