Стресс-тестирование систем – утилита stress-ng

Thank you for reading this post, don't forget to subscribe!

Для орга­ни­за­ции и про­ве­де­ния нагру­зоч­но­го стресс-тести­ро­ва­ния в Linux-систе­мах суще­ству­ет ути­ли­та stress-ng. С помо­щью неё неслож­но сге­не­ри­ро­вать реаль­ную рабо­чую нагруз­ку на тести­ру­е­мые под­си­сте­мы и, соот­вет­ствен­но, оце­нить её воз­мож­но­сти. Ути­ли­та, тра­ди­ци­он­но для Linux, предо­став­ля­ет для рабо­ты интер­фейс команд­ной стро­ки. Одна­ко, это ни в коей мере не дела­ет её неудоб­ной. Со сво­и­ми зада­ча­ми она справ­ля­ет­ся на «отлич­но». В дан­ной ста­тье при­ве­де­ны инструк­ции, отра­жа­ю­щие осно­вы рабо­ты с ути­ли­той stress-ng для неко­то­рых самых рас­про­стра­нён­ных ситу­а­ций в стресс-тести­ро­ва­нии систем на осно­ве Linux.

Основные особенности и возможности stress-ng

Воз­мож­но­сти, кото­ры­ми обла­да­ет ути­ли­та stress-ng, доволь­но широ­ки. Об этом сви­де­тель­ству­ет огром­ное коли­че­ство все­воз­мож­ных опций, кото­ры­ми её наде­ли­ли разработчики.
Но клю­че­вой осо­бен­но­стью stress-ng явля­ет­ся то, что это пол­но­цен­ный инстру­мент со встро­ен­ны­ми теста­ми. В отли­чие от мно­гих дру­гих ана­ло­гов, при выпол­не­нии теста не про­из­во­дит­ся обра­ще­ний к сто­рон­ним и/или внеш­ним ресур­сам. Таким обра­зом, stress-ng абсо­лют­но само­до­ста­точ­на. Прак­ти­че­ски в любом дис­три­бу­ти­ве Linux она доступ­на в стан­дарт­ном репо­зи­то­рии и уста­нав­ли­ва­ет­ся с помо­щью систе­мы управ­ле­ния паке­та­ми (СУП) дистрибутива.

Кро­ме все­го про­че­го, stress-ng в сво­ём соста­ве очень каче­ствен­ные тесты для тести­ро­ва­ния про­цес­со­ров, в сово­куп­но­сти поз­во­ля­ю­щие наи­бо­лее пол­но сге­не­ри­ро­вать нагруз­ку на CPU, исполь­зуя такие мето­ды как цело­чис­лен­ные и с пла­ва­ю­щей запя­той, бито­вые опе­ра­ции, ком­плекс­ные вычис­ле­ния и т. д.

Синтаксис stress-ng

Как уже было отме­че­но, stress-ng име­ет настоль­ко огром­ный набор опций, что в рам­ках дан­ной ста­тьи целе­со­об­раз­нее оста­но­вить­ся лишь на основ­ных, поз­во­ля­ю­щих про­те­сти­ро­вать все основ­ные под­си­сте­мы: CPU, вир­ту­аль­ную память, а так­же дис­ко­вую подсистему.
Син­так­сис stress-ng доволь­но прост:

Зада­ёт кон­крет­ный метод тести­ро­ва­ния вир­ту­аль­ной памя­ти. По-умол­ча­нию выпол­ня­ют­ся все доступ­ные для дан­ной кате­го­рии тесты, после­до­ва­тель­но друг за дру­гом. Подроб­нее в офи­ци­аль­ном руко­вод­стве по коман­де man stress-ng.

—vm-method mЗа­да­ёт кон­крет­ный метод тести­ро­ва­ния вир­ту­аль­ной памя­ти. По-умол­ча­нию выпол­ня­ют­ся все доступ­ные для дан­ной кате­го­рии тесты, после­до­ва­тель­но друг за дру­гом. Подроб­нее в офи­ци­аль­ном руко­вод­стве по коман­де man stress-ng.

Основные опции stress-ng

В таб­ли­це ниже ука­за­ны основ­ные опции утилиты

Опция Зна­че­ние
—class name Зада­ёт тип теста. В каче­стве name ука­зы­ва­ет­ся напри­мер cpu, memory, vm, io и другие.
—metrics Ука­зы­ва­ет, что по завер­ше­нию теста долж­на быть выве­де­на ста­ти­сти­ка основ­ных мет­рик, отра­жа­ю­щих пове­де­ние систе­мы во вре­мя теста.
—metrics-brief То же, что и —metrics, но выво­дит нену­ле­вые метрики.
—cpu-method method Зада­ёт метод гене­ра­ции нагруз­ки для про­цес­со­ра. По-умол­ча­нию выпол­ня­ют­ся все доступ­ные для дан­ной кате­го­рии тесты, после­до­ва­тель­но друг за дру­гом. Более подроб­но об этой опции мож­но узнать, выпол­нив коман­ду man stress-ng.
—cpu N Запус­ка­ет для стресс-теста про­цес­со­ра N стрес­со­ров для каж­до­го  его потока.
—cpu-ops N Ука­зы­ва­ет, через какое коли­че­ство bogo-опе­ра­ций необ­хо­ди­мо оста­но­вить тест CPU.
—hdd-ops N Ука­зы­ва­ет, через какое коли­че­ство bogo-опе­ра­ций необ­хо­ди­мо оста­но­вить тест жёст­ких дисков.
—hdd-bytes N Запи­сы­ва­ет N байт для каж­до­го про­цес­са рабо­ты с жёст­ким дис­ком. По-умол­ча­нию рав­но 1 Гб.
—vm N Запус­ка­ет для стресс-теста вир­ту­аль­ной памя­ти N стрессоров.
—vm-bytes N Раз­ме­ща­ет N байт для каж­до­го про­цес­са рабо­ты с памя­тью. По-умол­ча­нию рав­но 256 Мб. Объ­ём так­же может быть ука­зан в про­цен­тах от обще­го объ­ё­ма вир­ту­аль­ной памя­ти в систе­ме. Зна­че­ния мож­но зада­вать в бфй­тах, кило­бай­тах, мега­бай­тах и гига­бай­тах, исполь­зуя суф­фик­сы b, k, m и g соответственно.
—sequential N Зада­ет N коли­че­ство пото­ков для выпол­не­ния тестов, если N не ука­за­но или рав­но 0, то коли­че­ство пото­ков рав­но чис­лу процессоров.

Для удоб­ства и быст­ро­го состав­ле­ния необ­хо­ди­мых тестов реко­мен­ду­ет­ся поль­зо­вать­ся так­же неко­то­ры­ми вспо­мо­га­тель­ны­ми опци­я­ми, например:

  • что бы запу­стить несколь­ко экзем­пля­ров каж­до­го стресс-теста исполь­зу­ет­ся опция —all N, где N – необ­хо­ди­мое коли­че­ство экземпляров;
  • для уста­нов­ки тай­мау­та, т. е. вре­ме­ни про­дол­жи­тель­но­сти стресс-теста исполь­зу­ет­ся опция —timeout.

Тестирование процессора

Для подав­ля­ю­ще­го боль­шин­ства ситу­а­ций клас­си­че­ским при­ме­ром стресс-теста мож­но исполь­зо­вать тест, выпол­ня­е­мый сле­ду­ю­щей командой:

В дан­ном тесте задей­ство­ва­ны 16 пото­ков для тести­ро­ва­ния 16-поточ­но­го про­цес­со­ра. Вывод резуль­та­тов может быть следующим:

Есте­ствен­но коли­че­ство пото­ков сле­ду­ет зада­вать в соот­вет­ствии со спе­ци­фи­ка­ци­ей исполь­зу­е­мо­го процессора.

Тестирование дисковой подсистемы

Для про­ве­де­ния стресс-тести­ро­ва­ния нако­пи­те­лей, таких как жёст­кие дис­ки мож­но для нача­ла про­ве­сти низ­ко­уров­не­вый тест вво­да вывода

Вывод коман­ды будет следующим

Еще один стресс-тест дис­ков мож­но выпол­нить командой

В дан­ном слу­чае будет запу­ще­но 5 стрес­со­ров для жёст­ких дис­ков, кото­рые будут оста­нов­ле­ны по завер­ше­нии 100 тыс. bogo-операций.

Во вре­мя тести­ро­ва­ния мож­но смот­реть загруз­ку коман­дой iostat

Тестирование памяти

Что бы про­ве­сти стресс-тест памя­ти исполь­зуй­те команду

После окон­ча­ния мы полу­чим резуль­тат про­вер­ки при­бли­зи­тель­но сле­ду­ю­ще­го вида

Комплексное тестирование

Если необ­хо­ди­мо про­ве­сти ком­плекс­ное стресс-тести­ро­ва­ние, мож­но задей­ство­вать рабо­ту несколь­ких основ­ных под­си­стем вме­сте одной командой:

Эта коман­да запу­стит тест для CPU в 8 пото­ков, тест вир­ту­аль­ной памя­ти с раз­ме­ще­ни­ем в ней одно­го гига­бай­та дан­ных, а так­же 4 стрес­со­ра для тести­ро­ва­ния опе­ра­ций ввода/вывода.

Что бы запу­стить тести­ро­ва­ние все­го «желе­за», исполь­зу­ет­ся команда

Эта коман­да запу­стит все тесты. После выпол­не­ния резуль­тат будет выве­ден в кон­соль. Во вре­мя выпол­не­ния коман­ды луч­ше ком­пью­тер не трогать