Порой заказчик требует чтобы все было по максимуму начитавшись интернета, не вникая в детали. Проще скорость поменять чем что-то доказывать. Тем не менее перевел на 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
Вам надо перейти на testing, в нём обновлённые пакеты, в которых есть оптимизации, касающиеся нагрузки на процессор.
Независимо от версии wb-mqtt-serial можно сделать следующее:
Вы используете шаблон, в котором описаны несколько десятков регистров. Нужны ли они все вам? Можно выбрать только необходимые и опрашивать только их.
Существенно увеличить poll_interval в настройках порта. Для критичных регистров прописать отдельное значение poll_interval. Какую бы скорость порта вы не выбрали на стандартных шаблонах с десятками регистров технически невозможно выдержать интервал опроса в 20 мс. Фактически сейчас wb-mqtt-serial непрерывно по кругу опрашивает все регистры 3-х счётчиков без задержек как получится. На скорость обновления данных это никак не влияет, разницу вы заметите только при poll_interval в несколько секунд.
Поздно, перешел на тестинг. Сделал пул интервал 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мс: чем больше период, тем меньше нагрузка на процессор
Ааааапть! Похвастался, блин. Пища для размышлений.
Перезагрузил контроллер с новым демоном (ранее аптайм был месяца три, апгрейдил только -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"
Наверно уже не по теме, но тем не менее. Как писал ранее установил тестовый релиз. Оптимизировал опрос шины, загрузку снизил до 60% в ущерб количеству и скорости данных.
Вопрос - как с тестовой сборки перейти на стабильную? Просто поменять репозитарий и обновиться? Но ведь пакеты уже установлены более поздней версии?
Прошу дать конкретный порядок действий, так получилось что я на продакшен клиенте эксперементирую, руководство завода начинает греться.
Отбой тревоги. Был натянут дебажный wb-rules, который поломал wb-hwconf-manager, что выяснилось только после ребута.
Сейчас вернул на место. Заработал -serial 2.7.1, падать перестал, нагрузка на проц прежняя.
Хотел бы вернуться к данной теме. Последние два дня, после обновления до 2110 экспериментировал с частотой опроса параметров, с различными алгоритмами скриптов, в том числе и вообще комментировал расчеты и таймеры в скриптах. Максимум что удалось добиться это загрузка 20% загрузка процессора от wb-rules (расчеты не производились, в правилах оставались только строки связанные с виртуальными устройствами).
Что не так? Почему при отсутствующих правилах сервис отнимает 20-25% от ресурсов процессора? В логах также криминального ничего не вижу.
root@wirenboard-AN3PDYLU:~# service wb-rules status
● wb-rules.service - MQTT Rule engine for Wiren Board
Loaded: loaded (/lib/systemd/system/wb-rules.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-01-10 22:25:40 +05; 12h ago
Main PID: 1283 (wb-rules)
CGroup: /system.slice/wb-rules.service
└─1283 /usr/bin/wb-rules -syslog -editdir /etc/wb-rules/ /usr/share/wb-rules-system/rules/ /etc/wb-rules/ /usr/share/wb-rules/
Jan 11 10:49:47 wirenboard-AN3PDYLU wb-rules[1283]: INFO: network/Ethernet 2 IP: failed to convert value '', passing raw
Jan 11 10:49:47 wirenboard-AN3PDYLU wb-rules[1283]: INFO: network/Wi-Fi 2 IP: failed to convert value '', passing raw
Jan 11 10:50:47 wirenboard-AN3PDYLU wb-rules[1283]: INFO: network/Ethernet 2 IP: failed to convert value '', passing raw
Jan 11 10:50:47 wirenboard-AN3PDYLU wb-rules[1283]: INFO: network/Wi-Fi 2 IP: failed to convert value '', passing raw
Jan 11 10:51:47 wirenboard-AN3PDYLU wb-rules[1283]: INFO: network/Wi-Fi 2 IP: failed to convert value '', passing raw
Jan 11 10:51:47 wirenboard-AN3PDYLU wb-rules[1283]: INFO: network/Ethernet 2 IP: failed to convert value '', passing raw
Jan 11 10:52:47 wirenboard-AN3PDYLU wb-rules[1283]: INFO: network/Wi-Fi 2 IP: failed to convert value '', passing raw
Jan 11 10:52:47 wirenboard-AN3PDYLU wb-rules[1283]: INFO: network/Ethernet 2 IP: failed to convert value '', passing raw
Jan 11 10:53:47 wirenboard-AN3PDYLU wb-rules[1283]: INFO: network/Ethernet 2 IP: failed to convert value '', passing raw
Jan 11 10:53:47 wirenboard-AN3PDYLU wb-rules[1283]: INFO: network/Wi-Fi 2 IP: failed to convert value '', passing raw
возможна загрузка из-за ваших внутренних конвертаций? У меня контроллер обрабатывает 8 счетчиков MAP12 и несколько AI 4-20 и если он там что-то конвертирует из одного в другое может и действительно загибается из-за этого? Только до обновлений 2108 такого я не наблюдал.
Здравствуйте!
Попробуйте сделать так, как описано в следующем сообщении:
Также попробуйте для теста, сделав предварительно резервную копию, удалить все правила и проверьте, будет ли разница в загрузке процессора. Затем отключите опрос портов в конфигурации serial-устройств. И еще раз проверьте загрузку процессора.
Конфигурация примерно одинаковая см. конфиги выше. Правила +/- одинаковые, zigbee есть на обоих объектах. Но блин загрузка процессора разница существенно!
Wiren Board 6.5 (s/n A3PW5UD7):
Редко когда падает до 79%, в подавляющем составляющем 100% загрузка
Добрый день, у меня такая же проблема на версии, при этом в самом начале не было 100% нагрузки, а сейчас есть
Wiren Board 6.7.2 (s/n AZAW7JC3), release wb-2304