增加cpu占用率支持

This commit is contained in:
zhangzheng
2025-02-05 14:44:49 +08:00
parent 8e2e588298
commit a1184c8e95
22 changed files with 372 additions and 156 deletions

View File

@@ -147,4 +147,15 @@ int shell_mem_info(int argc, char *argv[])
printf("sys mem:\ntotal:%dB\nfree:%dB\n", total, free);
return 0;
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), free, shell_mem_info, free command);
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), free, shell_mem_info, free command);
int shell_sys_info(int argc, char *argv[])
{
size_t total;
size_t free;
printf("sys:\n");
printf("\tcpu usage:%2.1f\n", sys_read_cpu_usage() / 10.0f);
return 0;
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), sys, shell_sys_info, sys command);

View File

@@ -55,8 +55,8 @@ add_custom_target(
c_dump ALL
COMMAND
${CMAKE_OBJCOPY} -O binary -S libc.so libc.bin
COMMAND
${CMAKE_COMMAND} -E copy libc.bin ${CMAKE_SOURCE_DIR}/build/output/cpio/libc
# COMMAND
# ${CMAKE_COMMAND} -E copy libc.bin ${CMAKE_SOURCE_DIR}/build/output/cpio/libc
# COMMAND
# cp libc.so ${CMAKE_SOURCE_DIR}/build/output/libc.so
# COMMAND

View File

@@ -12,6 +12,7 @@ typedef struct sys_info
typedef struct sys_info2
{
umword_t resv_dtbo;
umword_t cpu_usage_cur; //!< 当前cpu占用率
} sys_info2_t;
#define SYS_FLAGS_MAP_CPIO_FS 0x01
@@ -43,3 +44,9 @@ static inline umword_t sys_read_dtbo(void)
sys_read_info2(SYS_PROT, &info, 0);
return info.resv_dtbo;
}
static inline umword_t sys_read_cpu_usage(void)
{
sys_info2_t info;
sys_read_info2(SYS_PROT, &info, 0);
return info.cpu_usage_cur;
}

View File

@@ -64,6 +64,7 @@ msg_tag_t sys_read_info2(obj_handler_t obj, sys_info2_t *info, umword_t flags)
if (info)
{
info->resv_dtbo = r1;
info->cpu_usage_cur = r2;
}
return msg_tag_init(r0);

View File

@@ -32,8 +32,11 @@ typedef struct meta
int rpc_meta_init(obj_handler_t th, obj_handler_t *ret_ipc_hd);
void meta_unreg_svr_obj_raw(meta_t *meta, umword_t prot);
void meta_unreg_svr_obj(umword_t prot);
rpc_svr_obj_t *meta_find_svr_obj(umword_t prot);
int meta_reg_svr_obj(rpc_svr_obj_t *svr_obj, umword_t prot);
int meta_reg_svr_obj_raw(meta_t *meta, rpc_svr_obj_t *svr_obj, umword_t prot);
int rpc_creaite_bind_ipc(obj_handler_t th, void *obj, obj_handler_t *ipc_hd);
void rpc_loop(void);
#if 0
int rpc_mtd_loop(void);
#endif

View File

@@ -140,7 +140,7 @@ int app_load(const char *name, uenv_t *cur_env, pid_t *pid,
#endif
int type;
umword_t addr;
int ret;
int ret = 0;
#if IS_ENABLED(CONFIG_CPIO_SUPPORT)
ret = cpio_find_file((umword_t)sys_info.bootfs_start_addr, (umword_t)(-1), name, NULL, &type, &addr);

View File

@@ -6,9 +6,12 @@
#include <u_rpc_svr.h>
#include <u_rpc_buf.h>
#include <u_hd_man.h>
#include <rpc_prot.h>
#include <string.h>
#include <errno.h>
#define MAGIC_NS_USERPID 0xbabababa
int fast_ipc_setsp(int i, void *stack);
#define FAST_IPC_MAIN_STACK_SIZE 512
@@ -57,6 +60,16 @@ static msg_tag_t process_ipc(int j, umword_t obj, long tag)
ret_tag = msg_tag_init4(0, 0, 0, -EACCES);
goto end;
}
if (svr_obj == (void *)MAGIC_NS_USERPID)
{
/*获取ns的user id*/
svr_obj = meta_find_svr_obj(NS_PROT);
}
if (svr_obj == NULL)
{
ret_tag = msg_tag_init4(0, 0, 0, -EACCES);
goto end;
}
if (svr_obj->dispatch)
{
ret_tag = svr_obj->dispatch(svr_obj, msg_tag_init(tag), msg);

View File

@@ -48,6 +48,10 @@ static rpc_svr_obj_t *meta_svr_find(meta_t *meta, umword_t prot)
pthread_spin_unlock(&meta->lock);
return NULL;
}
rpc_svr_obj_t *meta_find_svr_obj(umword_t prot)
{
return meta_svr_find(&meta_obj, prot);
}
void meta_unreg_svr_obj_raw(meta_t *meta, umword_t prot)
{
pthread_spin_lock(&meta->lock);
@@ -82,6 +86,7 @@ int meta_reg_svr_obj_raw(meta_t *meta, rpc_svr_obj_t *svr_obj, umword_t prot)
pthread_spin_unlock(&meta->lock);
return i < META_PROT_NR;
}
int meta_reg_svr_obj(rpc_svr_obj_t *svr_obj, umword_t prot)
{
return meta_reg_svr_obj_raw(&meta_obj, svr_obj, prot);
@@ -185,14 +190,18 @@ void rpc_loop(void)
continue;
}
svr_obj = (rpc_svr_obj_t *)obj;
if (svr_obj->dispatch)
if (svr_obj != NULL && svr_obj->dispatch)
{
tag = svr_obj->dispatch(svr_obj, tag, msg);
}
else
{
tag = msg_tag_init4(0, 0, 0, -ENOSYS);
}
thread_ipc_reply(tag, ipc_timeout_create2(0, 0));
}
}
#if 0
#define RPC_MTD_TH_STACK_SIZE (1024 + 256)
typedef struct mtd_params
{
@@ -342,3 +351,4 @@ int rpc_mtd_loop(void)
}
return 0;
}
#endif