使用python提取iperf数据并绘制吞吐率曲线

[复制链接]
 楼主| keer_zu 发表于 2022-9-23 19:38 | 显示全部楼层 |阅读模式
iperf跑出来的数据无法方便的绘制曲线,因此使用python中的正则表达式提取出数据并使用matplotlib进行绘图。


首先需要将iperf输出的日志存进一个文件里,文件示例:
  1. ------------------------------------------------------------
  2. Server listening on TCP port 9009
  3. TCP window size: 85.3 KByte (default)
  4. ------------------------------------------------------------
  5. [  6] local 10.0.0.10 port 9009 connected with 10.0.0.11 port 39328
  6. [ ID] Interval       Transfer     Bandwidth
  7. [  6]  0.0- 1.0 sec  10.2 MBytes  85.3 Mbits/sec
  8. [  6]  1.0- 2.0 sec  11.4 MBytes  95.7 Mbits/sec
  9. [  6]  2.0- 3.0 sec  11.4 MBytes  95.6 Mbits/sec
  10. [  6]  3.0- 4.0 sec  11.4 MBytes  95.7 Mbits/sec
  11. [  6]  4.0- 5.0 sec  11.4 MBytes  95.6 Mbits/sec
  12. [  6]  5.0- 6.0 sec  11.4 MBytes  95.7 Mbits/sec
  13. [  6]  6.0- 7.0 sec  11.4 MBytes  95.6 Mbits/sec
  14. [  6]  7.0- 8.0 sec  11.4 MBytes  95.6 Mbits/sec
  15. [  6]  8.0- 9.0 sec  11.4 MBytes  95.6 Mbits/sec
  16. [  6]  9.0-10.0 sec  11.4 MBytes  95.7 Mbits/sec
  17. [  6] 10.0-11.0 sec  11.4 MBytes  95.6 Mbits/sec
  18. [  6] 11.0-12.0 sec  11.4 MBytes  95.7 Mbits/sec
  19. [  6] 12.0-13.0 sec  11.4 MBytes  95.6 Mbits/sec
  20. [  6] 13.0-14.0 sec  11.4 MBytes  95.7 Mbits/sec
  21. [  6] 14.0-15.0 sec  11.4 MBytes  95.6 Mbits/sec
  22. [  6] 15.0-16.0 sec  11.4 MBytes  95.6 Mbits/sec
  23. [  6] 16.0-17.0 sec  11.4 MBytes  95.7 Mbits/sec
  24. [  6] 17.0-18.0 sec  11.4 MBytes  95.6 Mbits/sec
  25. [  6] 18.0-19.0 sec  11.4 MBytes  95.6 Mbits/sec
  26. [  6] 19.0-20.0 sec  11.4 MBytes  95.7 Mbits/sec
  27. [  6]  0.0-20.6 sec   234 MBytes  95.1 Mbits/sec



 楼主| keer_zu 发表于 2022-9-23 19:39 | 显示全部楼层
然后运行下面的python程序进行数据提取和绘图

  1. import re
  2. import matplotlib.pyplot as plt
  3. import numpy as np

  4. time_list = []
  5. rate_list = []

  6. with open('./iperf-log.txt','r') as f:# iperf-log.txt为iperf日志文件名
  7.     row_data = f.readlines() # 读取iperf日志文件的每一行至一个list中
  8.     for line in row_data:    # 利用正则表达式进行匹配,可根据实际情况更改匹配内容
  9.         time = re.findall(r"-(.*) sec", line)
  10.         rate = re.findall(r"MBytes  (.*) Mbits", line)
  11.         if(len(time)>0):     # 当前行中有吞吐和时间数据时对数据进行存储
  12.             print(time)
  13.             time_list.append(float(time[0]))
  14.             rate_list.append(float(rate[0]))

  15. plt.figure()
  16. plt.plot(time_list, rate_list)
  17. plt.xlabel('Time(sec)')
  18. plt.ylabel('Bandwidth(Mbits/sec)')
  19. plt.grid()
  20. plt.show()

 楼主| keer_zu 发表于 2022-9-23 19:41 | 显示全部楼层
本帖最后由 keer_zu 于 2022-9-23 19:42 编辑

结果:

68777632d9ba434217.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1478

主题

12917

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部

1478

主题

12917

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部