Don't think! Just do it!

종합 IT 기술 정체성 카오스 블로그! 이... 이곳은 어디지?

임베디드 소프트웨어/FreeRTOS

LWIP TCP Send가 느릴 때

방피터 2023. 3. 9. 22:43

stm32f407vg + freeRTOS 조합에서 lwip을 사용하고 있는데

TCP Send에 문제가 있는 걸 발견했어!

왠지 모르게 조금 늦게 패킷이 나가더라구.

작은 패킷은 상관없는데

약간 큰 패킷(그래봐야 1024bytes)은 바로 나갈 때도 있고 딜레이가 생길 때도 있고 하더라구.

한.. 0.5초에 한번쯤 나가는 느낌?

해결하려고 신나게 뻘짓을 했지.

TCP Thread 스택 크기가 작아서 그런가?

하고 TCP_THREAD_STACKSIZE도 4096 Word(16k)까지 늘려봐도 안되고~

Default값은 1024 words(4k bytes)

혹시 Segment 때문에 그런가 싶어서 536 bytes -> 1460 bytes(최대값)으로도 변경하고

Sender buffer도 이빠이 늘려보고~

Queue length도 늘리고~

해봐도 증상에 변함이 없더라고...

TCP Segment 설정

인터넷에 검색을 좀 해보니까

nagle 알고리즘(여러개의 쪼개진 패킷을 한번에 묶어서 보내는 거)때문에 그럴수도 있다고 그래서

TCP_NODELAY도 넣어봤는데 이것도 마찬가지..

안돼!!!!!

소켓을 non blocking으로 변경해보라고도 해서 이것도 해봤어!

안돼!

정말 TCP heap 늘리는 거 말고 할 수 있는 건 다 해봤어!!

다 안돼!

개 짜증!!!!

응?

응응?

... 늘려볼까?

Default값은 1600 bytes 👇 인데 이걸 4096 bytes로 늘렸더니..

겁나 잘 동작하더라고;;;

TCP Heap

TCP send할 때 heap에다가 복사해서 쓰나봐 ㅎㅎㅎ

확실하게 알려고 설명을 한번 읽어봤는데 데이터 많이 보낼거면 힙 사이즈 커야 한다고 나와 있네;;;

에휴... 맨날 위즈네트 칩만 쓰다가 LWIP에 너무 소홀했나봐 ㅠㅠ

만약에 application이 많은 데이터를 보낼거면 Heap 사이즈 커져야 한다는 설명

결론!!

lwip 쓸떼 뭔가 Send 하는데 시간이 오래 걸린다면 Heap 부터 늘려보자!
👋👋👋

반응형

'임베디드 소프트웨어 > FreeRTOS' 카테고리의 다른 글

FreeRTOS + Lwip socket 갯수 조정  (0) 2023.08.01
vApplicationStackOverflowHook()  (1) 2023.02.18
STM32 MCU를 또 만지네...  (0) 2023.02.18