ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
22 апреля
480453 Топик полностью
Ralex (16.01.2014 14:16, просмотров: 216) ответил Mahagam на на этом стеке я лью-сливаю со скоростью ~2.6-4 мегабайта в сек.
Смотрите что происходит Здесь плата на STM32F407 с адрсом 192.168.1.101 передает на комп (192.168.1.4) файл. Если присмотреться (я выделил посылку платы и ответ ACK компа стрелочками), то комп отсылает ACK спустя аж 200мс после пакета с данными, а вот плата после приема ACK готова отдать новые данные почти мгновенно. То есть, комп просто тормозит весь процесс. Но ему можно - согласно rfc хз какому, на первый пакет данных допускается задержка ACK вплоть до 500мс. Так что еще не самый плохой случай. 200мс как раз и объясняет мою скорость 7 кб в сек - 5 раз в секунду по 1500 байт, ну плюс накладные расходы есть. Вот и получается 7кбайт. Этот стек в его таком виде не может обеспечить производительность со всеми без исключения устройствами на всех ОС тупо исходя из ограничений, накладываемых в rfc. Но для него придумали хак - дело в том что на второй пакет, следующий за неподтвержденным пакетом, устройство должно отвечать сразу, настолько быстро насколько это возможно. Вот это и используется в одном из режимов uIP - пакет бьется на два подпакета поменьше, и оба посылаются не дожидаясь ACK. И затем ловятся ACKи уже от обоих. Однако, несмотря на то что это работает, это называется переложить свои проблемы на принимающую сторону. Меня заказчик порвет, обнаружив такую особенность работы. И так как основной заказчик - провайдер, то обнаружит как пить дать. Есть ОС Nuttx, где используется часть стека uIP с надстройкой - в которой реализован механизм отложенных ACK. Пользователь сбрасывает ему порцию данных размером несколько пакетов (сколько не жалко памяти), а надстройка бьет их на подпакеты 1500 байт и организует всю кухню отложенных ACK. Проблема широко описана (c) fk0
image