39#ifdef LOSCFG_BASE_CORE_SWTMR_ENABLE
48#ifdef LOSCFG_KERNEL_VM
57#ifndef LOSCFG_KERNEL_SMP
62#ifndef LOSCFG_KERNEL_SMP
77 UINT32 reclaimMemPages = 0;
84 for (i = 0; i < MAX_SHRINK_PAGECACHE_TRY; i++) {
88 return reclaimMemPages;
95 BOOL isReclaimMemory = FALSE;
99 for (i = 0; i < MAX_SHRINK_PAGECACHE_TRY; i++) {
102 if (isReclaimMemory) {
110 if (reclaimMemPages > 0) {
117 return isReclaimMemory;
128 BOOL isLowMemory = FALSE;
139 goto NO_VICTIM_PROCESS;
147 PRINTK(
"[oom] OS is in low memory state\n"
148 "total physical memory: %#x(byte), used: %#x(byte),"
149 "free: %#x(byte), low memory threshold: %#x(byte)\n",
150 totalPm << PAGE_SHIFT, usedPm << PAGE_SHIFT,
158#ifdef LOSCFG_ENABLE_OOM_LOOP_TASK
167 PRINTK(
"[oom] oom loop task status: %s\n"
168 " oom low memory threshold: %#x(byte)\n"
169 " oom reclaim memory threshold: %#x(byte)\n"
170 " oom check interval: %d(microsecond)\n",
178 if ((lowMemThreshold > OOM_DEFAULT_LOW_MEM_THRESHOLD_MAX)) {
179 PRINTK(
"[oom] low memory threshold %#x(byte) invalid,"
180 "should be in [%#x, %#x](byte)\n",
181 lowMemThreshold, OOM_DEFAULT_LOW_MEM_THRESHOLD_MIN,
182 OOM_DEFAULT_LOW_MEM_THRESHOLD_MAX);
185 PRINTK(
"[oom] set oom low memory threshold %#x(byte) successful\n",
196 if ((reclaimMemThreshold >= (totalPm << PAGE_SHIFT)) ||
197 (reclaimMemThreshold < g_oomCB->lowMemThreshold)) {
198 PRINTK(
"[oom] reclaim memory threshold %#x(byte) invalid,"
199 "should be in [%#x, %#x)(byte)\n",
203 PRINTK(
"[oom] set oom reclaim memory threshold %#x(byte) successful\n",
210 if ((checkInterval >= OOM_CHECK_MIN) && (checkInterval <= OOM_CHECK_MAX)) {
212 PRINTK(
"[oom] set oom check interval (%d)ms successful\n",
215 PRINTK(
"[oom] set oom check interval (%d)ms failed, should be in [%d, %d]\n",
224 VM_ERR(
"oom task init failed, malloc OomCB failed.");
235#ifdef LOSCFG_ENABLE_OOM_LOOP_TASK
VOID * LOS_MemAlloc(VOID *pool, UINT32 size)
从指定内存池中申请size长度的内存,注意这可不是从内核堆空间中申请内存
UINT8 * m_aucSysMem0
异常交互动态内存池地址的起始地址,当不支持异常交互特性时,m_aucSysMem0等于m_aucSysMem1。
LITE_OS_SEC_TEXT UINT32 LOS_SwtmrStart(UINT16 swtmrID)
接口函数 启动定时器 参数定时任务ID
VOID(* SWTMR_PROC_FUNC)(UINTPTR arg)
Define the type of a callback function that handles software timer timeout.
LITE_OS_SEC_TEXT_INIT UINT32 LOS_SwtmrCreate(UINT32 interval, UINT8 mode, SWTMR_PROC_FUNC handler, UINT16 *swtmrID, UINTPTR arg)
创建定时器,设置定时器的定时时长、定时器模式、回调函数,并返回定时器ID
UINT32(* OomFn)(UINTPTR param)
VOID LOS_SpinLock(SPIN_LOCK_S *lock)
VOID LOS_SpinUnlock(SPIN_LOCK_S *lock)
LITE_OS_SEC_TEXT VOID OsWriteResourceEvent(UINT32 events)
VOID OsVmPhysUsedInfoGet(UINT32 *usedCount, UINT32 *totalCount)
获取物理内存的使用信息,两个参数接走数据
UINT32 OsUProcessPmUsage(LosVmSpace *space, UINT32 *sharePm, UINT32 *actualPm)
虚拟空间物理内存的使用情况,参数同时带走共享物理内存 sharePm和actualPm 单位是字节
int OsTryShrinkMemory(size_t nPage)
STATIC INLINE STATUS_T LOS_MuxAcquire(LosMux *m)
STATIC INLINE STATUS_T LOS_MuxRelease(LosMux *m)
LITE_OS_SEC_TEXT_MINOR UINT32 OomTaskInit(VOID)
内存不足监控任务初始化, OOM 通过开一个软件定时器来检查内存的使用情况
LITE_OS_SEC_TEXT_MINOR VOID OomSetCheckInterval(UINT32 checkInterval)
设置监控间隔
LITE_OS_SEC_TEXT_MINOR STATIC UINT32 OomScoreProcess(LosProcessCB *candidateProcess)
LITE_OS_SEC_BSS OomCB * g_oomCB
LITE_OS_SEC_TEXT_MINOR VOID OomSetReclaimMemThreashold(UINT32 reclaimMemThreshold)
设置回收内存的门槛
LITE_OS_SEC_TEXT_MINOR STATIC BOOL OomReclaimPageCache(VOID)
内存不足时回收页高速缓存
LOS_MODULE_INIT(OomTaskInit, LOS_INIT_LEVEL_KMOD_TASK)
LITE_OS_SEC_TEXT_MINOR VOID OomSetLowMemThreashold(UINT32 lowMemThreshold)
设置低内存门槛
STATIC VOID OomWriteEvent(VOID)
LITE_OS_SEC_TEXT_MINOR STATIC UINT32 OomKillProcess(UINTPTR param)
用于设置 g_oomCB->processVictimCB 回调函数
LITE_OS_SEC_TEXT_MINOR STATIC UINT32 OomForceShrinkMemory(VOID)
强制收缩内存
LITE_OS_SEC_TEXT_MINOR BOOL OomCheckProcess(VOID)
LITE_OS_SEC_TEXT_MINOR VOID OomInfodump(VOID)
static SPIN_LOCK_INIT(g_oomSpinLock)
UINT32 reclaimMemThreshold