• 利用iperf网络带宽测试工具看多线程及多核编程


    导言


    不少人,在编程的时间迷信于多线程能够提高效率,但很少有人去摸清楚背后的量化模型?

    让快有快的理由,慢有慢的道理,在逻辑上有比较严密的证明过程!

    我们知道,iperf工具可以测定主机间的网络带宽。

    但,如果将iperf用于同一台主机内的网络带宽测试,是否可以从一个视角观察到主机内CPU与内存间带宽极限呢?

    我相信,以iperf的成熟和历经风霜,它确实可以做到这点,也是我们普通程序员照猫画虎后,所能达到的高度!

    这是本文立论的锚点

    结论先行


    1. 单核单发处理,已经能够接近或达到硬件平台极限
    2. 增加并发,会降低每个核的处理带宽,且整体提升也相当有限

    对于环回测试,即可认为达到CPU与内存带宽极限 

    对于远端测试,即可认为达到CPU与外部网卡带宽极限

    多线程编程经验


    1. 从CPU和内存的带宽极限,可以推算内存访问密集型任务的多线程数量上限
    2. 如果单线程可以满足处理性能,建议单线程处理。可类比Redis的单线程处理的强大能力
    3. 某些硬件平台CPU和内存的带宽比较低,但cpu核数比较多,多线程编程时,值得警惕消耗内存带宽型线程的数量和分布

    iperf测定的内存带宽,远高于网络带宽,存在不同的倍数关系。

    简单来看,即使我们程序内部再折腾几次同样级别的的内存拷贝,应该还是可以满足网络带宽处理要求的,单CPU富有余力!

    进一步发展来看,iperf测试网络带宽工具,甚至可以作为硬件平台选型的参考工具。


    附录.测试方法


    本机环回测试

    启动服务端监听

    iperf3 -s

    客户端测试

    1. # 单发
    2. iperf3 -c  localhost
    3. # 双发、多发并行
    4. iperf3 -c  localhost -P [2..10]

    远端客户端测试

    1. # 单发
    2. iperf3 -c  remotehost
    3. # 双发、多发并行
    4. iperf3 -c  remotehost -P [2..10]

    iperf对比验证

    无独有偶,多方验证

  • 相关阅读:
    是时候优雅的和NullPointException说再见了
    Linux基础命令
    k8s对接ceph,ceph-csi方式
    【ARM 安全系列介绍 3.7 -- SM4 对称加密算】
    C++(day7)
    优化算法 -小批量随机梯度下降
    用人工智能预测彩票,利用大数据预测彩票
    51Sim核心参编!《中国智能网联汽车自动驾驶仿真测试白皮书》发布(附资源)
    【Node.js+koa--后端管理系统】设计动态发布、修改、查询、删除接口
    QSOP24封装的语音芯片优势列举
  • 原文地址:https://blog.csdn.net/jkler_doyourself/article/details/126440569