1. Jperf与iperf简介
iperf是命令行形式的网络性能测试工具;而Jperf就是在iperf的基础上进行UI开发,搭建了界面的图形化网络性能测试工具。
是用来测试TCP/UDP的带宽、延迟抖动和数据包丢失等功能!
iperf -c server -ip -p server-port -i 1 -t 10 -w 20K |
可通过以上命令行来进行测试;
-c后跟客户端的模式、-ip就是IP地址、-p后跟端口号、-i时贷款间隔、-t就是测试时长、iw是带宽间隔。
第一行的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的网速测试平台,并且学习了内存、缓冲区的大小以及控制块的数量越大,就会让网速越快。