Как решить «Активно :активация (автоматический -перезапуск )» при запуске collectd.service?

Справочная страница дляtimeобъясняет концепцию произвольного и непроизвольного переключения контекста :

.

The resource specifiers [...] are:
   c      Number of times the process was context-switched involuntarily
          (because the time slice expired).
   w      Number of times that the program was context-switched voluntarily, 
          for instance while waiting for an I/O operation to complete.

(цитата взята из моей системы Debian, связанная справочная страница имеет немного другой текст)

То есть переключение контекста является добровольным, если процесс покидает ЦП, потому что ему больше нечего делать (в ожидании чего-то внешнего ). Непроизвольно, если она хочет продолжить какие-то вычисления, но ОС решает, что пора переключиться на какой-то другой процесс.


То, как все это связано с программой проверки пароля -, зависит от того, что на самом деле делает программа.

Из исходного кода, указанного в комментариях, мы видим, что программа вызывает usleep()один раз для каждого не совпадающего -символа, после чего продолжает цикл сравнения для следующего символа. Спящий режим настолько же добровольен, насколько когда-либо получает процессор, поэтому эти вызовы будут отображаться как добровольные переключения контекста для каждого символа, не связанного с -машинным обработчиком.

В Linux вы также должны увидеть вызовы с strace.

Окончательная задержка возникает из-за рандомизированного сна T * (rand() % 3), т.е. 0, 1 или 2 раза постоянная. Это довольно грубая степень детализации, поэтому ее легко усреднить, выполнив несколько попыток с одним и тем же паролем.

0
19.09.2020, 21:21
2 ответа

Как сказано в руководстве collectd, вы должны либо использовать -fкомандную -опцию строки и Type=simple, либо использоватьType=notify(и не использовать-f)в сервисном блоке. Пример сервисного модуля, поставляемый с collectd , делает это.

1
18.03.2021, 23:03

После «экспериментирования» мне удалось найти решение и запустить collectd.service, отредактировав свойство ExecStartв моем файле /etc/systemd/system/collectd.service, и теперь этот упомянутый файл выглядит так:

[Unit]
Description=statistics collection daemon
Documentation=man:collectd(1)
After=local-fs.target network.target
Requires=local-fs.target network.target

[Service]
ExecStart=/usr/sbin/collectd
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
Type=notify


[Install]
WantedBy=multi-user.target

Внесены изменения, предложенные @JdeBP в его ответе. Кроме того, чтобы указать интервал времени генерации значений метрик для плагина процессора , я загрузил его как тег , чтобы указать Intervalдля метрик, которые будут генерироваться каждые 1 с, как это:

<LoadPlugin cpu> 
   Interval 1
</LoadPlugin cpu>

...вместо формата по умолчанию, который выглядит следующим образом:LoadPlugin cpu. Кстати, загрузка плагинов указана в /etc/collectd.confфайле (на Fedora31 ОС ). Если свойство Intervalуказано в тегах..., то collectd.service НЕ запустит (проблему, указанную вhttps://github.com/collectd/collectd/issues/2444). Дополнительная информация в официальной документации , но она немного запутана и трудна для понимания.

Надеюсь, это поможет, если кто-то попадет в подобную ситуацию.:)
Ваше здоровье!

0
18.03.2021, 23:03

Теги

Похожие вопросы