更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_statistics_pri.h 文件参考

浏览源代码.

结构体

struct  SchedStat
 

函数

VOID OsSchedDebugRecordData (VOID)
 
UINT32 OsShellShowTickResponse (VOID)
 
UINT32 OsShellShowSchedStatistics (VOID)
 
UINT32 OsSchedDebugInit (VOID)
 

函数说明

◆ OsSchedDebugInit()

UINT32 OsSchedDebugInit ( VOID  )

在文件 los_statistics.c44 行定义.

45{
46 UINT32 size = sizeof(SchedTickDebug) * LOSCFG_KERNEL_CORE_NUM;
48 if (g_schedTickDebug == NULL) {
49 return LOS_ERRNO_TSK_NO_MEMORY;
50 }
51
52 (VOID)memset_s(g_schedTickDebug, size, 0, size);
53 return LOS_OK;
54}
VOID * LOS_MemAlloc(VOID *pool, UINT32 size)
从指定内存池中申请size长度的内存,注意这可不是从内核堆空间中申请内存
Definition: los_memory.c:1123
UINT8 * m_aucSysMem0
异常交互动态内存池地址的起始地址,当不支持异常交互特性时,m_aucSysMem0等于m_aucSysMem1。
Definition: los_memory.c:107
STATIC SchedTickDebug * g_schedTickDebug
unsigned int UINT32
Definition: los_typedef.h:57
函数调用图:
这是这个函数的调用关系图:

◆ OsSchedDebugRecordData()

VOID OsSchedDebugRecordData ( VOID  )

在文件 los_statistics.c56 行定义.

57{
61 LOS_ASSERT(currTime >= rq->responseTime);
62 UINT64 usedTime = currTime - rq->responseTime;
63 schedDebug->responseTime += usedTime;
64 if (usedTime > schedDebug->responseTimeMax) {
65 schedDebug->responseTimeMax = usedTime;
66 }
67 schedDebug->count++;
68}
STATIC INLINE UINT32 ArchCurrCpuid(VOID)
Definition: los_hw_cpu.h:168
STATIC INLINE UINT64 OsGetCurrSchedTimeCycle(VOID)
Definition: los_sched_pri.h:75
STATIC INLINE SchedRunqueue * OsSchedRunqueue(VOID)
long unsigned int UINT64
Definition: los_typedef.h:66
UINT64 responseTime
UINT64 responseTimeMax
函数调用图:
这是这个函数的调用关系图:

◆ OsShellShowSchedStatistics()

UINT32 OsShellShowSchedStatistics ( VOID  )

在文件 los_statistics.c126 行定义.

127{
128 UINT32 taskLinkNum[LOSCFG_KERNEL_CORE_NUM];
129 UINT32 intSave;
130 LosTaskCB task;
131
132 SCHEDULER_LOCK(intSave);
133 for (UINT16 cpu = 0; cpu < LOSCFG_KERNEL_CORE_NUM; cpu++) {
135 taskLinkNum[cpu] = OsGetSortLinkNodeNum(&rq->timeoutQueue);
136 }
137 SCHEDULER_UNLOCK(intSave);
138
139 for (UINT16 cpu = 0; cpu < LOSCFG_KERNEL_CORE_NUM; cpu++) {
140 PRINTK("cpu: %u Task SortMax: %u\n", cpu, taskLinkNum[cpu]);
141 }
142
143 PRINTK(" Tid AverRunTime(us) SwitchCount AverTimeSlice(us) TimeSliceCount AverReadyWait(us) "
144 "AverPendTime(us) TaskName \n");
145 for (UINT32 tid = 0; tid < g_taskMaxNum; tid++) {
146 LosTaskCB *taskCB = g_taskCBArray + tid;
147 SCHEDULER_LOCK(intSave);
148 if (OsTaskIsUnused(taskCB) || (taskCB->processID == OsGetIdleProcessID())) {
149 SCHEDULER_UNLOCK(intSave);
150 continue;
151 }
152
153 (VOID)memcpy_s(&task, sizeof(LosTaskCB), taskCB, sizeof(LosTaskCB));
154 SCHEDULER_UNLOCK(intSave);
155
156 UINT64 averRunTime = 0;
157 UINT64 averTimeSlice = 0;
158 UINT64 averPendTime = 0;
159 UINT64 averSchedWait = 0;
160
161 SchedDataGet(&task, &averRunTime, &averTimeSlice, &averPendTime, &averSchedWait);
162
163 PRINTK("%5u%19llu%15llu%19llu%18llu%19llu%18llu %-32s\n", taskCB->taskID,
164 averRunTime, taskCB->schedStat.switchCount,
165 averTimeSlice, taskCB->schedStat.timeSliceCount - 1,
166 averSchedWait, averPendTime, taskCB->taskName);
167 }
168
169 return LOS_OK;
170}
LITE_OS_SEC_BSS UINT32 g_taskMaxNum
任务最大数量 默认128个
Definition: los_task.c:150
LITE_OS_SEC_BSS LosTaskCB * g_taskCBArray
外部变量 任务池 默认128个
Definition: los_task.c:147
LITE_OS_SEC_TEXT UINT32 OsGetIdleProcessID(VOID)
获取内核态空闲进程
Definition: los_process.c:2254
struct TagTaskCB LosTaskCB
Definition: los_sched_pri.h:72
STATIC INLINE SchedRunqueue * OsSchedRunqueueByID(UINT16 id)
STATIC VOID SchedDataGet(const LosTaskCB *taskCB, UINT64 *runTime, UINT64 *timeSlice, UINT64 *pendTime, UINT64 *schedWait)
STATIC INLINE BOOL OsTaskIsUnused(const LosTaskCB *taskCB)
任务是否在使用
Definition: los_task_pri.h:255
unsigned short UINT16
Definition: los_typedef.h:56
SortLinkAttribute timeoutQueue
Definition: los_sched_pri.h:99
UINT64 timeSliceCount
UINT64 switchCount
UINT32 taskID
CHAR taskName[OS_TCB_NAME_LEN]
UINT32 processID
SchedStat schedStat
函数调用图:
这是这个函数的调用关系图:

◆ OsShellShowTickResponse()

UINT32 OsShellShowTickResponse ( VOID  )

在文件 los_statistics.c70 行定义.

71{
72 UINT32 intSave;
73 UINT16 cpu;
74
75 UINT32 tickSize = sizeof(SchedTickDebug) * LOSCFG_KERNEL_CORE_NUM;
76 SchedTickDebug *schedDebug = (SchedTickDebug *)LOS_MemAlloc(m_aucSysMem1, tickSize);
77 if (schedDebug == NULL) {
78 return LOS_NOK;
79 }
80
81 SCHEDULER_LOCK(intSave);
82 (VOID)memcpy_s((CHAR *)schedDebug, tickSize, (CHAR *)g_schedTickDebug, tickSize);
83 SCHEDULER_UNLOCK(intSave);
84
85 PRINTK("cpu ATRTime(us) ATRTimeMax(us) TickCount\n");
86 for (cpu = 0; cpu < LOSCFG_KERNEL_CORE_NUM; cpu++) {
87 SchedTickDebug *schedData = &schedDebug[cpu];
88 UINT64 averTime = 0;
89 if (schedData->count > 0) {
90 averTime = schedData->responseTime / schedData->count;
91 averTime = (averTime * OS_NS_PER_CYCLE) / OS_SYS_NS_PER_US;
92 }
93 UINT64 timeMax = (schedData->responseTimeMax * OS_NS_PER_CYCLE) / OS_SYS_NS_PER_US;
94 PRINTK("%3u%14llu%15llu%11llu\n", cpu, averTime, timeMax, schedData->count);
95 }
96
97 (VOID)LOS_MemFree(m_aucSysMem1, schedDebug);
98 return LOS_OK;
99}
UINT8 * m_aucSysMem1
系统动态内存池地址的起始地址 @note_thinking 能否不要用 0,1来命名核心变量 ???
Definition: los_memory.c:108
UINT32 LOS_MemFree(VOID *pool, VOID *ptr)
释放从指定动态内存中申请的内存
Definition: los_memory.c:1369
char CHAR
Definition: los_typedef.h:63
函数调用图:
这是这个函数的调用关系图: