跳转至

驱动程序测试:大文件传输速度

测试原理

通过 HTTP 下载大文件可以在持续高数据包负载下轻松测试完整的收发数据路径。time 命令可用于验证下载期间是否保持了预期的吞吐量。

为了排除其他潜在的延迟来源,测试应多次下载同一个文件。在第二次及后续的下载中,文件很可能直接从缓存中提供,这将消除任何与磁盘相关的延迟。对多次下载的时间取平均值可以最大限度地减少任何瞬态网络状况带来的干扰。

A network card

准备

创建一个包含伪随机数据的 512MB 文件,例如使用:

  dd if=/dev/urandom of=512mb bs=1M count=512

把你的伪随机数据文件复制到本地网络上的一台 Web 服务器。

创建一个 iPXE 脚本,多次下载该文件,并对除第一次之外的每次下载计时。例如:

  #!ipxe

  imgfetch 512mb ; imgfree
  echo Starting test
  time imgfetch 512mb ; imgfree
  time imgfetch 512mb ; imgfree
  time imgfetch 512mb ; imgfree
  time imgfetch 512mb ; imgfree
  time imgfetch 512mb ; imgfree
  time imgfetch 512mb ; imgfree
  time imgfetch 512mb ; imgfree
  time imgfetch 512mb ; imgfree
  time imgfetch 512mb ; imgfree
  shell

测试步骤

  1. 开始之前,确保网线已连接到提供 DHCP 服务器的网络,并且网络上有一台可以提供你的伪随机数据文件的 Web 服务器。
  2. 引导进入启用了 TIME_CMD 的 iPXE 版本。
  3. 使用 ifstat 确定你的网络接口名称(下文假定为 net0)。
  4. 使用 dhcp net0 打开接口并获取 IP 地址。
  5. 引导测试脚本。
  6. 观察测得的时间。良好的结果是所有时间都大致相同,且速度与网络速度相称。例如,在千兆网络上,512MB 文件应能在 4.6 秒内通过 HTTP 下载完成。[^1]

[^1]: 1000000000 位/秒相当于 119MB/s 的原始数据速率。使用标准以太网 MTU 时,HTTP 下载期间每个数据包有 66 字节的以太网+IP+TCP 头部和 1448 字节的数据:这会把有效速度降至 114MB/s。因此,512MB 文件应在 4.5 秒内下载完成。iPXE 的定时器分辨率只有 1/18 秒,所以 4.6 秒的结果是正常的。