Существенное увеличение нагрузки после обновления до последних версий, в частности wb-mqtt-serial

Это можно долго ждать.
Может, сцабака в 57600? Я на некоторых узлах имею и больше железа, и 2.х демон (по причине редкой неустранимой ошибки в 1.х), но завалить проц выше 30% пока не доводилось. При этом еще и десяток правил ворочаются там.

Последний скрин где скинул, там 115200 и ничего работает

Верю. Но - оно точно надо?
У меня везде 9600 за глаза и уши. С одним особо капризулечным датчиком - 4800. Ведь опрос имеет две стороны - и непосредственно теребление шины, и запись значения в очередь. Не думаю, что контроллер eMMC столь мудро закеширован, что не наваливает забот о диске на систему: это всего лишь флешка, а не серверный массив.

Зы. А что еще за iridium server, верхний в топе? Зачем он тут? Краем уха о нем слышал, это ж альтернативная WB система, довольно тяжелая для совместного проживания на не самом могучем железе.

Порой заказчик требует чтобы все было по максимуму начитавшись интернета, не вникая в детали. Проще скорость поменять чем что-то доказывать. Тем не менее перевел на 9600 - нагрузка уменьшилась до 80-90%, но это все равно много.

Iridium mobile если коротко это SCADA для бытовой автоматизации + шлюз для объединения устройств работающих на различных протоколах

Можете показать ошибки при установке?
Рекомендую воспользоваться инструкцией по обновлению из этой темы.

Пришлось опять приводить к заводским настройкам, т.к. не смог ни доустановить пакеты (ошибка вроде как о нехватке места на диске, помню также broken pin было), ни починить, ни удалить.

Что касается ваших рекомендаций:

Welcome to Wiren Board 6.7.2 (s/n AN3PDYLU), release wb-2104 (as stable)
Linux wirenboard-AN3PDYLU 4.9.22-wb2 #2 SMP Thu Jun 24 14:46:55 UTC 2021 armv7l                                                                                                                      GNU/Linux

root@wirenboard-AN3PDYLU:~# wb-release
Wirenboard release wb-2104 (as stable), target wb6/stretch

You can get this info in scripts from /usr/lib/wb-release.
root@wirenboard-AN3PDYLU:~# wb-release -t stable
2021-08-30 06:03:24,076 wb-release INFO: Target and current releases are the same, nothing to do

Так все таки, что нам делать с загрузкой проца?

Я предлагаю вам подключиться к WB по SSH и самим посмотреть что не так с ним. Сообщите кому и куда выслать позывные и пароли?

Вам надо перейти на testing, в нём обновлённые пакеты, в которых есть оптимизации, касающиеся нагрузки на процессор.
Независимо от версии wb-mqtt-serial можно сделать следующее:

  1. Вы используете шаблон, в котором описаны несколько десятков регистров. Нужны ли они все вам? Можно выбрать только необходимые и опрашивать только их.
  2. Существенно увеличить poll_interval в настройках порта. Для критичных регистров прописать отдельное значение poll_interval. Какую бы скорость порта вы не выбрали на стандартных шаблонах с десятками регистров технически невозможно выдержать интервал опроса в 20 мс. Фактически сейчас wb-mqtt-serial непрерывно по кругу опрашивает все регистры 3-х счётчиков без задержек как получится. На скорость обновления данных это никак не влияет, разницу вы заметите только при poll_interval в несколько секунд.

Сегодня, кстати, вышел новый stable, можно установить его.

Поздно, перешел на тестинг. Сделал пул интервал 1 секунду, нагрузка стала 60%. Посмотрим потестируем. Скажите нормально что wb-rules syslog грузит на 17-20% процессор?
Правил серьезных у меня особо нет, перевод AI 4-20 в физ величины и все.

Если у вас в правилах переводятся в физические величины напряжения с АЦП (А1-А4) через правило с whenChanged, то нагрузка в целом адекватная, потому что новые данные с АЦП приходят часто.

Если частое обновление физических величин не очень критично, но хочется сбавить загрузку процессора, можно переписать такие правила примерно так:

setInterval(function() {
  var data = dev['wb-adc/A1'];
  // convert data
  var convertedData = convertMyData(data);
  dev['my-virtual-device/converted_A1'] = convertedData;
}, 500);  // период 500мс: чем больше период, тем меньше нагрузка на процессор

…или допилить наконец wb-adc, там для автора полчаса работы.

1 лайк

Ааааапть! Похвастался, блин. Пища для размышлений.
Перезагрузил контроллер с новым демоном (ранее аптайм был месяца три, апгрейдил только -serial) - и нА тебе - 47…53% ЦПУ, 1.4% памяти. До перезагрузки было 7…15% ЦПУ в прыжке.
Интересно дефки пляшут… Попытаюсь осознать.

УУууууууууу… а в логах-то!.. мать честная.
Буду разбирать. И Вам, @somebody - советую глянуть, не та ли же там вермишель творится. Демон каждые 5 сек падает, вываливая в логи нижепроцитированное, systemd его поднимает, и всё по новой…
жесть

Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: ERROR: [serial port driver] unable to create control: 'Control "Input Voltage" of device "tcp-10-117-21-47-20108_wb-mwac_12" already exists @ wblib/local_device.cpp:69'
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [mqtt] subscription succeeded (message id 1031)
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [mqtt] subscription succeeded (message id 1087)
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [mqtt] subscription succeeded (message id 1093)
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [mqtt] subscription succeeded (message id 1725)
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [mqtt] subscription succeeded (message id 1751)
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [mqtt] subscription succeeded (message id 1809)
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [mqtt] subscription succeeded (message id 1835)
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: WARNING: [serial client] Serial protocol error: cannot open serial port
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: WARNING: [serial client] Serial protocol error: cannot open serial port
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: IODIR: setup register <modbus_io:95:1:<unspec>: 10000> <-- 65535
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: IPOL: setup register <modbus_io:95:1:<unspec>: 10001> <-- 0
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [mqtt] subscription succeeded (message id 1725)
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [mqtt] subscription succeeded (message id 1751)
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [mqtt] subscription succeeded (message id 1809)
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [mqtt] subscription succeeded (message id 1835)
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: WARNING: [serial client] Serial protocol error: cannot open serial port
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: WARNING: [serial client] Serial protocol error: cannot open serial port
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: IODIR: setup register <modbus_io:95:1:<unspec>: 10000> <-- 65535
Sep  1 17:43:51 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: IPOL: setup register <modbus_io:95:1:<unspec>: 10001> <-- 0
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [serial client] device modbus:150 is connected
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: GPINTEN: setup register <modbus_io:95:1:<unspec>: 10002> <-- 65535
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: DEFVAL: setup register <modbus_io:95:1:<unspec>: 10003> <-- 0
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: INTCON: setup register <modbus_io:95:1:<unspec>: 10004> <-- 0
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [serial client] device modbus:150 is connected
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: GPINTEN: setup register <modbus_io:95:1:<unspec>: 10002> <-- 65535
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: DEFVAL: setup register <modbus_io:95:1:<unspec>: 10003> <-- 0
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: INTCON: setup register <modbus_io:95:1:<unspec>: 10004> <-- 0
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: IOCON: setup register <modbus_io:95:1:<unspec>: 10005> <-- 17476
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: ERROR: [serial client] Serial protocol error: serial write failed: errno = 9
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: WARNING: [serial client] Serial protocol error: cannot open serial port
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: Ch1 L1 Turns: setup register <modbus:17:<unspec>: 5216> <-- 2994
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: ERROR: [serial port driver] FATAL: Serial protocol error: serial write failed: errno = 9. Stopping event loops.
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: terminate called after throwing an instance of 'TSerialDeviceErrnoException'
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]:   what():  Serial protocol error: serial write failed: errno = 9
Sep  1 17:43:52 wirenboard-AGPLM2T7 systemd[1]: wb-mqtt-serial.service: Main process exited, code=killed, status=6/ABRT
Sep  1 17:43:52 wirenboard-AGPLM2T7 systemd[1]: wb-mqtt-serial.service: Unit entered failed state.
Sep  1 17:43:52 wirenboard-AGPLM2T7 systemd[1]: wb-mqtt-serial.service: Failed with result 'signal'.
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: IOCON: setup register <modbus_io:95:1:<unspec>: 10005> <-- 17476
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: ERROR: [serial client] Serial protocol error: serial write failed: errno = 9
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: WARNING: [serial client] Serial protocol error: cannot open serial port
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: INFO: [modbus] Init: Ch1 L1 Turns: setup register <modbus:17:<unspec>: 5216> <-- 2994
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: ERROR: [serial port driver] FATAL: Serial protocol error: serial write failed: errno = 9. Stopping event loops.
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]: terminate called after throwing an instance of 'TSerialDeviceErrnoException'
Sep  1 17:43:52 wirenboard-AGPLM2T7 wb-mqtt-serial[21480]:   what():  Serial protocol error: serial write failed: errno = 9
Sep  1 17:43:52 wirenboard-AGPLM2T7 systemd[1]: wb-mqtt-serial.service: Main process exited, code=killed, status=6/ABRT
Sep  1 17:43:52 wirenboard-AGPLM2T7 systemd[1]: wb-mqtt-serial.service: Unit entered failed state.
Sep  1 17:43:52 wirenboard-AGPLM2T7 systemd[1]: wb-mqtt-serial.service: Failed with result 'signal'.
Sep  1 17:43:53 wirenboard-AGPLM2T7 systemd[1]: wb-mqtt-serial.service: Service hold-off time over, scheduling restart.
Sep  1 17:43:53 wirenboard-AGPLM2T7 systemd[1]: Stopped MQTT Driver for serial devices.
Sep  1 17:43:53 wirenboard-AGPLM2T7 systemd[1]: Started MQTT Driver for serial devices.
Sep  1 17:43:53 wirenboard-AGPLM2T7 systemd[1]: wb-mqtt-serial.service: Service hold-off time over, scheduling restart.
Sep  1 17:43:53 wirenboard-AGPLM2T7 systemd[1]: Stopped MQTT Driver for serial devices.
Sep  1 17:43:53 wirenboard-AGPLM2T7 systemd[1]: Started MQTT Driver for serial devices.
Sep  1 17:43:54 wirenboard-AGPLM2T7 wb-mqtt-serial[21493]: INFO: [serial config] PMS-620N 150 override property "id"
Sep  1 17:43:54 wirenboard-AGPLM2T7 wb-mqtt-serial[21493]: INFO: [serial config] PMS-620N 150 override property "max_read_registers"

Конфиг serial в студию, и ip addr show

Уже с Никитой поговорили часик. Пока - тупик. Буду эмулировать порты socatом в качестве скорой помощи. Железо и сеть - работают.

Наверно уже не по теме, но тем не менее. Как писал ранее установил тестовый релиз. Оптимизировал опрос шины, загрузку снизил до 60% в ущерб количеству и скорости данных.

Смотрю логи:

Sep  1 12:36:23 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage0_raw
Sep  1 12:36:23 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage1_raw
Sep  1 12:36:23 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage2_raw
Sep  1 12:36:23 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage3_raw
Sep  1 12:36:23 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device3/in_voltage0_raw
Sep  1 12:36:23 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device3/in_voltage1_raw
Sep  1 12:36:23 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device3/in_voltage2_raw
Sep  1 12:36:23 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device3/in_voltage3_raw
Sep  1 12:36:25 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage0_raw
Sep  1 12:36:25 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage1_raw
Sep  1 12:36:25 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage2_raw
Sep  1 12:36:25 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage3_raw
Sep  1 12:36:25 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device3/in_voltage0_raw
Sep  1 12:36:25 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device3/in_voltage1_raw
Sep  1 12:36:25 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device3/in_voltage2_raw
Sep  1 12:36:25 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device3/in_voltage3_raw
Sep  1 12:36:27 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage0_raw
Sep  1 12:36:27 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage1_raw
Sep  1 12:36:27 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage2_raw
Sep  1 12:36:27 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage3_raw
Sep  1 12:36:27 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device3/in_voltage0_raw
Sep  1 12:36:27 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device3/in_voltage1_raw
Sep  1 12:36:27 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device3/in_voltage2_raw
Sep  1 12:36:27 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device3/in_voltage3_raw
Sep  1 12:36:29 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage0_raw
Sep  1 12:36:29 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage1_raw
Sep  1 12:36:29 wirenboard-AN3PDYLU wb-mqtt-adc[11058]: ERROR: [wb-adc] Can't read from /sys/bus/iio/devices/iio:device2/in_voltage2_raw

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

wb-release -t stable

Отбой тревоги. Был натянут дебажный wb-rules, который поломал wb-hwconf-manager, что выяснилось только после ребута.
Сейчас вернул на место. Заработал -serial 2.7.1, падать перестал, нагрузка на проц прежняя.

1 лайк