49#ifdef LOSCFG_KERNEL_VM
56#define VMM_PMM_CMD "v2p"
61 if (kAspace != NULL) {
64 VM_ERR(
"kernel aspace is NULL");
73 for (
UINT32 i = 0; i < len; i++) {
74 if (isdigit(str[i]) == 0) {
85 PRINTK(
"-a, print all vm address space information\n"
86 "-k, print the kernel vm address space information\n"
87 "pid(0~63), print process[pid] vm address space information\n"
88 "-h | --help, print vmm command usage\n");
96 PRINTK(
"\tThe process [%d] not valid\n", pid);
100 processCB = OS_PCB_FROM_PID(pid);
104 PRINTK(
"\tThe process [%d] not active\n", pid);
112 }
else if (argc == 1) {
113 pid_t pid =
OsPid(argv[0]);
114 if (strcmp(argv[0],
"-a") == 0) {
116 }
else if (strcmp(argv[0],
"-k") == 0) {
118 }
else if (pid >= 0) {
120 }
else if (strcmp(argv[0],
"-h") == 0 || strcmp(argv[0],
"--help") == 0) {
123 PRINTK(
"%s: invalid option: %s\n", VMM_CMD, argv[0]);
135 PRINTK(
"pid vaddr(0x1000000~0x3e000000), print physical address of virtual address\n"
136 "-h | --help, print v2p command usage\n");
147 }
else if (argc == 1) {
148 if (strcmp(argv[0],
"-h") == 0 || strcmp(argv[0],
"--help") == 0) {
151 }
else if (argc == 2) {
152 pid_t pid =
OsPid(argv[0]);
153 vaddr = strtoul((
CHAR *)argv[1], &endPtr, 0);
155 PRINTK(
"vaddr %s invalid. should be in range(0x1000000~0x3e000000) \n", argv[1]);
165 PRINTK(
"vaddr %#x is not in range or mapped\n", vaddr);
167 PRINTK(
"vaddr %#x is paddr %#x\n", vaddr, paddr);
170 PRINTK(
"\tThe process [%d] not active\n", pid);
173 PRINTK(
"\tThe process [%d] not valid\n", pid);
176 PRINTK(
"%s: invalid option: %s %s\n", VMM_PMM_CMD, argv[0], argv[1]);
195 PRINTK(
"\t-i [interval], set oom check interval (ms)\n"
196 "\t-m [mem byte], set oom low memory threshold (Byte)\n"
197 "\t-r [mem byte], set page cache reclaim memory threshold (Byte)\n"
198 "\t-h | --help, print vmm command usage\n");
205 UINT32 reclaimMemThreshold;
209 if (argc == ARGC_0) {
211 }
else if (argc == ARGC_1) {
212 if (strcmp(argv[0],
"-h") != 0 && strcmp(argv[0],
"--help") != 0) {
213 PRINTK(
"%s: invalid option: %s\n", OOM_CMD, argv[0]);
216 }
else if (argc == ARGC_2) {
217 if (strcmp(argv[0],
"-m") == 0) {
218 lowMemThreshold = strtoul((
CHAR *)argv[1], &endPtr, 0);
219 if ((endPtr == NULL) || (*endPtr != 0)) {
220 PRINTK(
"[oom] low mem threshold %s(byte) invalid.\n", argv[1]);
225 }
else if (strcmp(argv[0],
"-i") == 0) {
226 checkInterval = strtoul((
CHAR *)argv[1], &endPtr, 0);
227 if ((endPtr == NULL) || (*endPtr != 0)) {
228 PRINTK(
"[oom] check interval %s(us) invalid.\n", argv[1]);
233 }
else if (strcmp(argv[0],
"-r") == 0) {
234 reclaimMemThreshold = strtoul((
CHAR *)argv[1], &endPtr, 0);
235 if ((endPtr == NULL) || (*endPtr != 0)) {
236 PRINTK(
"[oom] reclaim mem threshold %s(byte) invalid.\n", argv[1]);
242 PRINTK(
"%s: invalid option: %s %s\n", OOM_CMD, argv[0], argv[1]);
246 PRINTK(
"%s: invalid option\n", OOM_CMD);
253#ifdef LOSCFG_SHELL_CMD_DEBUG
@ CMD_TYPE_SHOW
用户怎么输入就怎么显示出现,包括 \0 这些字符也都会存在
LITE_OS_SEC_BSS UINT32 g_taskMaxNum
任务最大数量 默认128个
STATUS_T LOS_ArchMmuQuery(const LosArchMmu *archMmu, VADDR_T vaddr, PADDR_T *paddr, UINT32 *flags)
LOS_ArchMmuQuery 获取进程空间虚拟地址对应的物理地址以及映射属性。 本函数是内核高频函数,通过MMU查询虚拟地址是否映射过,带走映射的物理地址和权限
LITE_OS_SEC_TEXT_MINOR VOID OomSetCheckInterval(UINT32 checkInterval)
设置监控间隔
LITE_OS_SEC_TEXT_MINOR VOID OomSetReclaimMemThreashold(UINT32 reclaimMemThreshold)
设置回收内存的门槛
LITE_OS_SEC_TEXT_MINOR VOID OomSetLowMemThreashold(UINT32 lowMemThreshold)
设置低内存门槛
LITE_OS_SEC_TEXT_MINOR VOID OomInfodump(VOID)
STATIC INLINE BOOL OsProcessIsUnused(const LosProcessCB *processCB)
STATIC INLINE BOOL OsProcessIDUserCheckInvalid(UINT32 pid)
VOID OsDumpAspace(LosVmSpace *space)
dump 指定虚拟空间的信息
VOID OsDumpAllAspace(VOID)
查看所有进程使用虚拟内存的情况
VOID OsVmPhysDump(VOID)
dump 物理内存
STATIC INLINE BOOL LOS_IsUserAddress(VADDR_T vaddr)
虚拟地址是否在用户空间
LosVmSpace * LOS_GetKVmSpace(VOID)
内核空间只有g_kVmSpace一个,所有的内核进程都共用一个内核空间
void PathCacheMemoryDump(void)
虚拟空间,每个进程都有一个属于自己的虚拟内存地址空间
u32_t(* CmdCallBackFunc)(u32_t argc, const char **argv)
void VnodeMemoryDump(void)
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdDumpPmm(VOID)
查看系统内存物理页及pagecache物理页使用情况 , Debug版本才具备的命令 # pmm
LITE_OS_SEC_TEXT_MINOR VOID OsPrintUsage(VOID)
LITE_OS_SEC_TEXT_MINOR INT32 OsPid(const CHAR *str)
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdDumpVm(INT32 argc, const CHAR *argv[])
查看进程的虚拟内存使用情况。vmm [-a / -h / –help], vmm [pid]
SHELLCMD_ENTRY(oom_shellcmd, CMD_TYPE_SHOW, OOM_CMD, 2,(CmdCallBackFunc) OsShellCmdOom)
LITE_OS_SEC_TEXT_MINOR VOID OsDumpKernelAspace(VOID)
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdV2P(INT32 argc, const CHAR *argv[])
v2p 虚拟内存对应的物理内存
LITE_OS_SEC_TEXT_MINOR VOID OsDoDumpVm(pid_t pid)
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellCmdOom(INT32 argc, const CHAR *argv[])
查看和设置低内存阈值以及pagecache内存回收阈值。参数缺省时,显示oom功能当前配置信息。
LITE_OS_SEC_TEXT_MINOR VOID V2PPrintUsage(VOID)
LITE_OS_SEC_TEXT_MINOR VOID OomPrintUsage(VOID)