容器中的网络延迟相较于宿主机到底高多少?

今天一个从来没有用过docker容器的同事问了我一个网络延迟的问题,很简单,但我确没有准确回答出来。经过简单的验证,现在我把过程及结果分享给各位粉丝。

简短对话

容器中的网络延迟相较于宿主机有多高啊?

我不假思索的回答可以忽略不计吧

同事带着疑惑的的说了句,那你说说docker网络桥接的实现

在容器启动时,Docker引擎将veth pair设备的一端放在新创建的容器中,并命名为eth0,另一端放在宿主机中;docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关;这样它们就组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。相当于多了一层网络,就少不了网络解封包开销,看来是有影响的。

影响到底有多大呢?没有做过这方面的测试......

验证环境准备

本次验证工具我使用了Netperf,Netperf是一种网络性能的测量工具,可以测试基于TCP或UDP吞吐、响应速率。Netperf包括Clien和Server端。Server端主要用来实现监听工作,Client端进行测试。根据流量传输方式可分为以下三种:

  • 单方向最大吞吐传输大量数据。

  • 双方向交互传输数据,对于tcp为单连接。

  • 针对tcp,每个连接交互传输数据。

环境信息

总共两台机器,一台机器启动了NetPerf服务端;另外一台机器分别在容器内和宿主机上运行Netperf客户端。

NetPerf服务端

1.下载wget http://repo.iotti.biz/CentOS/7/x86_64/netperf-2.7.0-1.el7.lux.x86_64.rpm

2.安装 rpm -ivh netperf-2.7.0-1.el7.lux.x86_64.rpm

3.启动 netserver

NetPerf客户端

宿主机验证

首先直接在宿主机上安装Netperf,然后进行网络性能测试,如下所示:

TCP_RR 是 netperf 里专门用来测试网络延时的,缺省每次运行10秒钟。运行以后,我们还要计算平均每秒钟 TCP request/response 的次数,这个次数越高,就说明延时越小。如上所示,总共测试三轮,分别得出20146、20248、20221,平均是20221/s

容器中验证

在同一台客户端机器上,启动docker服务,并安装Netperf进行验证,命令如下所示[root@test ~]# docker run -d --name test -v /home/net/:/home/net/ docker.harbor.com/centos:7.8 sleep 36000

我这里相当于是把Netperf挂载到容器内部,然后执行:docker exec -it test bash进入容器内部安装Netperf。

同样运行了三轮,分别得出的是19546、19541、19259,平均是19448/s。

从数据上看容器中比宿主机少了773次。773/20221= 4%也就是容器中网络处理速度下降了4%,后来在网上找到了一些paper,有人得出结论是10%上下

容器中共享宿主机网络运行

[root@test ~]# docker run -d --name test --network host -v /home/net/:/home/net/ docker.harbor.com/centos:7.8 sleep 36000

可以发现当使用共享宿主机网络模式下,其网络延迟跟宿主机基本没有差异。

原因分析

网络延迟的原因也不难想象,因为每次网络数据传输都要经过veth接口,然后向外发送。这个虚拟的网络设备除了没有硬中断,只有软中断处理过程,其它跟网卡发送数据逻辑基本相似,虽然发送速度很快。但即便如此也带来了一定的网络开销,从而造成了网络延迟。

 

很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、高并发、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家。进入网址领取资料https://docs.qq.com/doc/DWkZTQVZCbUN0VUxL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值