0

我想使用stress-ng 来模拟工作量。最终目标是能够为系统加载不同百分比的不同任务。例如 50% CPU、25% IO 等。

所以我从这个命令开始......

sudo stress-ng -v --taskset 1 --sched fifo --sched-prio 80 --perf --all 2 --ioport 1 --ioport-ops 1000000 --matrix 1  -t 60s
stress-ng: debug: [2077] 2 processors online, 2 processors configured
stress-ng: debug: [2077] sched: setting scheduler class 'fifo', priority 80
stress-ng: info:  [2077] dispatching hogs: 1 ioport, 1 matrix
stress-ng: debug: [2077] cache allocate: default cache size: 4096K
stress-ng: debug: [2077] starting stressors
stress-ng: debug: [2077] 2 stressors spawned
stress-ng: debug: [2078] stress-ng-ioport: started [2078] (instance 0)
stress-ng: debug: [2079] stress-ng-matrix: started [2079] (instance 0)

但是当我监控进程 2078 和 2079 时,我注意到只有进程 2078 正在加载 CPU。 图 1

当我交换 2 个压力源的顺序时...

sudo stress-ng -v --taskset 1 --sched fifo --sched-prio 80 --perf --all 2 --matrix 1 --ioport 1 --ioport-ops 1000000   -t 60s
stress-ng: debug: [2084] 2 processors online, 2 processors configured
stress-ng: debug: [2084] sched: setting scheduler class 'fifo', priority 80
stress-ng: info:  [2084] dispatching hogs: 1 matrix, 1 ioport
stress-ng: debug: [2084] cache allocate: default cache size: 4096K
stress-ng: debug: [2084] starting stressors
stress-ng: debug: [2084] 2 stressors spawned
stress-ng: debug: [2085] stress-ng-matrix: started [2085] (instance 0)
stress-ng: debug: [2086] stress-ng-ioport: started [2086] (instance 0)
stress-ng: debug: [2085] stress-ng-matrix using method 'all' (x by y)

只有进程 2085 正在加载 CPU。 图 2

这表明 2 个压力源不会并行运行。

此外,如何让压力源并行运行,以分配 2 个任务?

是否有更好的开源工具来模拟工作量?

谢谢!

4

1 回答 1

0

stress-ng 压力源旨在最大限度地利用资源,因此指定 25% I/O 并不容易,因为必须估计 100% I/O 是多少,然后适当缩减。由于 I/O 速率会随时间变化(因为它最终取决于硬件特定变量),因此需要有一个二阶差分反馈回路才能使其正常工作,这超出了 stress-ng 的范围能够做到。

另一种看待这个问题的方法是用 CPU 的数量来衡量。假设您的系统上有 4 个 CPU,那么 2 个 CPU 用于 CPU 工作 = 50%,1 个 CPU 用于 I/O = 25%,所以运行:

stress-ng --cpu 2 --iomix 1

或在 8 CPU 系统上,您可以使用其他类似的东西:

stress-ng --matrix 4 --hdd 2
于 2019-11-16T12:08:18.827 回答