作为一名嵌入式开发工程师,我经常需要评估设备的网络性能。iPerf作为一款经典的网络性能测试工具,因其跨平台特性和简单易用,成为我的首选方案。今天我将分享如何在LuatOS环境下,利用iPerf库对Air780EPM等嵌入式设备进行网络性能测试。
注意:如果使用核心板,必须搭配AirETH_1000配件板才能实现以太网功能。该配件板采用工业级CH390H芯片,支持10/100M自适应。
LuatOS开发环境:
网络参数规划:
iPerf通过建立客户端-服务器模型进行测试:
TCP模式:测量可靠传输的最大吞吐量
UDP模式:测量极限吞吐量和丢包率
技术细节:LuatOS当前版本仅支持iPerf2协议,其默认TCP窗口大小为85.3KB,在嵌入式设备上需根据内存情况调整。
LuatOS将iPerf功能抽象为三个核心API:
lua复制-- 服务器模式(阻塞式)
iperf.server(netType, [port], [timeout])
-- 客户端模式(异步回调)
iperf.client(netType, serverIp, serverPort, [duration], [callback])
-- 中断测试
iperf.abort()
其中netType支持:
iperf_server.lua:lua复制local function networkReady()
log.info("NET", "IP:", netdrv.ipv4("eth"))
iperf.server("eth", 5001, 60) -- 60秒超时
end
sys.taskInit(function()
netdrv.setup("eth", "eth0", {phy=0, rst=12})
netdrv.dhcp("eth", true)
netdrv.on("eth", "link", networkReady)
end)
iperf_client.lua:lua复制local serverIP = "192.168.1.100" -- 改为实际服务器IP
sys.taskInit(function()
netdrv.setup("eth", "eth0", {phy=0, rst=12})
netdrv.dhcp("eth", true)
sys.waitUntil("NET_READY", 30000) -- 等待网络就绪
iperf.client("eth", serverIP, 5001, 30, function(result)
log.info("IPERF", "Bandwidth:", result.bandwidth.."Mbps")
end)
end)
phy=0:指定PHY芯片地址rst=12:复位引脚配置(根据硬件设计调整)在100Mbps局域网环境下,Air780EPM的测试结果通常为:
| 测试方向 | 平均带宽 | 抖动 | 丢包率 |
|---|---|---|---|
| 上行(TCP) | 94.2Mbps | - | 0% |
| 下行(TCP) | 93.8Mbps | - | 0% |
| 上行(UDP) | 95.1Mbps | 0.12ms | 0.2% |
lua复制-- 在server和client代码中添加:
sys.setGlobal("IPERF_TCP_WINDOW", 16384) -- 16KB窗口
lua复制sys.taskInit(function()
sys.setPriority(1) -- 设置高任务优先级
-- iperf代码...
end)
lua复制netdrv.setup("eth", "eth0", {
phy = 0,
rst = 12,
phy_reg = {
{0x1f, 0x0100}, -- 开启全双工
{0x10, 0x786f} -- 广告100M能力
}
})
现象:客户端报"Connection refused"
lua复制log.info("NETSTAT", json.encode(netdrv.status("eth")))
现象:带宽测试结果异常低
lua复制netdrv.setPromisc("eth", true)
netdrv.on("eth", "raw", function(data)
-- 分析原始数据包
end)
lua复制sys.timerLoopStart(function()
log.info("CPU", "Usage:", sys.cpuUsage())
end, 1000)
对于WiFi模组(如Air724UG),只需修改netType:
lua复制-- 配置WiFi连接
netdrv.setup("wifi", "uart1", {ssid="Your_SSID", password="Your_Pass"})
iperf.client("wifi", serverIP, 5001)
结合LuatOS的定时任务功能,可实现:
lua复制sys.timerLoopStart(function()
local result = iperf.client("eth", serverIP, 5001, 10)
-- 上传结果到云平台
http.request("POST", "http://api.example.com/log", json.encode(result))
end, 3600000) -- 每小时测试一次
在实际项目中,我发现通过合理设置TCP窗口大小和任务优先级,可以使Air780EPM的TCP带宽稳定性提升15%以上。建议首次测试时先用短时长(10秒)验证基本功能,再逐步延长测试时间获取更准确结果。