Страница 26 из 326
Re: Arduino Mega Server
Добавлено: Сб авг 08, 2015 10:57 am
Alex
Очень интересно. Я сейчас поизучаю ваши диаграммы, а пока быстрый ответ. Идея про оптимизацию под 4 интересна. Есть только один момент: весь интерфейс построен на Ajax и ему нужно постоянно обмениваться данными. Сейчас это 4 потока по раз в секунду каждый. А при открытии 12 страниц (тест) получается 48 потоков. По 4 их не сгруппируешь (браузер решает и они обязательно пересекутся).
Re: Arduino Mega Server
Добавлено: Сб авг 08, 2015 11:07 am
uni
По идее можно было бы отложенно отвечать. Можно было бы напринимать запросов, а отдавать в темпе готовности данных. Обычно в протоколах передачи есть таймаут ожидания ответа. В этот таймаут вполне можно было бы уложиться. Если механизм ответа на запросы жестко привязан к W5100, то это вряд ли прокатит, но если манипулировать пакетами можно вручную (через библиотеку Ethernet), то можно попробовать не отказывать сразу, а копировать данные запроса во внутреннюю память мк, освобождать буфер в W5100 и принимать очередной запрос, ставя его в режим приёма ответа. Т.е. к 4 физическим каналам мы как бы добавляем виртуальные, реализованные через софт. Но тут надо будет потрудиться, изучая этот вопрос.
Re: Arduino Mega Server
Добавлено: Сб авг 08, 2015 11:15 am
olehs
Если принять очередной запрос, то предыдущий коннект нужно разорвать, и ответ уже некуда будет отдавать. А вообще вы переоцениваете библиотеку Ethernet. Стеком TCP/IP заведует чип W5100.
Re: Arduino Mega Server
Добавлено: Сб авг 08, 2015 11:20 am
Alex
Таак, ок.
То есть мы установили причину 3-х секундной задержки на 100%? Я правильно понимаю?
Ещё вопрос. Почему на моих диаграммах зависает 4-й, а не 5-й запрос? И почему задержка бывает 3 и 9 секунд, но не бывает 6?
Т.е. к 4 физическим каналам мы как бы добавляем виртуальные, реализованные через софт. Но тут надо будет потрудиться, изучая этот вопрос.
А встроенный буфер 2х8 килобайт этим не занимается? Тогда чем он занимается вообще?
У меня была ситуация, когда сокеты не закрывались и запросы браузера автоматически проваливались в чёрную дыру буфера 10 (!) минут (!), а потом выстреливались за 2 минуты и так по кругу. То есть механизм сохранения запросов уже есть.
Re: Arduino Mega Server
Добавлено: Сб авг 08, 2015 11:40 am
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.
Re: Arduino Mega Server
Добавлено: Сб авг 08, 2015 11:59 am
Alex
Так, всё более-менее понятно. Теперь такой вопрос.
Запросы сыпались в 4 потока 10 минут это около 2000 запросов, которым ничего не помешало приняться и сохраниться в буфере, а потом выдать 2000 ответов (за 2 минуты).
Почему у нас проблема с приёмом 5 запросов (почему 2000 принимаются, а 5 - нет)?
Re: Arduino Mega Server
Добавлено: Сб авг 08, 2015 12:10 pm
olehs
Chrome инициирует 6 коннектов. 2 уходят в Retransmission loop (3+6+12+24+48), а остальные 4 - прекрасно отрабатывают все запросы на 4-х сокетах. Один за другим.
Re: Arduino Mega Server
Добавлено: Сб авг 08, 2015 12:14 pm
uni
Похоже, что действительно на виртуальных сокетах можно ставить крест, судя по доступной программной модели. Регистры для управления сокетами строго заданы и чтобы "освободить место" нужно изменить режим на закрытие. Можно ещё перейти на W5500, там 8 сокетов, но всё равно это немного не то. Похоже лучше всё-таки пока использовать связку роутера с мк. Там особых ограничений нет.
Re: Arduino Mega Server
Добавлено: Сб авг 08, 2015 12:17 pm
Alex
Отрабатывают, т. е. в данном случае засовывают в буфер?
Я тестировал на фф, какова там схема? Четыре засовывают в буфер, остальные неуспевшие в
Retransmission loop?
Re: Arduino Mega Server
Добавлено: Сб авг 08, 2015 12:28 pm
Ivan
Может посмотреть в сторону websocket. И не запрашивать параметры а пусть сервак шлет раз в периуд и все статусы а не по одному. Темсамым вы убирете ваши проблемы