Arduino Mega Server

Модератор:Alex

Alex
Сообщения:2357
Зарегистрирован:Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза
Re: Arduino Mega Server

Сообщение Alex » Сб авг 08, 2015 10:57 am

Очень интересно. Я сейчас поизучаю ваши диаграммы, а пока быстрый ответ. Идея про оптимизацию под 4 интересна. Есть только один момент: весь интерфейс построен на Ajax и ему нужно постоянно обмениваться данными. Сейчас это 4 потока по раз в секунду каждый. А при открытии 12 страниц (тест) получается 48 потоков. По 4 их не сгруппируешь (браузер решает и они обязательно пересекутся).
Аватара пользователя
uni
Сообщения:191
Зарегистрирован:Вс июл 26, 2015 9:21 pm
Откуда:Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

Re: Arduino Mega Server

Сообщение uni » Сб авг 08, 2015 11:07 am

По идее можно было бы отложенно отвечать. Можно было бы напринимать запросов, а отдавать в темпе готовности данных. Обычно в протоколах передачи есть таймаут ожидания ответа. В этот таймаут вполне можно было бы уложиться. Если механизм ответа на запросы жестко привязан к W5100, то это вряд ли прокатит, но если манипулировать пакетами можно вручную (через библиотеку Ethernet), то можно попробовать не отказывать сразу, а копировать данные запроса во внутреннюю память мк, освобождать буфер в W5100 и принимать очередной запрос, ставя его в режим приёма ответа. Т.е. к 4 физическим каналам мы как бы добавляем виртуальные, реализованные через софт. Но тут надо будет потрудиться, изучая этот вопрос.
Россия навсегда!
olehs
Сообщения:1115
Зарегистрирован:Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Arduino Mega Server

Сообщение olehs » Сб авг 08, 2015 11:15 am

Если принять очередной запрос, то предыдущий коннект нужно разорвать, и ответ уже некуда будет отдавать. А вообще вы переоцениваете библиотеку Ethernet. Стеком TCP/IP заведует чип W5100.
Alex
Сообщения:2357
Зарегистрирован:Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Сб авг 08, 2015 11:20 am

Таак, ок.

То есть мы установили причину 3-х секундной задержки на 100%? Я правильно понимаю?

Ещё вопрос. Почему на моих диаграммах зависает 4-й, а не 5-й запрос? И почему задержка бывает 3 и 9 секунд, но не бывает 6?
Т.е. к 4 физическим каналам мы как бы добавляем виртуальные, реализованные через софт. Но тут надо будет потрудиться, изучая этот вопрос.
А встроенный буфер 2х8 килобайт этим не занимается? Тогда чем он занимается вообще?

У меня была ситуация, когда сокеты не закрывались и запросы браузера автоматически проваливались в чёрную дыру буфера 10 (!) минут (!), а потом выстреливались за 2 минуты и так по кругу. То есть механизм сохранения запросов уже есть.
За это сообщение автора Alex поблагодарил:
ILGAS (Сб авг 08, 2015 1:21 pm)
Рейтинг: 1.16%
olehs
Сообщения:1115
Зарегистрирован:Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Arduino Mega Server

Сообщение olehs » Сб авг 08, 2015 11:40 am

Я думаю, все дело в "чистоте" эксперимента. Я тоже не могу быть на 100% уверен, что никто больше не пытается занять сокет. Посмотрите на лампочки Rx/Tx шилда - они постоянно мигают, даже если вы к шилду не обращаетесь.

Я подключил шилд напрямую к ноутбуку, потому более-менее уверен в чистоте эксперимента, хотя что пытается делать та же Windows (arp-запросы, разрешение доменных имен и т.д.) мне неизвестно. Т.е. и сама система, думаю, может занимать сокеты в какой-то момент.

А MajorDoMo, например, у вас не обращался к AMS во время тестов, или AMS к нему?

Почему 9, а не 6? Ответ в том же документе по Retransmission Timeout:
The retransmission time-out is adjusted on the fly to match the characteristics of the connection, using Smoothed Round Trip Time (SRTT) calculations as described in Van Jacobson's paper titled Congestion Avoidance and Control. The timer for a given segment is doubled after each retransmission of that segment.
Первая попытка - через 3, вторая через 6.
3+6 получается 9.
Alex
Сообщения:2357
Зарегистрирован:Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Сб авг 08, 2015 11:59 am

Так, всё более-менее понятно. Теперь такой вопрос.

Запросы сыпались в 4 потока 10 минут это около 2000 запросов, которым ничего не помешало приняться и сохраниться в буфере, а потом выдать 2000 ответов (за 2 минуты).

Почему у нас проблема с приёмом 5 запросов (почему 2000 принимаются, а 5 - нет)?
olehs
Сообщения:1115
Зарегистрирован:Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Arduino Mega Server

Сообщение olehs » Сб авг 08, 2015 12:10 pm

Chrome инициирует 6 коннектов. 2 уходят в Retransmission loop (3+6+12+24+48), а остальные 4 - прекрасно отрабатывают все запросы на 4-х сокетах. Один за другим.
Аватара пользователя
uni
Сообщения:191
Зарегистрирован:Вс июл 26, 2015 9:21 pm
Откуда:Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 7 раз
Контактная информация:

Re: Arduino Mega Server

Сообщение uni » Сб авг 08, 2015 12:14 pm

Похоже, что действительно на виртуальных сокетах можно ставить крест, судя по доступной программной модели. Регистры для управления сокетами строго заданы и чтобы "освободить место" нужно изменить режим на закрытие. Можно ещё перейти на W5500, там 8 сокетов, но всё равно это немного не то. Похоже лучше всё-таки пока использовать связку роутера с мк. Там особых ограничений нет.
Россия навсегда!
Alex
Сообщения:2357
Зарегистрирован:Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Сб авг 08, 2015 12:17 pm

Отрабатывают, т. е. в данном случае засовывают в буфер?

Я тестировал на фф, какова там схема? Четыре засовывают в буфер, остальные неуспевшие в
Retransmission loop?
Ivan
Сообщения:1473
Зарегистрирован:Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Arduino Mega Server

Сообщение Ivan » Сб авг 08, 2015 12:28 pm

Может посмотреть в сторону websocket. И не запрашивать параметры а пусть сервак шлет раз в периуд и все статусы а не по одному. Темсамым вы убирете ваши проблемы
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Ответить