Скорость работы Majordomo на разном железе (Raspberry, Intel PC, etc..)

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

DerekTM
Сообщения: 11
Зарегистрирован: Сб окт 20, 2018 7:17 pm
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Скорость работы Majordomo на разном железе (Raspberry, Intel PC, etc..)

Сообщение DerekTM » Чт ноя 01, 2018 7:41 pm

skysilver писал(а):
Ср окт 31, 2018 9:28 pm
Начать с этого
http://majordomo.smartliving.ru/forum/v ... 390#p89989
После нескольких попыток вот первый результат:
xi_1.png
xi_1.png (36.21 КБ) 2468 просмотров
Лог xiaomi.log:
19:18:59 0.02046300 {"cmd":"report","model":"remote.b1acn01","sid":"158d000213265a","short_id":18,"data":"{\"status\":\"click\"}"}
19:18:59 0.59165800 Sending message ({"sid":"158d00022e8b3f","cmd":"write","model":"ctrl_neutral1","data":"{\"channel_0\":\"on\",\"key\":.........\"}"}) to 192.168.44.20

Лог cycle_xiaomihome.php.txt:
19:18:50 Received message ({"cmd":"report","model":"remote.b1acn01","sid":"158d000213265a","short_id":18,"data":"{\"status\":\"click\"}"}) from 192.168.44.20
19:18:59 Received message ({"cmd":"heartbeat","model":"gateway","sid":"7811dcf9a24e","short_id":"0","token":"dVv04TGUbnA6tTfu","data":"{\"ip\":\"192.168.44.20\"}"}) from 192.168.44.20
19:18:59 Queue command: {"ID":"25","IP":"192.168.44.20","DATA":"{\"sid\":\"158d00022e8b3f\",\"cmd\":\"write\",\"model\":\"ctrl_neutral1\",\"data\":\"{\\\"channel_0\\\":\\\"on\\\",\\\"key\\\":\\\"......\"}\"}","ADDED":"2018-11-01 19:18:59"}



Разница между тем как пришел пакет и тем как запись о нем отобразилась в логе xiaomi.log - почти 9 секунд! Именно через столько и включился свет после нажатия кнопки.

============================================================================================================

Второй результат:
xi2.png
xi2.png (33.25 КБ) 2468 просмотров
Лог xiaomi.log:
19:36:58 0.80713200 {"cmd":"report","model":"remote.b1acn01","sid":"158d000213265a","short_id":18,"data":"{\"status\":\"click\"}"}
Разница - 1.4 секунды.

Лог cycle_xiaomihome.php.txt:
19:36:57 Received message ({"cmd":"report","model":"remote.b1acn01","sid":"158d000213265a","short_id":18,"data":"{\"status\":\"click\"}"}) from 192.168.44.20


Время отправки комманды на включение выключателя совпадает (в дампе и в логе).

Т.е. проблема в модуле XiaomiHome? Куда копать дальше?
Последний раз редактировалось DerekTM Чт ноя 01, 2018 8:51 pm, всего редактировалось 2 раза.
skysilver
Сообщения: 2915
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 378 раз
Поблагодарили: 1668 раз
Контактная информация:

Re: Скорость работы Majordomo на разном железе (Raspberry, Intel PC, etc..)

Сообщение skysilver » Чт ноя 01, 2018 8:16 pm

А где время из третьего лога? Лог цикла имею в виду.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
DerekTM
Сообщения: 11
Зарегистрирован: Сб окт 20, 2018 7:17 pm
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Скорость работы Majordomo на разном железе (Raspberry, Intel PC, etc..)

Сообщение DerekTM » Чт ноя 01, 2018 8:41 pm

skysilver писал(а):
Чт ноя 01, 2018 8:16 pm
А где время из третьего лога? Лог цикла имею в виду.
В том логе нет миллисекунд. Добавил логи цикла в предыдущее сообщение.

Кстати интересно, из первой попытке видно, что в логе цикла сообщение отобразилось вовремя (19:18:50), а вот в логе модуля - спустя 9 секунд (19:18:59 0.02046300).


UPD: Добавил отображение миллисекунд в cycle_xiaomihome.php.txt:

xiaomi.log: 21:09:44 0.24565400 {"cmd":"report","model":"remote.b1acn01","sid":"158d000213265a","short_id":18,"data":"{\"status\":\"click\"}"}
cycle_xiaomihome.php.txt: 21:09:42.502263 Received message ({"cmd":"report","model":"remote.b1acn01","sid":"158d000213265a","short_id":18,"data":"{\"status\":\"click\"}"}) from 192.168.44.20
Разница почти в 2 секунды.

Вот тоже самое с датчика открытия двери:
21:39:31.378176 Received message ({"cmd":"report","model":"magnet","sid":"158d00027b035c","short_id":39004,"data":"{\"status\":\"open\"}"}) from 192.168.44.20
21:39:32 0.64367100 {"cmd":"report","model":"magnet","sid":"158d00027b035c","short_id":39004,"data":"{\"status\":\"open\"}"}

P.S. Проблема проявляется не каждый раз, в большинстве случаев время в дампе/обоих логах совпадает и все работает нормально, но примерно в 15-20% случаев разница между отображением события в логе цикла и логе модуля составляет от 1 до 5 секунд, в особо тяжелых случаях бывает и 8-10 секунд, но очень редко.
Последний раз редактировалось DerekTM Чт ноя 01, 2018 9:46 pm, всего редактировалось 1 раз.
VladPTZ
Сообщения: 382
Зарегистрирован: Вт май 31, 2016 6:56 pm
Откуда: Россия Карелия Петрозаводск
Благодарил (а): 93 раза
Поблагодарили: 55 раз

Re: Скорость работы Majordomo на разном железе (Raspberry, Intel PC, etc..)

Сообщение VladPTZ » Чт ноя 01, 2018 9:20 pm

Подтверждаю, у меня аналогичный результат по задержкам.
Между tcpdump и в логе cycle_xiaomihome.php.txt: задержка нулевая.
А между логом cycle_xiaomihome.php.txt: и xiaomi.log задержка от нудя до 30 секунд (при каждом сработке разная)

В чем и где может быть проблема и как исправить?


По пропускам событий, при не сработке датчика, в логах tcpdump cycle_xiaomihome.php.txt: и xiaomi.log события нет вообще, похоже событие о срабатывании датчика иногда не отправляет сам шлюз. Продолжаю наблюдение.
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
Sas
Сообщения: 205
Зарегистрирован: Вт июл 12, 2016 6:16 pm
Благодарил (а): 2 раза
Поблагодарили: 12 раз

Re: Скорость работы Majordomo на разном железе (Raspberry, Intel PC, etc..)

Сообщение Sas » Пт ноя 02, 2018 12:37 am

У меня такое с кнопкой было если ее два раза резко нажать то шлюз ничего не отправляет.
может и датчик не шлет свое состоянии если его резко сразу дергать.

По поводу тормозов
Для теста создайте чистые методы на датчик где пишите в свойство устройства на включения без дополнительных проверок чего-либо.
Обновилось свойство датчика - сработал метод на это свойство а в нем только: sg('розеткаКомната.power,1);
И снимайте дампы и логи
VladPTZ
Сообщения: 382
Зарегистрирован: Вт май 31, 2016 6:56 pm
Откуда: Россия Карелия Петрозаводск
Благодарил (а): 93 раза
Поблагодарили: 55 раз

Re: Скорость работы Majordomo на разном железе (Raspberry, Intel PC, etc..)

Сообщение VladPTZ » Пт ноя 02, 2018 7:58 am

Sas писал(а):
Пт ноя 02, 2018 12:37 am

По поводу тормозов
Для теста создайте чистые методы на датчик где пишите в свойство устройства на включения без дополнительных проверок чего-либо
Пробовал одной строкой включать, и своим скриптом, и от простых устройств избавился, разница работы в лучшем сторону не заметил, тормоза полностью не ушли.
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
DerekTM
Сообщения: 11
Зарегистрирован: Сб окт 20, 2018 7:17 pm
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Скорость работы Majordomo на разном железе (Raspberry, Intel PC, etc..)

Сообщение DerekTM » Пт ноя 02, 2018 9:30 am

Sas писал(а):
Пт ноя 02, 2018 12:37 am
Для теста создайте чистые методы на датчик где пишите в свойство устройства на включения без дополнительных проверок чего-либо.
Именно так у меня во всех тестах выше и сделано.
skysilver
Сообщения: 2915
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 378 раз
Поблагодарили: 1668 раз
Контактная информация:

Re: Скорость работы Majordomo на разном железе (Raspberry, Intel PC, etc..)

Сообщение skysilver » Пт ноя 02, 2018 12:47 pm

VladPTZ писал(а):
Чт ноя 01, 2018 9:20 pm
По пропускам событий, при не сработке датчика, в логах tcpdump cycle_xiaomihome.php.txt: и xiaomi.log события нет вообще, похоже событие о срабатывании датчика иногда не отправляет сам шлюз. Продолжаю наблюдение.
Возможно шлюз косячит. А возможно проблема в локальной сети. Докопаться до истины будет сложновато. Как минимум в такой ситуации нужно запускать захват пакетов на самом роутере, а не на сервере УД.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
skysilver
Сообщения: 2915
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 378 раз
Поблагодарили: 1668 раз
Контактная информация:

Re: Скорость работы Majordomo на разном железе (Raspberry, Intel PC, etc..)

Сообщение skysilver » Пт ноя 02, 2018 1:32 pm

DerekTM писал(а):
Чт ноя 01, 2018 8:41 pm
Проблема проявляется не каждый раз, в большинстве случаев время в дампе/обоих логах совпадает и все работает нормально, но примерно в 15-20% случаев разница между отображением события в логе цикла и логе модуля составляет от 1 до 5 секунд, в особо тяжелых случаях бывает и 8-10 секунд, но очень редко.
Ну что же. Следующим шагом будет выявление корелляции между задержками при передаче репорта шлюза из цикла в модуль и другими событиями/действиями на сервере УД. Конкретных шагов тут сказать не могу, это уже самому владельцу УД виднее, что/где/как выполняется в эти моменты задержек. Возможно они с определенным промежутком времени возникают, тогда будет легче проводить анализ.

В техническом плану могу сказать следующее. Затык происходит при вызове в цикле функции getURLBackground(), которая передает из цикла полученный от шлюза репорт на дальнейшую обработку в модуль. Делает она это с помощью HTTP GET запроса, т.е. при этом задействуется в первую очередь веб-сервер Apache. В связи с этим можно копнуть в сторону настроек и оптимизации самого Апач, например, увеличить количество разрешенных соединений.

Немного теории.

Входящие сообщения можем отравить (из цикла) на дальнейшую обработку двумя способами:
1. В неблокирующем режиме через вызов CURL-ом фонового процесса по URL-ссылке модуля.
2. Прямой вызов функции модуля (блокирующий режим).

Первый способ не блокирует цикл модуля на время обработки сообщения, вызов привязанного пользовательского метода и выполнение его кода, а также защищает цикл от ошибок в коде привязанного метода. Недостаток такого подхода - лишняя нагрузка на веб-сервер и невозможность отправки данных большой длины, т.к. есть ограничение на длину GET-запроса.

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

Промежуточный выводы.

Если продолжить заниматься изучением вопроса и оптимизацией модуля, то я вижу несколько вариантов, которые следует протестировать.
1. Исследовать нагрузку на веб-сервер в моменты возникновения задержек.
2. Применять в цикле вместо getURLBackground() прямой вызов функции модуля (блокирующий режим).
3. Использовать для getURLBackground() не системную ссылку ядра /ajax/xiaomihome.html?op=, а собственную модуля (например, http://192.168.1.10/modules/lgwebostv/B ... rocess.php) (неблокирующий режим).
4. Использовать для GET-запроса не CURL, а get_headers или file_get_contents (блокирующий режим).
5. Реализовать другой способ запуска фонового процесса - через вызов php-скрипта в консоли. При этом варианте веб-сервер никак не будет задействован (неблокирующий режим).


По итогу исследований можно будет, к примеру, вынести в настройки модуля способ передачи данных из цикла в модуль, и тогда каждый индивидуально для себя определит оптимальный вариант.
За это сообщение автора skysilver поблагодарили (всего 4):
savenko_egor (Пт ноя 02, 2018 2:21 pm) • Samir77 (Пт ноя 02, 2018 2:43 pm) • Logrus (Пт ноя 02, 2018 5:14 pm) • VladPTZ (Пт ноя 02, 2018 7:37 pm)
Рейтинг: 4.94%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
VladPTZ
Сообщения: 382
Зарегистрирован: Вт май 31, 2016 6:56 pm
Откуда: Россия Карелия Петрозаводск
Благодарил (а): 93 раза
Поблагодарили: 55 раз

Re: Скорость работы Majordomo на разном железе (Raspberry, Intel PC, etc..)

Сообщение VladPTZ » Сб ноя 03, 2018 7:29 am

Отключил для пробы проброс 80 порта на роутере в мир, для снижения вероятной нагрузке на апач, тормоза не исчезли.
Заметил две закономерности.
1. Тормоза стали заметны примерно июль-август 2018г.
2 Тормоза длинее по времени и больше когда долго не срабатывали датчики, например пришло домой или встал ночью, если активно все двигаются по квартире то иногда сработка без задержек, хотя бывает и исключения, выглядит это так как будто систему расшевелили, распинали для работы.
Сервер МД на x86 micro pc ssd + HDD, OC Debian, терминал Xiaomi Redmi note 7
Мои исходники для мд управляемых устройств https://github.com/vgamaev/ESPMDDEVICE
Ответить