153 Star 690 Fork 534

OpenHarmony / kernel_liteos_m

 / 详情

低内存资源回收low memory killer

已完成
需求 成员
创建于  
2021-11-16 08:40

【需求价值】:
丰富特性,支持部分低配置芯片的内存临时超过峰值的特定使用场景。

【需求描述】:
在低配置芯片的一些特定使用场景中,会临时运行一些高内存的任务,但是因为系统内存已经接近使用极限,高内存任务启动会失败。此时,期望临时杀掉一些低重要性任务来释放内存,保障临时运行高内存任务成功。运行高内存运行完毕后,可以再恢复被杀掉的低内存任务。

【方案描述】:

输入图片说明

【配套文档】:
设计文档、会议讨论记录归档位置 https://gitee.com/rtos_yuan/lmk/tree/design/

【验收标准】:

  • 1、低重要性可杀任务支持用户配置指定
  • 2、被杀任务支持内高内存任务释放内存后可恢复
  • 3、释放低重要性任务内存后,内存足够时,支持高内存任务成功创建运行
  • 4、支持LMK框架,支持杀任务、恢复任务等可以恢复
  • 5、支持DFX可调测

评论 (2)

kenneth 创建了需求
kenneth 任务状态待办的 修改为设计中
kenneth 负责人设置为kenneth
kenneth 修改了描述
kenneth 修改了描述
展开全部操作日志

11月16日会议遗留问题:

  • 1、LOS_TASK_ATTR_JOINABLE和LOS_TASK_ATTR_LMK_KILLABLE二选一?还是可以支持逻辑与?
    --> 可以进行逻辑与。posix、cmsis部分也使用到了LOS_TASK_ATTR_JOINABLE。LOS_TASK_ATTR_LMK_KILLABLE属于内核特性,不属于posix等标准内容,不需要修改posix、cmsis部分。

  • 2、m核支持任务分组吗?
    --> 内核不支持任务分组。配置可杀任务时,建议最好支持可配置的任务分组,支持可配置。

  • 3、 任务如何退出?有些任务入口执行函数带while循环,有些任务不带while循环,任务退出的区别?
    --> LOS_TaskDelete函数可以删除带while循环的任务。不带while循环的任务,也会调用LOS_TaskDelete函数自删除,如下代码:

LITE_OS_SEC_TEXT_INIT VOID OsTaskEntry(UINT32 taskID)
{
    UINT32 retVal;
    LosTaskCB *taskCB = OS_TCB_FROM_TID(taskID);

    taskCB->joinRetval = (UINTPTR)taskCB->taskEntry(taskCB->arg);
    retVal = LOS_TaskDelete(taskCB->taskID);
    if (retVal != LOS_OK) {
        PRINT_ERR("Delete Task[TID: %d] Failed!\n", taskCB->taskID);
    }
}

feat: 低内存资源回收low memory killer

低内存资源回收特性,支持维护可杀低重要任务,当高内存任务申请不到足够内存时,临时释放低重要性的任务来释放内存来满足高内存任务正常运行;
当高内存任务退出运行时,自动恢复被杀的低重要性任务。设计文档归档位置 https://gitee.com/rtos_yuan/lmk/tree/design/

BREAKING CHANGE: 增加低内存资源回收注册相关接口LOS_LmkOpsNodeRegister、LOS_LmkOpsNodeUnregister和内存资源释放和任务恢复接口LOS_LmkTasksKill和LOS_LmkTasksRestore.

close #I4ID0M:低内存资源回收low memory killer

Signed-off-by: kenneth zhushangyuan@huawei.com

-----来自 commit ab886d8

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(1)
C
1
https://gitee.com/openharmony/kernel_liteos_m.git
git@gitee.com:openharmony/kernel_liteos_m.git
openharmony
kernel_liteos_m
kernel_liteos_m

搜索帮助