利用iperf网络带宽测试工具看多线程及多核编程
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
导言
不少人在编程的时间迷信于多线程能够提高效率但很少有人去摸清楚背后的量化模型
让快有快的理由慢有慢的道理在逻辑上有比较严密的证明过程
我们知道iperf工具可以测定主机间的网络带宽。
但如果将iperf用于同一台主机内的网络带宽测试是否可以从一个视角观察到主机内CPU与内存间带宽极限呢
我相信以iperf的成熟和历经风霜它确实可以做到这点也是我们普通程序员照猫画虎后所能达到的高度
这是本文立论的锚点
结论先行
- 单核单发处理已经能够接近或达到硬件平台极限
- 增加并发会降低每个核的处理带宽且整体提升也相当有限
对于环回测试即可认为达到CPU与内存带宽极限
对于远端测试即可认为达到CPU与外部网卡带宽极限
多线程编程经验
- 从CPU和内存的带宽极限可以推算内存访问密集型任务的多线程数量上限
- 如果单线程可以满足处理性能建议单线程处理。可类比Redis的单线程处理的强大能力
- 某些硬件平台CPU和内存的带宽比较低但cpu核数比较多多线程编程时值得警惕消耗内存带宽型线程的数量和分布
iperf测定的内存带宽远高于网络带宽存在不同的倍数关系。
简单来看即使我们程序内部再折腾几次同样级别的的内存拷贝应该还是可以满足网络带宽处理要求的单CPU富有余力
进一步发展来看iperf测试网络带宽工具甚至可以作为硬件平台选型的参考工具。
附录.测试方法
本机环回测试
启动服务端监听
iperf3 -s
客户端测试
# 单发
iperf3 -c localhost
# 双发、多发并行
iperf3 -c localhost -P [2..10]
远端客户端测试
# 单发
iperf3 -c remotehost
# 双发、多发并行
iperf3 -c remotehost -P [2..10]
iperf对比验证
无独有偶多方验证