Использование stress-ng для имитации рабочей нагрузки

Я хочу использовать stress-ng для имитации рабочей нагрузки. Конечная цель состоит в том, чтобы иметь возможность загружать систему разными процентами разных задач. Например, 50% ЦП, 25% ввода-вывода и т. д.

Итак, я начал с этой команды...

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 нагружает ЦП. Изображение 1

Когда я поменял местами два стрессора...

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 загружал ЦП. Изображение 2

Это говорит о том, что два стрессора не действуют параллельно.

Как я могу заставить стрессоры работать параллельно, более того, чтобы соразмерить 2 задачи?

Существуют ли более эффективные инструменты с открытым исходным кодом для имитации рабочей нагрузки?

Спасибо!


person Joe Yeung    schedule 15.11.2019    source источник


Ответы (1)


Стресс-факторы предназначены для максимального использования ресурсов, поэтому указать 25% операций ввода-вывода непросто, поскольку необходимо оценить, что такое 100% операций ввода-вывода, а затем соответствующим образом уменьшить масштаб. Поскольку скорость ввода-вывода может меняться со временем (поскольку она в конечном итоге зависит от конкретных аппаратных переменных), необходимо иметь дифференциальный контур обратной связи 2-го порядка, чтобы он работал хорошо, что выходит за рамки того, что такое stress-ng. способен сделать.

Еще один способ взглянуть на проблему — масштабировать ее с помощью количества процессоров. Предположим, в вашей системе 4 ЦП, тогда 2 ЦП для работы ЦП = 50%, 1 ЦП для ввода-вывода = 25%, поэтому запустите:

stress-ng --cpu 2 --iomix 1

или в системе с 8 процессорами вы можете сделать что-то еще, например:

stress-ng --matrix 4 --hdd 2
person Colin Ian King    schedule 16.11.2019
comment
Спасибо, Колин! К сожалению, у меня нет нескольких процессоров для игры. Похоже, мне нужно будет вручную запланировать стрессоры в файле задания... - person Joe Yeung; 16.11.2019