Arduino Mega Server

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

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

Re: Arduino Mega Server

Сообщение uni »

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

Re: Arduino Mega Server

Сообщение olehs »

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

Re: Arduino Mega Server

Сообщение Alex »

Таак, ок.

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

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

У меня была ситуация, когда сокеты не закрывались и запросы браузера автоматически проваливались в чёрную дыру буфера 10 (!) минут (!), а потом выстреливались за 2 минуты и так по кругу. То есть механизм сохранения запросов уже есть.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am

Re: Arduino Mega Server

Сообщение olehs »

Я думаю, все дело в "чистоте" эксперимента. Я тоже не могу быть на 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

Re: Arduino Mega Server

Сообщение Alex »

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

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

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

Re: Arduino Mega Server

Сообщение olehs »

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

Re: Arduino Mega Server

Сообщение uni »

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

Re: Arduino Mega Server

Сообщение Alex »

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

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

Re: Arduino Mega Server

Сообщение Ivan »

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