使用 stress-ng 模拟工作负载

Using stress-ng to mimic workload

我想使用 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。 Image 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。 Image 2

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

我怎样才能让压力源运行并行,而且,按比例分配这两项任务?

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

谢谢!

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

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

stress-ng --cpu 2 --iomix 1

或者在 8 CPU 系统上,您可以执行其他操作,例如:

stress-ng --matrix 4 --hdd 2