diff --git a/inc/bench.h b/inc/bench.h index 2e9d9951..52874d66 100644 --- a/inc/bench.h +++ b/inc/bench.h @@ -1154,6 +1154,8 @@ int32_t benchParseSingleOpt(int32_t key, char* arg); void printErrCmdCodeStr(char *cmd, int32_t code, TAOS_RES *res); +int32_t benchGetTotalMemory(int64_t *totalKB); + #ifndef LINUX int32_t benchParseArgsNoArgp(int argc, char* argv[]); #endif diff --git a/src/benchInsert.c b/src/benchInsert.c index 4a3d3be1..e2f9853d 100644 --- a/src/benchInsert.c +++ b/src/benchInsert.c @@ -493,6 +493,31 @@ int32_t getVgroupsOfDb(SBenchConn *conn, SDataBase *database) { } #endif // TD_VER_COMPATIBLE_3_0_0_0 +int32_t toolsGetDefaultVGroups() { + int32_t cores = toolsGetNumberOfCores(); + if (cores < 3 ) { + return 1; + } + + int64_t MemKB = 0; + benchGetTotalMemory(&MemKB); + + infoPrint("check local machine CPU: %d Memory:%d MB \n", cores, (int32_t)(MemKB/1024)); + if (MemKB <= 2*1024*1024) { // 2G + return 1; + } else if (MemKB <= 4*1024*1024) { // 4G + return 2; + } else if (MemKB <= 8*1024*1024) { // 8G + return 3; + } else if (MemKB <= 16*1024*1024) { // 16G + return 4; + } else if (MemKB <= 32*1024*1024) { // 32G + return 5; + } else { + return cores / 2; + } +} + int geneDbCreateCmd(SDataBase *database, char *command, int remainVnodes) { int dataLen = 0; int n; diff --git a/src/benchUtil.c b/src/benchUtil.c index 156e6a7f..5ebe0913 100644 --- a/src/benchUtil.c +++ b/src/benchUtil.c @@ -1253,3 +1253,22 @@ FORCE_INLINE void printErrCmdCodeStr(char *cmd, int32_t code, TAOS_RES *res) { taos_free_result(res); } +int32_t benchGetTotalMemory(int64_t *totalKB) { +#ifdef WINDOWS + MEMORYSTATUSEX memsStat; + memsStat.dwLength = sizeof(memsStat); + if (!GlobalMemoryStatusEx(&memsStat)) { + return -1; + } + + *totalKB = memsStat.ullTotalPhys / 1024; + return 0; +#elif defined(_TD_DARWIN_64) + *totalKB = 0; + return 0; +#else + int64_t tsPageSizeKB = sysconf(_SC_PAGESIZE) / 1024; + *totalKB = (int64_t)(sysconf(_SC_PHYS_PAGES) * tsPageSizeKB); + return 0; +#endif +}