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命令。
虽然LAN8720A和YT8512C(正点原子开发板的PHY芯片)都是支持10M/100MBits/s的传输速率,但是网速必然受限于硬件。
如果内存和收发缓冲取能大一些,那么显然一次能接受到的数据更多,缓冲的数据也更多;TCP的滑动窗口越大,那么能处理的数据越多,传输速度也会越快;再例如控制块、监听和排队队列越大,也会是的缓冲空间变大,提高传输速度;最后再比如DMA描述符,其就是一个缓冲区,也会影响速率。
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地址、远程端口号、转换速度、持续时间还有带宽。
首先要找到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的网速测试平台,并且学习了内存、缓冲区的大小以及控制块的数量越大,就会让网速越快。