• 正点原子lwIP学习笔记——Jperf测试网速


    1. Jperf与iperf简介

    简介
    iperf是命令行形式的网络性能测试工具;而Jperf就是在iperf的基础上进行UI开发,搭建了界面的图形化网络性能测试工具。

    是用来测试TCP/UDP的带宽、延迟抖动和数据包丢失等功能!

    iperf命令行

    iperf -c server -ip -p server-port -i 1 -t 10 -w 20K

    可通过以上命令行来进行测试;

    -c后跟客户端的模式、-ip就是IP地址、-p后跟端口号、-i时贷款间隔、-t就是测试时长、iw是带宽间隔。

    Jperf图形界面
    第一行的iperf command就是根据下面的图形化选择,通过设定的参数自动生成的iperf命令。

    • 服务端设置
      (1) Listen Port 监听端口 ;
      (2) client limit: 客户端限制,仅允许指定客户端连接 ;
      (3) Num Connections :最大允许连接的数量,为 0 不限制;
    • 客户端设置:
      (1) Server address 表示服务器地址;
      (2) Port 表示端口;
      (3) Parallel Streams 表示并发流;
    • 应用层设置:
      (1) Enable Compatibilitu Mode 兼容旧版本(当 server 端和 client 端版本不一样时使用);
      (2) Transmit 设置测试模式:传输字节总量大小 10Bytes 或者按传输时间总长度10秒;
      (3) Dual 复选框勾上表示同时进行双向传输测试;
      (4) Trade 复选框 勾上表示单独进行双向传输测试,先测 c 到 s 的带宽;
      (5) Representative File 表示指定需要传输的文件;
      (6) Print MSS 表示显示 tcp 最大 mtu 值;
    • 传输层设置:
      (1) TCP 协议 设置缓冲区大小;
      (2) TCP 协议 指定 TCP 窗口大小;
      (3) TCP 协议 设定 TCP 数据包的最大 mtu 值;
      (4) TCP 协议 设定 TCP 不延时;
      (5) UDP 协议 设置 UDP 最大带宽;
      (6) UDP 协议 设置 UDP 缓冲区;
      (7) UDP 协议 UDP 包封装大小:默认1470byte;
    • IP层设置:
      (1) TTL 表示 指定 ttl 值;
      (2) Type of Service 表示 服务类型( Type of Service ToS ),大小范围从 0x10 ( 最小延迟 )
      到 0x2 ( 最少费用 )在使用 802.11e 来控制服务质量的 WLAN 中, ToS 是映射在 Wi Fi
      多媒体 (WMM)存取范畴的 。

    2. lwIP如何提高网络传输速率

    虽然LAN8720A和YT8512C(正点原子开发板的PHY芯片)都是支持10M/100MBits/s的传输速率,但是网速必然受限于硬件

    影响因素举例
    如果内存和收发缓冲取能大一些,那么显然一次能接受到的数据更多,缓冲的数据也更多;TCP的滑动窗口越大,那么能处理的数据越多,传输速度也会越快;再例如控制块、监听和排队队列越大,也会是的缓冲空间变大,提高传输速度;最后再比如DMA描述符,其就是一个缓冲区,也会影响速率。

    3. lwIP网络测速

    lwIP是提供网络测速的代码的,其再lwiperf.c中;

    官方是直接给出了使用的示例的,我们自己使用的时候,直接比对examples文件夹下的lwiperf文件夹中的官方代码示例,就可以直接使用了。

    在lwip_demo中,可以直接调用lwiperf_start_tcp_server__default这个函数来完成网速的测试,传入的参数有两个,一个是lwiperf_report,一个是NULL;

    static void lwiperf_report(void *arg,
    enum lwiperf_report_type report_type,
    const ip_addr_t *local_addr,
    u16_t local_port,
    const ip_addr_t *remote_addr,
    u16_t remote_port,
    u32_t bytes_transferred,
    u32_t ms_duration,
    u32_t bandwidth_kbitpsec)

    可以通过直接printflwiperf_report之中的参数信息来完成测试,可以测试的参数有:动态IP地址、本地端口号、远程IP地址、远程端口号、转换速度、持续时间还有带宽。

    4. lwIP配置提高传输速率

    首先要找到lwipopts.h文件,这个文件完成了一些配置,可以通过改变这些配置来提升网络传输速率。

    例如MEM_SIZE就是内存堆的大小,可以配置大一点来提速;改变MEMP_NUM_PBUF来增加内存堆的数量以提高传输速率;增加MEMP_NUM_UDP_PCB和MEMP_NUM_TCP_PCB来增加UDP(TCP)的控制块数量也可以提速;提高MEMP_NUM_TCP_PCB_LISTEN增加监听控制块的数量,或者MEMP_NUM_TCP_SEG增加同时排队的TCP数量段,也可以提速;

    修改内存池也可以提速:比如增加PBUF_POOL_SIZE来增加内存池中每个内存块的大小,或者增加PBUF_POOL_BUFSIZE来增加pbuf池中每个pbuf的大小,均可以提速;

    修改TCP最大段同样可以影响网速:增加TCP_MSS来增加TCP的最大段(也就是TCP的最大分片,在传输层分包)也会提升网速;

    修改TCP的相关参数,比如发送缓冲区的大小TCP_SND_BUF,发送的队列TCP_SND_QUEUELEN以及窗口大小TCP_WND,这几个变量变大也会提升网速。

    再比如再ethernet.c中,可以修改DMA的大小来提升网速。

    在实验代码中就可以通过修改以上值,配合Jperf的界面来进行网速测试。

    总结

    主要学习的其实是有一个叫Jperf的网速测试平台,并且学习了内存、缓冲区的大小以及控制块的数量越大,就会让网速越快。

  • 相关阅读:
    k8s学习-CKA真题-负载均衡service
    【Linux】-进程间通信-匿名管道通信(以及模拟一个进程池)
    Revit中有序地命名很眼花?那你是不知道『视图命名』
    技术领先不意味着商业成功
    深度访谈丨工作13年的程序员老兵,当初为何选择Java?现在后悔吗?
    【Linux】C语言实现对文件的加密算法
    Rasa对话机器人之HelpDesk (五)
    【Android取证篇】华为设备跳出“允许USB调试“界面方法的不同方法
    数据结构(5.5_2)——并查集
    怎么在期货公司中选择正规的开户?
  • 原文地址:https://blog.csdn.net/xhj12138/article/details/133349935