This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1294KCPDT:LwIP 堆栈性能不足-有什么建议?

Guru**** 2549240 points
Other Parts Discussed in Thread: TM4C1294KCPDT

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/962342/tm4c1294kcpdt-insufficent-performance-of-lwip-stack---any-suggestions

器件型号:TM4C1294KCPDT

您好!

我有一个外部器件 通过 TCP/IP 连接到基于定制 TM4C1294KCPDT 的电路板。 PC 上有软件连接到该板。

器件向我的电路板发送一些数据、吞吐量为:

每秒100次- 78字节的数据包加上2428字节的数据包、以及每秒一次的一些小数据包、因此每秒大约256KB。 我可以接收和处理所有这些数据。

因此、我需要向 PC 发送经过处理的数据、这大约是每秒120字节+ 2418字节100次。

问题是,我可以成功地发送小数据,120字节@ 100Hz,加上 lagre 数据,2418字节@ 20Hz, 但是、我将数据速率提高到50Hz 及更高、我看到 LwIP 报告 TCP 发送缓冲区溢出、所以我需要等待数据溢出、我会丢失一些数据。

是否有任何 lwip 调优或任何其他可能的权变措施? 谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     LwIP 提供各种参数来微调配置。 您应该在 lwipopts.h 文件中找到它们。 下面只是与内部存储器管理相关的参数的一个片段。  请注意、以下参数值就是我们用于 enet_io.c 示例的值。 您可能已经对它们进行了优化、以适合您的应用。 TCP 部分下也有一些参数。 我认为、如果您将问题发布到 LwIP 论坛、他们支持软件的专家将对哪些参数以及更改多少进行充分了解、从而更好地解决您的溢出问题。 从我的角度来看、我只能告诉您增加这些参数、直到您看到可以解决问题的差异、这更多是试用和错误。 如果您确实找到了哪些参数可以解决溢出问题、请进行回帖、这样做可能会使面临相同问题的社区受益。  

    //
    //
    //------ 内部内存池大小--------------------------------------------------------
    //
    //
    #define MEMP_NUM_PBUF 48 //默认16
    //#define MEMP_NUM_RAW_PCB 4.
    //#define MEMP_NUM_UDP_PCB 4.
    #define MEMP_NUM_tcp_PCB 16 //默认5
    //#define MEMP_NUM_tcp_PCV_Listen 8.
    //#define MEMP_NUM_tcp_SEG 16.
    //#define MEMP_NUM_REASSDATA 5.
    //#define MEMP_NUM_ARP_queue 30
    //#define MEMP_NUM_IGMP_GROUP 8
    #define MEMP_NUM_SYS_TIMEOUT 8.
    //#define MEMP_NUM_NETBUF 2.
    //#define MEMP_NUM_NETCONN 4.
    //#define MEMP_NUM_TCPIP_MSG_API 8.
    //#define MEMP_NUM_TCPIP_MSG_INPKT 8.
    #define PBUF_POOL_SIZE 48 //默认值16

    //
    //
    //------ TCP 选项---------
    //
    //
    #define LWIP_TCP 1.
    //#define tcp_TTL (IP_DEFAULT_TTL)
    #define tcp_WND 4096 //默认值为2048
    //#define tcp_MAXTX 12.
    //#define tcp_SYNMAXRTX 6.
    //#define tcp_queue_OOSEQ 1.
    #define tcp_MSS 1500 //默认值为128
    //#define tcp_calculate_EFF_send_MSS 1.
    #define tcp_snd_BUF (4 * tcp_mss)   
    //#define tcp_snd_QUEUELEN (4 *(tcp_snd_BUF/tcp_MSS))
    //#define tcp_SNDLOWAT (tcp_snd_BUF/2)
    //#define tcp_listen_backlog 0
    //#define tcp_default_listen_backlog 0xff

    下面是 LwIP 链接、用于对一些参数进行说明。  https://lwip.fandom.com/wiki/Tuning_TCP。您可能需要首先尝试增大 tcp_snd_BUF。 同样、LwIP 论坛也是您在此获得帮助的最佳场所、因为这是一个第三方软件、我们并不是所有参数的专家。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我的:

    //
    ////
    --- 内部内存池大小--------------------------------------------------------
    ////
    *****************
    #define MEMP_NUM_PBUF 48 //默认16
    //#define MEMP_NUM_RAW_PCB 4
    //#define MEMP_NUM_UDP_PCB 4
    #define MEMP_NUM_tcp_PCB 16 //默认5
    //#define MEMP_NUM_tcp_PCV_Listen 8
    //#define MEMP_NUM_tcp_SEG 16
    //#define MEMP_NUM_REASSDATA 5
    //#define MEMP_NUM_ARP_queue 30
    //#define MEMP_NUM_IGMP_GROUP 8
    #define MEMP_NUM_SYS_TIMEOUT 8
    //#define MEMP_NUM_NETBUF 2
    //#define MEMP_NUM_NETCONN 4
    //#define MEMP_NUM_TCPIP_MSG_API 8
    //#define MEMP_NUM_TCPIP_MSG_INPKT 8
    #define PBUF_POOL_SIZE 48 //默认16
    
    //*********
    ////
    --- TCP 选项---------
    ////
    *****************
    #define LWIP_TCP 1
    //#define tcp_TTL (IP_DEFAULT_TTL)
    #define tcp_WND 4096 //默认值为2048
    //#define tcp_MAXTX 12
    //#define tcp_SYNMAXRTX 6
    //#define tcp_queue_OOSEQ 1
    #define tcp_mss 1500 //默认为128
    //#define tcp_calculate_EFF_send_MSS 1
    #define tcp_snd_BUF (16 * tcp_mss)
    //默认为256,为6 *
    #define MEMP_NUM_tcp_SEG 64
    //#define tcp_snd_QUEUELEN (4 *(tcp_snd_BUF/tcp_MSS)//#define
    tcp_snmOWAT (tcp_snd_BUF/2)
    //#define tcp_listen_backlog 0
    //#define tcp_default_listen_backlog 0xFF
    

    问题是,我可以传递消息有效载荷的静态缓冲区(不是所有数据包,通过),但在这种情况下,也会发生 PCB->snd_buf 下降。

    增加 tcp_snd_BUF 不能解决问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     您是否有机会通过 lwip.100.n7.nabble.com/lwip-users-f3.html 联系 LwIP 支持

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Oleg Kobrin"]每秒100次-一个78字节的数据包加上2428字节的数据包,以及一些每秒一次的小数据包[/引用]

    您好 Oleg、

    您的链路速度是多少- 10 Mbps 或100 Mbps? 您的 MOSC 时钟速率是否为25MHz?