From d02ebfcc4112181c3e3773ff1f6d060823504435 Mon Sep 17 00:00:00 2001 From: ZouTao Date: Thu, 25 May 2023 10:39:37 +0800 Subject: [PATCH 1/4] tasktop: add performance test --- source/tools/detect/sched/tasktop/tasktop.c | 14 +-- .../detect/sched/tasktop/tasktopSelftest/test | Bin 13472 -> 13272 bytes .../sched/tasktop/tasktopSelftest/test.c | 5 +- .../sched/tasktop/tasktopSelftest/test.md | 102 +++++++++++++++--- 4 files changed, 96 insertions(+), 25 deletions(-) diff --git a/source/tools/detect/sched/tasktop/tasktop.c b/source/tools/detect/sched/tasktop/tasktop.c index 54909cf6..37a92cec 100644 --- a/source/tools/detect/sched/tasktop/tasktop.c +++ b/source/tools/detect/sched/tasktop/tasktop.c @@ -243,10 +243,7 @@ static int read_sched_delay(struct sys_record_t* sys_rec) { &ph, &ph, &ph, &ph, &ph, &delay, &ph); int cpu_id = atoi(name + 3); - // #ifdef DEBUG - // fprintf(stderr, "cpu_id = %d delay=%llu\n", cpu_id, - // delay); - // #endif + sys_rec->percpu_sched_delay[cpu_id] = delay - prev_delay[cpu_id]; prev_delay[cpu_id] = delay; } else { @@ -271,7 +268,8 @@ static int read_cgroup_throttle() { continue; } char stat_path[BUF_SIZE]; - snprintf(stat_path, BUF_SIZE, "%s/%s/cpu.stat", CGROUP_PATH, dir->d_name); + snprintf(stat_path, BUF_SIZE, "%s/%s/cpu.stat", CGROUP_PATH, + dir->d_name); cgroup_cpu_stat_t stat; @@ -343,8 +341,8 @@ static int read_stat(struct sys_cputime_t* prev_sys, // int all_time = (sysconf(_SC_NPROCESSORS_ONLN) * env.delay * // sysconf(_SC_CLK_TCK)); - /* all_time can't not calculate by delay * ticks * online-cpu-num, - * because there is error between process waked up and running, when + /* all_time can't calculated by delay * ticks * online-cpu-num, + * because there is an error between process waked up and running, when * sched delay occur , the sum of cpu rates more than 100%. */ sys_rec->cpu[i].usr = @@ -572,7 +570,6 @@ static void sort_records(struct record_t* rec, int proc_num, } static char* ts2str(time_t ts, char* buf, int size) { - // __builtin_memset(buf, 0, size; struct tm* t = gmtime(&ts); strftime(buf, size, "%Y-%m-%d %H:%M:%S", t); return buf; @@ -616,7 +613,6 @@ static char* second2str(time_t ts, char* buf, int size) { } static void output(struct record_t* rec, int proc_num, FILE* dest) { - // system("clear"); struct task_record_t** records = rec->tasks; struct sys_record_t* sys = &rec->sys; struct proc_fork_info_t* info = &(sys->most_fork_info); diff --git a/source/tools/detect/sched/tasktop/tasktopSelftest/test b/source/tools/detect/sched/tasktop/tasktopSelftest/test index f4347c84649c7e2b14144cb6928d37b82339bc7e..8c0c54324813df8bcaf0ae536fb6be1b1dc57831 100755 GIT binary patch literal 13272 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 3) { printf("usage: test [bind|fork|clone|multi_thread]\n"); return -1; } @@ -137,5 +138,7 @@ int main(int argc, char **argv) { } else if (!strcmp(argv[1], "multi_thread")) { sleep(10); run_multithread(); + } else if (!strcmp(argv[1], "sleep")) { + create_process(atoi(argv[2])); } } \ No newline at end of file diff --git a/source/tools/detect/sched/tasktop/tasktopSelftest/test.md b/source/tools/detect/sched/tasktop/tasktopSelftest/test.md index 6d66d184..b973462e 100644 --- a/source/tools/detect/sched/tasktop/tasktopSelftest/test.md +++ b/source/tools/detect/sched/tasktop/tasktopSelftest/test.md @@ -1,17 +1,52 @@ -# 1 Tasktop功能测试 -## 1.0 低负载状态 +# Tasktop 测试文档 + +## 1. 测试环境 + + $lscpu + Architecture: x86_64 + CPU op-mode(s): 32-bit, 64-bit + Byte Order: Little Endian + CPU(s): 4 + On-line CPU(s) list: 0-3 + Thread(s) per core: 2 + Core(s) per socket: 1 + Socket(s): 2 + NUMA node(s): 1 + Vendor ID: GenuineIntel + CPU family: 6 + Model: 79 + Model name: Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz + Stepping: 1 + CPU MHz: 2494.224 + BogoMIPS: 4988.44 + Hypervisor vendor: KVM + Virtualization type: full + L1d cache: 32K + L1i cache: 32K + L2 cache: 256K + L3 cache: 40960K + NUMA node0 CPU(s): 0-3 + Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt + +## 2. Tasktop功能测试 + +### 2.0 低负载状态 $uptime 11:13:52 up 783 days, 20:59, 0 users, load average: 1.28, 10.09, 32.79 -## 1.1 多线程、多进程场景 +### 2.1 多线程、多进程场景 + 由于多线程或者多进程导致cpu资源不足,大量task在队列中无法被调度导致的R状态冲高 -### 1.1.1 测试方法 + +#### 2.1.1 测试方法 + 通过stress工具 启动64个进程进行计算 stress -c 64 -### 1.1.2 测试结果 +#### 2.1.2 测试结果 + 2023-05-24 02:15:36 UTIL&LOAD usr sys iowait load1 R D fork : proc @@ -33,15 +68,20 @@ 观察到load1迅速冲高,伴随系统以及per-cpu的cpu利用率打满,cpu时间集中于用户态,per-cpu的调度延迟达到50s。 -## 1.2 cpu绑核场景 +### 2.2 cpu绑核场景 + 由于配置不当,导致大量进程堆积在少部分CPU核上导致的R状态进程数冲高 -### 1.2.1 测试方法 + +#### 2.2.1 测试方法 + 启动64个计算进程 绑定到cpu0上 cd tasktopSelftest make clean;make ./test bind -### 1.2.2 测试结果 + +#### 2.2.2 测试结果 + 2023-05-24 02:49:31 UTIL&LOAD usr sys iowait load1 R D fork : proc @@ -61,15 +101,20 @@ (test) 48449 48433 1684896441 130 1.7 0.0 1.7 (test) 48451 48433 1684896441 130 1.7 0.0 1.7 观察到load1冲高,伴随有R状态进程数增多,但系统cpu利用率不高,cpu-0的利用率打满,cpu-0的调度延迟达到190s -## 1.3 大量fork场景 + +### 2.3 大量fork场景 + 由于loadavg的采样是周期性的,可能存在大量短task在采样时出现但是无法被top等工具捕捉等情况 -### 1.3.1 测试方法 + +#### 2.3.1 测试方法 + 主进程每1ms周期性的进行fork出128个进程 每个进程执行10w次自增运算后退出 cd tasktopSelftest make clean;make ./test fork -### 1.3.2 测试结果 + +#### 2.3.2 测试结果 2023-05-24 03:42:18 UTIL&LOAD @@ -93,9 +138,13 @@ (dfget) 56945 1 1684899541 197 0.3 0.0 0.3 观察到load增高,同时CPU利用率也跑满,存在较多R进程但是没有被top捕捉到。此时fork增量激增,fork调用次数最多的进程为test,同时test进程的sys利用率较高。 -## 1.4 cgroup限流场景 + +### 2.4 cgroup限流场景 + 与cpu核绑定类似,通过cgroup限制了cpu带宽导致task堆积在就绪队列 -### 1.4.1 测试方法 + +#### 2.4.1 测试方法 + 创建一个cgroup 限定cgroup的cpu额度 启动一个进程并将task的pid加入cgroup的tasks中 之后该进程创建128个线程执行计算任务 # 创建cgroup 设置限流30% 使用cpuset.cpus=0-3 @@ -107,7 +156,7 @@ # run test ./test multi_thread -### 1.4.2 测试结果 +#### 2.4.2 测试结果 [/sys/fs/cgroup/cpu/aegis/cpu.stat] nr_periods=4 nr_throttled=0 throttled_time=0 nr_burst=0 burst_time=0 [/sys/fs/cgroup/cpu/docker/cpu.stat] nr_periods=0 nr_throttled=0 throttled_time=0 nr_burst=0 burst_time=0 @@ -139,4 +188,27 @@ (logagent-collecS 2423 2347 1684908951 83 0.3 0.0 0.3 (argusagent) 3096 1 1684908962 7490 0.0 0.3 0.3 -可以观察到此时虽然**实际负载**很高,大量task由于限流处于R状态,但是由于cgroup机制task并不位于就绪队列中,因此R状态数量指标不准确导致load1计算不准(load1无法准确体现出系统的负载情况)。但是在cgroup限流信息中可以看到stress_cg中**出现了大量的限流**,并且**per-cpu的调度延迟很高**,一定程度体现了cpu就绪队列中存在task堆积。 \ No newline at end of file +可以观察到此时虽然**实际负载**很高,大量task由于限流处于R状态,但是由于cgroup机制task并不位于就绪队列中,因此R状态数量指标不准确导致load1计算不准(load1无法准确体现出系统的负载情况)。但是在cgroup限流信息中可以看到stress_cg中**出现了大量的限流**,并且**per-cpu的调度延迟很高**,一定程度体现了cpu就绪队列中存在task堆积。 + +## 3. Tasktop性能测试 + +tasktop在运行时会对/proc文件系统进行遍历,采集相关信息,大量进程下可能会影响业务,因此对tasktop在不同进程数的场景下进行性能测试。 + +### 3.1 测试方法 + +创建N个进程,并让这N个进程进入sleep状态,不占用CPU资源,只增加proc文件数量。 + +### 3.2 测试结果 + +| ProcesNum | CPU util | +| :---------: | :---------: | +| 147 | 0.3% | +| 1155 | 1.0% | +| 2157 | 1.9-2.0% | +| 4147 | 3.7-4.7% | +| 8152 | 8-11% | +| 12198 | 15.7-18% | +| 15161 | 18-21% | + + +在存在20000个进程proc文件情况下,tasktop的整体cpu资源消耗在单核的30%左右。 -- Gitee From 1237a6befd805168090839cf3acab702f75af0c8 Mon Sep 17 00:00:00 2001 From: ZouTao Date: Thu, 25 May 2023 10:40:31 +0800 Subject: [PATCH 2/4] tasktop: fix test document --- source/tools/detect/sched/tasktop/tasktopSelftest/test.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/tools/detect/sched/tasktop/tasktopSelftest/test.md b/source/tools/detect/sched/tasktop/tasktopSelftest/test.md index b973462e..a144f1e4 100644 --- a/source/tools/detect/sched/tasktop/tasktopSelftest/test.md +++ b/source/tools/detect/sched/tasktop/tasktopSelftest/test.md @@ -211,4 +211,4 @@ tasktop在运行时会对/proc文件系统进行遍历,采集相关信息, | 15161 | 18-21% | -在存在20000个进程proc文件情况下,tasktop的整体cpu资源消耗在单核的30%左右。 +在存在15000个进程proc文件情况下,tasktop的整体cpu资源消耗在单核的20%左右。 -- Gitee From a14174d19398f11d0095e33e6c21dfb99a2dd1f4 Mon Sep 17 00:00:00 2001 From: ZouTao Date: Thu, 25 May 2023 10:41:46 +0800 Subject: [PATCH 3/4] tasktop: fix test document --- source/tools/detect/sched/tasktop/tasktopSelftest/test.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/tools/detect/sched/tasktop/tasktopSelftest/test.md b/source/tools/detect/sched/tasktop/tasktopSelftest/test.md index a144f1e4..b5d7cb4b 100644 --- a/source/tools/detect/sched/tasktop/tasktopSelftest/test.md +++ b/source/tools/detect/sched/tasktop/tasktopSelftest/test.md @@ -200,7 +200,7 @@ tasktop在运行时会对/proc文件系统进行遍历,采集相关信息, ### 3.2 测试结果 -| ProcesNum | CPU util | +| Process Number | CPU Utilization | | :---------: | :---------: | | 147 | 0.3% | | 1155 | 1.0% | -- Gitee From 2944aa62afcd5822a908793f3813173f83180db0 Mon Sep 17 00:00:00 2001 From: ZouTao Date: Thu, 25 May 2023 10:51:50 +0800 Subject: [PATCH 4/4] fix test document --- source/tools/detect/sched/tasktop/tasktopSelftest/test.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/tools/detect/sched/tasktop/tasktopSelftest/test.md b/source/tools/detect/sched/tasktop/tasktopSelftest/test.md index b5d7cb4b..408535dd 100644 --- a/source/tools/detect/sched/tasktop/tasktopSelftest/test.md +++ b/source/tools/detect/sched/tasktop/tasktopSelftest/test.md @@ -209,6 +209,6 @@ tasktop在运行时会对/proc文件系统进行遍历,采集相关信息, | 8152 | 8-11% | | 12198 | 15.7-18% | | 15161 | 18-21% | - +| 20173 | 26.9-31.6% | -在存在15000个进程proc文件情况下,tasktop的整体cpu资源消耗在单核的20%左右。 +在存在20000个进程proc文件情况下,tasktop的整体cpu资源消耗在单核的30%左右。 -- Gitee