mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-14 03:50:02 +03:00
Report true average task execution time in tasks report
This commit is contained in:
parent
5b5df65934
commit
cc3552b032
4 changed files with 10 additions and 8 deletions
|
@ -4929,20 +4929,20 @@ static void cliTasks(const char *cmdName, char *cmdline)
|
||||||
int taskFrequency = taskInfo.averageDeltaTime10thUs == 0 ? 0 : lrintf(1e7f / taskInfo.averageDeltaTime10thUs);
|
int taskFrequency = taskInfo.averageDeltaTime10thUs == 0 ? 0 : lrintf(1e7f / taskInfo.averageDeltaTime10thUs);
|
||||||
cliPrintf("%02d - (%15s) ", taskId, taskInfo.taskName);
|
cliPrintf("%02d - (%15s) ", taskId, taskInfo.taskName);
|
||||||
const int maxLoad = taskInfo.maxExecutionTimeUs == 0 ? 0 : (taskInfo.maxExecutionTimeUs * taskFrequency) / 1000;
|
const int maxLoad = taskInfo.maxExecutionTimeUs == 0 ? 0 : (taskInfo.maxExecutionTimeUs * taskFrequency) / 1000;
|
||||||
const int averageLoad = taskInfo.averageExecutionTimeUs == 0 ? 0 : (taskInfo.averageExecutionTimeUs * taskFrequency) / 1000;
|
const int averageLoad = taskInfo.averageExecutionTime10thUs == 0 ? 0 : (taskInfo.averageExecutionTime10thUs * taskFrequency) / 10000;
|
||||||
if (taskId != TASK_SERIAL) {
|
if (taskId != TASK_SERIAL) {
|
||||||
averageLoadSum += averageLoad;
|
averageLoadSum += averageLoad;
|
||||||
}
|
}
|
||||||
if (systemConfig()->task_statistics) {
|
if (systemConfig()->task_statistics) {
|
||||||
#if defined(USE_LATE_TASK_STATISTICS)
|
#if defined(USE_LATE_TASK_STATISTICS)
|
||||||
cliPrintLinef("%6d %7d %7d %4d.%1d%% %4d.%1d%% %9d %6d %6d %7d",
|
cliPrintLinef("%6d %7d %7d %4d.%1d%% %4d.%1d%% %9d %6d %6d %7d",
|
||||||
taskFrequency, taskInfo.maxExecutionTimeUs, taskInfo.averageExecutionTimeUs,
|
taskFrequency, taskInfo.maxExecutionTimeUs, taskInfo.averageExecutionTime10thUs / 10,
|
||||||
maxLoad/10, maxLoad%10, averageLoad/10, averageLoad%10,
|
maxLoad/10, maxLoad%10, averageLoad/10, averageLoad%10,
|
||||||
taskInfo.totalExecutionTimeUs / 1000,
|
taskInfo.totalExecutionTimeUs / 1000,
|
||||||
taskInfo.lateCount, taskInfo.runCount, taskInfo.execTime);
|
taskInfo.lateCount, taskInfo.runCount, taskInfo.execTime);
|
||||||
#else
|
#else
|
||||||
cliPrintLinef("%6d %7d %7d %4d.%1d%% %4d.%1d%% %9d",
|
cliPrintLinef("%6d %7d %7d %4d.%1d%% %4d.%1d%% %9d",
|
||||||
taskFrequency, taskInfo.maxExecutionTimeUs, taskInfo.averageExecutionTimeUs,
|
taskFrequency, taskInfo.maxExecutionTimeUs, taskInfo.averageExecutionTime10thUs / 10,
|
||||||
maxLoad/10, maxLoad%10, averageLoad/10, averageLoad%10,
|
maxLoad/10, maxLoad%10, averageLoad/10, averageLoad%10,
|
||||||
taskInfo.totalExecutionTimeUs / 1000);
|
taskInfo.totalExecutionTimeUs / 1000);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -555,9 +555,9 @@ static void showTasksPage(void)
|
||||||
getTaskInfo(taskId, &taskInfo);
|
getTaskInfo(taskId, &taskInfo);
|
||||||
if (taskInfo.isEnabled && taskId != TASK_SERIAL) {// don't waste a line of the display showing serial taskInfo
|
if (taskInfo.isEnabled && taskId != TASK_SERIAL) {// don't waste a line of the display showing serial taskInfo
|
||||||
const int taskFrequency = (int)(1000000.0f / ((float)taskInfo.latestDeltaTimeUs));
|
const int taskFrequency = (int)(1000000.0f / ((float)taskInfo.latestDeltaTimeUs));
|
||||||
const int maxLoad = (taskInfo.maxExecutionTimeUs * taskFrequency + 5000) / 10000;
|
const int maxLoad = taskInfo.maxExecutionTimeUs == 0 ? 0 : (taskInfo.maxExecutionTimeUs * taskFrequency) / 1000;
|
||||||
const int averageLoad = (taskInfo.averageExecutionTimeUs * taskFrequency + 5000) / 10000;
|
const int averageLoad = taskInfo.averageExecutionTime10thUs == 0 ? 0 : (taskInfo.averageExecutionTime10thUs * taskFrequency) / 10000;
|
||||||
tfp_sprintf(lineBuffer, format, taskId, taskInfo.maxExecutionTimeUs, taskInfo.averageExecutionTimeUs, maxLoad, averageLoad);
|
tfp_sprintf(lineBuffer, format, taskId, taskInfo.maxExecutionTimeUs, taskInfo.averageExecutionTime10thUs / 10, maxLoad, averageLoad);
|
||||||
padLineBuffer();
|
padLineBuffer();
|
||||||
i2c_OLED_set_line(dev, rowIndex++);
|
i2c_OLED_set_line(dev, rowIndex++);
|
||||||
i2c_OLED_send_string(dev, lineBuffer);
|
i2c_OLED_send_string(dev, lineBuffer);
|
||||||
|
|
|
@ -217,7 +217,7 @@ void getTaskInfo(taskId_e taskId, taskInfo_t * taskInfo)
|
||||||
taskInfo->subTaskName = getTask(taskId)->attribute->subTaskName;
|
taskInfo->subTaskName = getTask(taskId)->attribute->subTaskName;
|
||||||
taskInfo->maxExecutionTimeUs = getTask(taskId)->maxExecutionTimeUs;
|
taskInfo->maxExecutionTimeUs = getTask(taskId)->maxExecutionTimeUs;
|
||||||
taskInfo->totalExecutionTimeUs = getTask(taskId)->totalExecutionTimeUs;
|
taskInfo->totalExecutionTimeUs = getTask(taskId)->totalExecutionTimeUs;
|
||||||
taskInfo->averageExecutionTimeUs = getTask(taskId)->anticipatedExecutionTime >> TASK_EXEC_TIME_SHIFT;
|
taskInfo->averageExecutionTime10thUs = getTask(taskId)->movingSumExecutionTime10thUs / TASK_STATS_MOVING_SUM_COUNT;
|
||||||
taskInfo->averageDeltaTime10thUs = getTask(taskId)->movingSumDeltaTime10thUs / TASK_STATS_MOVING_SUM_COUNT;
|
taskInfo->averageDeltaTime10thUs = getTask(taskId)->movingSumDeltaTime10thUs / TASK_STATS_MOVING_SUM_COUNT;
|
||||||
taskInfo->latestDeltaTimeUs = getTask(taskId)->taskLatestDeltaTimeUs;
|
taskInfo->latestDeltaTimeUs = getTask(taskId)->taskLatestDeltaTimeUs;
|
||||||
taskInfo->movingAverageCycleTimeUs = getTask(taskId)->movingAverageCycleTimeUs;
|
taskInfo->movingAverageCycleTimeUs = getTask(taskId)->movingAverageCycleTimeUs;
|
||||||
|
@ -389,6 +389,7 @@ FAST_CODE timeUs_t schedulerExecuteTask(task_t *selectedTask, timeUs_t currentTi
|
||||||
selectedTask->attribute->taskFunc(currentTimeBeforeTaskCallUs);
|
selectedTask->attribute->taskFunc(currentTimeBeforeTaskCallUs);
|
||||||
taskExecutionTimeUs = micros() - currentTimeBeforeTaskCallUs;
|
taskExecutionTimeUs = micros() - currentTimeBeforeTaskCallUs;
|
||||||
taskTotalExecutionTime += taskExecutionTimeUs;
|
taskTotalExecutionTime += taskExecutionTimeUs;
|
||||||
|
selectedTask->movingSumExecutionTime10thUs += (taskExecutionTimeUs * 10) - selectedTask->movingSumExecutionTime10thUs / TASK_STATS_MOVING_SUM_COUNT;
|
||||||
if (!ignoreCurrentTaskExecRate) {
|
if (!ignoreCurrentTaskExecRate) {
|
||||||
// Record task execution rate and max execution time
|
// Record task execution rate and max execution time
|
||||||
selectedTask->taskLatestDeltaTimeUs = cmpTimeUs(currentTimeUs, selectedTask->lastStatsAtUs);
|
selectedTask->taskLatestDeltaTimeUs = cmpTimeUs(currentTimeUs, selectedTask->lastStatsAtUs);
|
||||||
|
|
|
@ -85,7 +85,7 @@ typedef struct {
|
||||||
timeDelta_t latestDeltaTimeUs;
|
timeDelta_t latestDeltaTimeUs;
|
||||||
timeUs_t maxExecutionTimeUs;
|
timeUs_t maxExecutionTimeUs;
|
||||||
timeUs_t totalExecutionTimeUs;
|
timeUs_t totalExecutionTimeUs;
|
||||||
timeUs_t averageExecutionTimeUs;
|
timeUs_t averageExecutionTime10thUs;
|
||||||
timeUs_t averageDeltaTime10thUs;
|
timeUs_t averageDeltaTime10thUs;
|
||||||
float movingAverageCycleTimeUs;
|
float movingAverageCycleTimeUs;
|
||||||
#if defined(USE_LATE_TASK_STATISTICS)
|
#if defined(USE_LATE_TASK_STATISTICS)
|
||||||
|
@ -212,6 +212,7 @@ typedef struct {
|
||||||
float movingAverageCycleTimeUs;
|
float movingAverageCycleTimeUs;
|
||||||
timeUs_t anticipatedExecutionTime; // Fixed point expectation of next execution time
|
timeUs_t anticipatedExecutionTime; // Fixed point expectation of next execution time
|
||||||
timeUs_t movingSumDeltaTime10thUs; // moving sum over 64 samples
|
timeUs_t movingSumDeltaTime10thUs; // moving sum over 64 samples
|
||||||
|
timeUs_t movingSumExecutionTime10thUs;
|
||||||
timeUs_t maxExecutionTimeUs;
|
timeUs_t maxExecutionTimeUs;
|
||||||
timeUs_t totalExecutionTimeUs; // total time consumed by task since boot
|
timeUs_t totalExecutionTimeUs; // total time consumed by task since boot
|
||||||
timeUs_t lastStatsAtUs; // time of last stats gathering for rate calculation
|
timeUs_t lastStatsAtUs; // time of last stats gathering for rate calculation
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue