Это можно долго ждать.
Может, сцабака в 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
можно сделать следующее:
- Вы используете шаблон, в котором описаны несколько десятков регистров. Нужны ли они все вам? Можно выбрать только необходимые и опрашивать только их.
- Существенно увеличить
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, там для автора полчаса работы.
Ааааапть! Похвастался, блин. Пища для размышлений.
Перезагрузил контроллер с новым демоном (ранее аптайм был месяца три, апгрейдил только -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, падать перестал, нагрузка на проц прежняя.