From 57c95edde604f07122c019b82bb2de72d574203a Mon Sep 17 00:00:00 2001 From: queyanwen Date: Mon, 1 Apr 2024 17:02:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3CPU=E6=A0=B8=E8=B6=85?= =?UTF-8?q?=E8=BF=87248=E6=97=B6=E6=88=96numa=E8=8A=82=E7=82=B9=E8=B6=85?= =?UTF-8?q?=E8=BF=8716=E4=B8=AA=E6=97=B6=E5=8F=AF=E8=83=BD=E5=87=BA?= =?UTF-8?q?=E7=8E=B0coredump=E9=97=AE=E9=A2=98=EF=BC=8C=E5=B9=B6=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E5=86=85=E5=AD=98=E6=93=8D=E4=BD=9C=E5=AE=89=E5=85=A8?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/inc/pwrdata.h | 3 ++- common/inc/pwrerr.h | 2 +- common/src/pwrbuffer.c | 2 +- pwrapic/src/pwrcpu.c | 2 +- pwrapic/test/demo_main.c | 2 +- pwrapis/inc/common.h | 3 ++- pwrapis/src/config.c | 8 ++++---- pwrapis/src/cpuservice.c | 24 ++++++++++++++---------- pwrapis/src/server.c | 7 ++++--- pwrapis/src/utils.c | 14 +++++++++++--- 10 files changed, 41 insertions(+), 26 deletions(-) diff --git a/common/inc/pwrdata.h b/common/inc/pwrdata.h index d26feaa..e3c396b 100644 --- a/common/inc/pwrdata.h +++ b/common/inc/pwrdata.h @@ -23,7 +23,8 @@ #define PWR_MAX_NAME_LEN 128 #define PWR_MAX_VALUE_LEN 32 #define PWR_MAX_CPU_LIST_LEN 248 -#define PWR_MAX_NUMA_NODE_NUM 16 +#define PWR_MAX_CPUFREQ_POLICY_NUM 4096 +#define PWR_MAX_NUMA_NODE_NUM 128 #define PWR_MAX_GOV_NUM 16 #define PWR_MAX_STRING_LEN 1000 #define PWR_MAX_TIME_LEN 25 diff --git a/common/inc/pwrerr.h b/common/inc/pwrerr.h index b9f5b14..c4431e6 100644 --- a/common/inc/pwrerr.h +++ b/common/inc/pwrerr.h @@ -36,11 +36,11 @@ enum PWR_RtnCode { PWR_ERR_ATTR_NOT_EXISTS, PWR_ERR_NOT_REGISTED = 100, PWR_ERR_NOT_AUTHED, + PWR_ERR_OVER_MAX_CONNECTION, PWR_ERR_WATT_SCHED_NOT_SURPPORTED, PWR_ERR_WATT_SCHED_NEVER_ENABLED, PWR_ERR_SMART_GRID_NOT_SURPPORTED, PWR_ERR_SMART_GRID_GOV_DISABLED, - PWR_ERR_OVER_MAX_CONNECTION, PWR_ERR_DISCONNECTED = 300, PWR_ERR_WRONG_RESPONSE_FROM_SERVER, PWR_ERR_ANSWER_LONGER_THAN_SIZE, diff --git a/common/src/pwrbuffer.c b/common/src/pwrbuffer.c index 75dfe74..0bf4293 100644 --- a/common/src/pwrbuffer.c +++ b/common/src/pwrbuffer.c @@ -18,7 +18,7 @@ #include #include "pwrerr.h" -#define WAITING_RESULT_TIME_OUT 2 // second +#define WAITING_RESULT_TIME_OUT 30 // second #define USEC_TO_NSEC 1000 // queue private static void DeleteFromHead(PwrMsgBuffer *smb) diff --git a/pwrapic/src/pwrcpu.c b/pwrapic/src/pwrcpu.c index 3e076d9..a587696 100644 --- a/pwrapic/src/pwrcpu.c +++ b/pwrapic/src/pwrcpu.c @@ -195,7 +195,7 @@ int SetCpuFreqGovernor(const char gov[], uint32_t size) int GetCpuCurFreq(PWR_CPU_CurFreq curFreq[], uint32_t *num, int spec) { - if ((*num) > PWR_MAX_INPUT_NUM) { + if ((*num) > PWR_MAX_CPUFREQ_POLICY_NUM) { PwrLog(ERROR, "GetCpuCurFreq failed. ret: %d", PWR_ERR_INPUT_OVERSIZE); return PWR_ERR_INPUT_OVERSIZE; } diff --git a/pwrapic/test/demo_main.c b/pwrapic/test/demo_main.c index dcb6a35..dd571af 100644 --- a/pwrapic/test/demo_main.c +++ b/pwrapic/test/demo_main.c @@ -22,7 +22,7 @@ #define MAIN_LOOP_INTERVAL 5 #define TEST_FREQ 2400 -#define TEST_CORE_NUM 128 +#define TEST_CORE_NUM 4096 #define AVG_LEN_PER_CORE 5 #define TEST_CPU_DMA_LATENCY 2000 #define TASK_INTERVAL 1000 diff --git a/pwrapis/inc/common.h b/pwrapis/inc/common.h index 84756c6..73d2390 100644 --- a/pwrapis/inc/common.h +++ b/pwrapis/inc/common.h @@ -58,6 +58,7 @@ #define MD_NM_SVR_TASK "TASK_SERVICE" #define MD_NM_SVR_PROC "PROC_SERVICE" #define MD_NM_CRED "CREDENTIALS" +#define MD_NM_OTHS "OTHERS" // Define configuration section name #define CFG_NM_PST "persist" @@ -268,7 +269,7 @@ enum RunStatus { #define INVALID_FD (-1) #define INVALID_INDEX (-1) -#define MAX_CLIENT_NUM 3 +#define MAX_CLIENT_NUM 10 #define MAX_USER_NUM 10 #define THOUSAND 1000 diff --git a/pwrapis/src/config.c b/pwrapis/src/config.c index 0a7e464..581b717 100644 --- a/pwrapis/src/config.c +++ b/pwrapis/src/config.c @@ -124,7 +124,7 @@ static void DoReleaseWhiteList(char** whiteList) return; } - while (whiteList[i] != NULL) { + while (i < MAX_USER_NUM && whiteList[i] != NULL) { free(whiteList[i]); whiteList[i] = NULL; i++; @@ -166,7 +166,7 @@ static char** UpdateRoleArrayAction(const char *value) } int userNum = MAX_USER_NUM; - char** tempRoleArray = calloc(userNum, sizeof(char *)); + char** tempRoleArray = calloc(MAX_USER_NUM, sizeof(char *)); if (!tempRoleArray) { Logger(ERROR, MD_NM_CFG, "Calloc failed."); return NULL; @@ -177,13 +177,13 @@ static char** UpdateRoleArrayAction(const char *value) return NULL; } - char** users = calloc(userNum, sizeof(char *)); + char** users = calloc(MAX_USER_NUM, sizeof(char *)); if (!users) { free(pbuff); free(tempRoleArray); return NULL; } - bzero(users, userNum * sizeof(char *)); + bzero(users, MAX_USER_NUM * sizeof(char *)); int idx = 0; for (int i = 0; i < userNum; i++) { if (!tempRoleArray[i]) { diff --git a/pwrapis/src/cpuservice.c b/pwrapis/src/cpuservice.c index ffbd933..9e4dd2d 100644 --- a/pwrapis/src/cpuservice.c +++ b/pwrapis/src/cpuservice.c @@ -77,8 +77,10 @@ int CpuInfoCopy(char *att, char *value, PWR_CPU_Info *rstData) DeleteSubstr(att, "NUMA node"); DeleteSubstr(att, " CPU(s)"); int j = atoi(att); - rstData->numa[j].nodeNo = j; - StrCopy(rstData->numa[j].cpuList, value, PWR_MAX_CPU_LIST_LEN); + if (j < PWR_MAX_NUMA_NODE_NUM) { + rstData->numa[j].nodeNo = j; + StrCopy(rstData->numa[j].cpuList, value, PWR_MAX_CPU_LIST_LEN); + } break; case PWR_CPU_NUMBER: if (strlen(att) == PWR_CPUS_WIDTH) { @@ -311,7 +313,7 @@ int GetPolicys(char (*policys)[PWR_MAX_ELEMENT_NAME_LEN], int *poNum) char buf[PWR_MAX_NAME_LEN]; bzero(buf, PWR_MAX_NAME_LEN); *poNum = 0; - while ((ent = readdir(dir)) != NULL) { + while ((*poNum) < PWR_MAX_CPUFREQ_POLICY_NUM && (ent = readdir(dir)) != NULL) { if (strlen(ent->d_name) <= len || strncmp(ent->d_name, targetItem, len) != 0) { continue; } @@ -357,7 +359,7 @@ static void MergeDuplicatePolicys(PWR_CPU_CurFreq *target, int *len) */ static int CheckPolicys(PWR_CPU_CurFreq *target, int num) { - char policys[PWR_MAX_CPU_LIST_LEN][PWR_MAX_ELEMENT_NAME_LEN] = {0}; + char policys[PWR_MAX_CPUFREQ_POLICY_NUM][PWR_MAX_ELEMENT_NAME_LEN] = {0}; int poNum, i; if (GetPolicys(policys, &poNum) == 0) { int policysId[poNum]; @@ -581,6 +583,7 @@ static int FreqDomainRead(char *buf, char (*policys)[PWR_MAX_ELEMENT_NAME_LEN], char temp[PWR_MAX_ELEMENT_NAME_LEN] = {0}; const char s1[] = "/sys/devices/system/cpu/cpufreq/"; const char s2[] = "/affected_cpus"; + int *pcyId = NULL; for (int i = 0; i < domainNum; i++) { StrCopy(domainInfo, s1, PWR_MAX_NAME_LEN); strcat(domainInfo, policys[i]); @@ -594,7 +597,8 @@ static int FreqDomainRead(char *buf, char (*policys)[PWR_MAX_ELEMENT_NAME_LEN], // convert policys to int StrCopy(temp, policys[i], PWR_MAX_ELEMENT_NAME_LEN); DeleteSubstr(temp, "policy"); - buf[i * step] = atoi(temp); + pcyId = (int*)(buf + i * step); + *pcyId = atoi(temp); StrCopy(buf + i * step + sizeof(int), domainbuf, step - sizeof(int)); } return 0; @@ -665,7 +669,7 @@ static int CpuFreqRangeRead(PWR_CPU_FreqRange *cpuFreqRange) static int FreqRangeSet(PWR_CPU_FreqRange *rstData) { - char policys[PWR_MAX_CPU_LIST_LEN][PWR_MAX_ELEMENT_NAME_LEN] = {0}; + char policys[PWR_MAX_CPUFREQ_POLICY_NUM][PWR_MAX_ELEMENT_NAME_LEN] = {0}; int ret = -1; int poNum, i; if (GetPolicys(policys, &poNum) != 0) { @@ -724,7 +728,7 @@ static int FreqRangeSet(PWR_CPU_FreqRange *rstData) static int GovIsActive(const char *gov) { - char policys[PWR_MAX_CPU_LIST_LEN][PWR_MAX_ELEMENT_NAME_LEN] = {0}; + char policys[PWR_MAX_CPUFREQ_POLICY_NUM][PWR_MAX_ELEMENT_NAME_LEN] = {0}; int poNum = 0; GetPolicys(policys, &poNum); @@ -979,7 +983,7 @@ int SetGovernorForAllPcy(const char *gov) if (!gov) { return PWR_ERR_NULL_POINTER; } - char policys[PWR_MAX_CPU_LIST_LEN][PWR_MAX_ELEMENT_NAME_LEN] = {0}; + char policys[PWR_MAX_CPUFREQ_POLICY_NUM][PWR_MAX_ELEMENT_NAME_LEN] = {0}; int poNum = 0; GetPolicys(policys, &poNum); return GovernorSet(gov, policys, &poNum); @@ -1094,7 +1098,7 @@ void SetCpuFreqGovAttr(PwrMsg *req) void GetCpuFreq(PwrMsg *req) { - char policys[PWR_MAX_CPU_LIST_LEN][PWR_MAX_ELEMENT_NAME_LEN] = {0}; + char policys[PWR_MAX_CPUFREQ_POLICY_NUM][PWR_MAX_ELEMENT_NAME_LEN] = {0}; int poNum; int rspCode = 0; if (req->head.dataLen > 0 && req->data != NULL) { @@ -1166,7 +1170,7 @@ void SetCpuFreq(PwrMsg *req) void GetCpuFreqAbility(PwrMsg *req) { int coreNum = GetCpuCoreNumber(); - char policys[PWR_MAX_CPU_LIST_LEN][PWR_MAX_ELEMENT_NAME_LEN] = {0}; + char policys[PWR_MAX_CPUFREQ_POLICY_NUM][PWR_MAX_ELEMENT_NAME_LEN] = {0}; int poNum; if (GetPolicys(policys, &poNum) != PWR_SUCCESS) { int rspCode = PWR_ERR_COMMON; diff --git a/pwrapis/src/server.c b/pwrapis/src/server.c index 1a1767b..32e6972 100644 --- a/pwrapis/src/server.c +++ b/pwrapis/src/server.c @@ -347,13 +347,14 @@ static void SendMsgToClientAction(int dstFd, PwrMsg *msg) { static char data[MAX_DATA_SIZE]; size_t len = sizeof(PwrMsg) + msg->head.dataLen; + memcpy(data, msg, sizeof(PwrMsg)); if (len <= MAX_DATA_SIZE) { - memcpy(data, msg, sizeof(PwrMsg)); - memcpy(data + sizeof(PwrMsg), msg->data, msg->head.dataLen); + if (msg->data && msg->head.dataLen > 0) { + memcpy(data + sizeof(PwrMsg), msg->data, msg->head.dataLen); + } WriteMsg(data, len, dstFd); } else { - memcpy(data, msg, sizeof(PwrMsg)); memcpy(data + sizeof(PwrMsg), msg->data, MAX_DATA_SIZE - sizeof(PwrMsg)); WriteMsg(data, MAX_DATA_SIZE, dstFd); size_t datasent = MAX_DATA_SIZE - sizeof(PwrMsg); diff --git a/pwrapis/src/utils.c b/pwrapis/src/utils.c index 483f863..a33accd 100644 --- a/pwrapis/src/utils.c +++ b/pwrapis/src/utils.c @@ -15,6 +15,7 @@ #include "utils.h" #include "pwrerr.h" #include "pwrdata.h" +#include "log.h" #include #include @@ -30,6 +31,7 @@ #include #include #include +#include static struct timeval GetCurTv(void) { @@ -781,13 +783,13 @@ void LRtrim(char *str) size_t length = strlen(str); int head = 0; int tail = length - 1; - while (isspace(str[head])) { + while (head <= tail && isspace(str[head])) { head++; } - while (isspace(str[tail])) { + while (tail >= head && isspace(str[tail])) { tail--; } - int i; + int i = 0; for (i = 0; i <= tail - head; i++) { str[i] = str[head + i]; } @@ -945,9 +947,11 @@ int ReadFile(const char *strInfo, char *buf, int bufLen) int fd = open(realPath, O_RDONLY); if (fd == -1) { + Logger(ERROR, MD_NM_OTHS, "Open file[%s] failed. errno:%d, %s", strInfo, errno, strerror(errno)); return 1; } if (read(fd, buf, bufLen - 1) < 0) { + Logger(ERROR, MD_NM_OTHS, "Read file[%s] failed. errno:%d, %s", strInfo, errno, strerror(errno)); close(fd); return 1; } @@ -966,17 +970,21 @@ int WriteFile(const char *strInfo, const char *buf, int bufLen) } if (access(realPath, F_OK | R_OK | W_OK) != 0) { + Logger(ERROR, MD_NM_OTHS, "Access file[%s] failed. errno:%d, %s", strInfo, errno, strerror(errno)); return PWR_ERR_FILE_ACCESS_FAILED; } FILE *fp = fopen(realPath, "w+"); if (fp == NULL) { + Logger(ERROR, MD_NM_OTHS, "Open file[%s] failed. errno:%d, %s", strInfo, errno, strerror(errno)); return PWR_ERR_FILE_OPEN_FAILED; } if (fprintf(fp, "%s", buf) < 0) { + Logger(ERROR, MD_NM_OTHS, "Write file[%s] failed. errno:%d, %s", strInfo, errno, strerror(errno)); fclose(fp); return PWR_ERR_FILE_FPRINT_FAILED; } if (fflush(fp) != 0) { + Logger(ERROR, MD_NM_OTHS, "Fflush file[%s] failed. errno:%d, %s", strInfo, errno, strerror(errno)); fclose(fp); return PWR_ERR_FILE_FFLUSH_FAILED; } -- Gitee