|
|
  |
Самый быстрый и самый маленький TCP-стек., По просьбам трудящихся. |
|
|
|
Jul 31 2011, 09:24
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Rst7 @ Jul 31 2011, 00:34)  Допилил свой стек до Release. В THUMB показывает в среднем на нескольких прогонах 10000 кбит/сек. Интересно, на сколько производительней кортекс, и конкретно STM32 по сравнению с ARM7 и конкретно AT91SAM7. Сразу предупреждаю, что не хочу открывать вторую линию фронта по поводу атмелов, стм-ов, кортексов и арм-ов. Вопрос только к Rst7. Есть ли возможность потестить на AT91SAM7 Ваш стек. Я, честно, говоря, не сильно смотрел Ваше произведение - только одним глазком. И не сравнивал - своими мыслями голова забита. Цитата(prottoss @ Jul 31 2011, 15:21)  ...Есть ли возможность... Наверное фигню сморозил - проще, может быть, портировать самому Ваш стек на свою платку Как нить возьмусь. Просто, ради интереса
--------------------
|
|
|
|
|
Jul 31 2011, 10:58
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
QUOTE Наверное фигню сморозил - проще, может быть, портировать самому Ваш стек на свою платку Если мне не изменяет память, то там придется потрудиться, ибо в Atmel'овском EMAC'е по 128 байт кусочки пакетов. Но решаемо, в принципе, тоже без копирования. Кроме того, рекомендую собирать в ARM-режиме, будет эффективнее. Единственный минус - довольно накладная процедура переворота байт в длинном слове, которая htonl/ntohl. Однако, ее необходимо инлайнить в любом случае, иначе будет плохо. У меня, к сожалению, нет подходящей железки для порта. Кроме того, рекомендую подождать чуть-чуть, я таки сделаю вынос работы с железом и добавлю возможность отложенных обработок колбеков в менее приоритетных задачах.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jul 31 2011, 11:08
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Rst7 @ Jul 31 2011, 16:58)  Если мне не изменяет память, то там придется потрудиться, ибо в Atmel'овском EMAC'е по 128 байт кусочки пакетов. Но решаемо, в принципе, тоже без копирования. Не изменяемые кусочки тока на прием. На передачу можно размер буферов регулировать в некоторых пределах, хотя я не вижу смысла отказываться от размера в 128 байт на блок. Достаточно оптимально... Ой, наверное сейчас кто-то даст по шее... Цитата(Rst7 @ Jul 31 2011, 16:58)  Кроме того, рекомендую собирать в ARM-режиме, будет эффективнее. Единственный минус - довольно накладная процедура переворота байт в длинном слове, которая htonl/ntohl. Однако, ее необходимо инлайнить в любом случае, иначе будет плохо. Интересно, но в ARM-режиме производительность немного ниже чем в THUMB. Для организации переворота  пользуюсь макросами Код #define MAKEUINT16(byte_h, byte_l) ((UINT16)((((UINT16)(byte_h)) << 8)|(UINT16)(byte_l))) #define HIBYTE(word) ((UINT8)(((UINT16)(word)) >> 8)) #define LOBYTE(word) ((UINT8)(word))
#define MAKEUINT32(word_h, word_l) ((UINT32)((((UINT32)(word_h)) << 16)|(UINT32)(word_l))) #define HIWORD(dword) ((UINT16)(((UINT32)(dword)) >> 16)) #define LOWORD(dword) ((UINT16)(dword))
#define SWAP16(word) (MAKEUINT16(LOBYTE(word), HIBYTE(word))) #define SWAP32(dword) (MAKEUINT32(SWAP16(LOWORD(dword)), SWAP16(HIWORD(dword)))) Цитата(Rst7 @ Jul 31 2011, 16:58)  ...рекомендую подождать чуть-чуть... Да я и не спешу
--------------------
|
|
|
|
|
Jul 31 2011, 11:14
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
QUOTE Интересно, но в ARM-режиме производительность немного ниже чем в THUMB. Я проверял, код намного более эффективный в данном случае. QUOTE Для организации переворота пользуюсь макросами Есть намного более оптимальный проворот 32хбитного числа.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Jul 31 2011, 11:20
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (prottoss @ Jul 31 2011, 13:17)  Не сомневаюсь услышать это от Вас. Поделитесь секретной информацией?  Например: CODE 19 __arm ulong htonl( ulong n ) 20 { 21 ulong t; 22 23 t = n ^ ( (n << 16) | (n >> 16) ); 24 t &= ~0x00FF0000; 25 n = ( n << 24 )|( n >> 8 ); 26 n ^= ( t >> 8 ); 27 28 return( n ); \ htonl: \ 00000000 601820E0 EOR R1,R0,R0, ROR #+16 \ 00000004 FF18C1E3 BIC R1,R1,#0xFF0000 \ 00000008 2114A0E1 LSR R1,R1,#+8 \ 0000000C 600421E0 EOR R0,R1,R0, ROR #+8 \ 00000010 0EF0A0E1 MOV PC,LR ;; return 29 } Заинлайнить само собой тоже можно.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Aug 1 2011, 04:42
|
Группа: Участник
Сообщений: 8
Регистрация: 17-10-07
Из: Чебоксары
Пользователь №: 31 432

|
Собрал версию 1318 на LPC1769 @ 100 Mhz. Тест скорости показывает 91929...94360 Kbit/s. На более ранних версиях (1315 например) такой стабильности не было - скорость плясала от 40000 до 90000 Kbit/s практически случайным образом. EMAC: LAN8720A-CP.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|