docker性能测试

测试环境:
操作系统:CentOS7、openstack
nova-docker启动的centos7、openstack环境启动的centos7虚拟机
CPU:Intel(R) Xeon(R) CPU E5-2690 v3 @ 2.60GHz * 2
内存:Micron 2133MHz 16G * 8
网卡:Intel Corporation 82599ES 10-Gigabit
SFI/SFP+ Network Connection
关键字:Linpack、netperf、iometer

docker与虚拟机计算效率比较

在测试中是通过运算Linpack程序来获得计算能力数据的。结果如下图所示: 

图中从左往右分别是物理机、docker和虚拟机的计算能力数据。可见docker相对于物理机其计算能力几乎没有损耗,而虚拟机对比物理机则有着非常明显的损耗。虚拟机的计算能力损耗在50%左右。 
为什么会有这么大的性能损耗呢?一方面是因为虚拟机增加了一层虚拟硬件层,运行在虚拟机上的应用程序在进行数值计算时是运行在Hypervisor虚拟的CPU上的;另外一方面是由于计算程序本身的特性导致的差异。虚拟机虚拟的cpu架构不同于实际cpu架构,数值计算程序一般针对特定的cpu架构有一定的优化措施,虚拟化使这些措施作废,甚至起到反效果。比如对于本次实验的平台,实际的CPU架构是2块物理CPU,每块CPU拥有16个核,共32个核,采用的是NUMA架构;而虚拟机则将CPU虚拟化成一块拥有32个核的CPU。这就导致了计算程序在进行计算时无法根据实际的CPU架构进行优化,大大减低了计算效率。

docker与虚拟机内存访问效率比较

内存访问效率的比较相对比较复杂一点,主要是内存访问有多种场景: 
(1)大批量的,连续地址块的内存数据读写。这种测试环境下得到的性能数据是内存带宽,性能瓶颈主要在内存芯片的性能上; 
(2)随机内存访问性能。这种测试环境下的性能数据主要与内存带宽、cache的命中率和虚拟地址与物理地址转换的效率等因素有关。 
以下将主要针对这两种内存访问场景进行分析。在分析之前我们先概要说明一下docker和虚拟机的内存访问模型差异。下图是docker与虚拟机内存访问模型: 

可见在应用程序内存访问上,虚拟机的应用程序要进行2次的虚拟内存到物理内存的映射,读写内存的代价比docker的应用程序高。 
下图是场景(1)的测试数据,即内存带宽数据。左图是程序运行在一块CPU(即8核)上的数据,右图是程序运行在2块CPU(即16核)上的数据。单位均为GB/s。 
 
从图中数据可以看出,在内存带宽性能上docker与虚拟机的性能差异并不大。这是因为在内存带宽测试中,读写的内存地址是连续的,大批量的,内核对这种操作会进行优化(数据预存取)。因此虚拟内存到物理内存的映射次数比较少,性能瓶颈主要在物理内存的读写速度上,因此这种情况docker和虚拟机的测试性能差别不大; 
内存带宽测试中docker与虚拟机内存访问性能差异不大的原因是由于内存带宽测试中需要进行虚拟地址到物理地址的映射次数比较少。根据这个假设,我们推测,当进行随机内存访问测试时这两者的性能差距将会变大,因为随机内存访问测试中需要进行虚拟内存地址到物理内存地址的映射次数将会变多。结果如下图所示。 

左图是程序运行在一个CPU上的数据,右图是程序运行在2块CPU上的数据。从左图可以看出,确实如我们所预测的,在随机内存访问性能上容器与虚拟机的性能差距变得比较明显,容器的内存访问性能明显比虚拟机优秀;但出乎我们意料的是在2块CPU上运行测试程序时容器与虚拟机的随机内存访问性能的差距却又变的不明显。 
针对这个现象,IBM的论文给出了一个合理解释。这是因为当有2块CPU同时对内存进行访问时,内存读写的控制将会变得比较复杂,因为两块CPU可能同时读写同一个地址的数据,需要对内存数据进行一些同步操作,从而导致内存读写性能的损耗。这种损耗即使对于物理机也是存在的,可以看出右图的内存访问性能数据是低于左图的。2块CPU对内存读写性能的损耗影响是非常大的,这个损耗占据的比例远大于虚拟机和docker由于内存访问模型的不同产生的差异,因此在右图中docker与虚拟机的随机内存访问性能上我们看不出明显差异。

docker与虚拟机启动时间及资源耗费比较

上面两个小节主要从运行在docker里的程序和运行在虚拟机里的程序进行性能比较。事实上,docker之所以如此受到开发者关注的另外一个重要原因是启动docker的系统代价比启动一台虚拟机的代价要低得多:无论从启动时间还是从启动资源耗费角度来说。docker直接利用宿主机的系统内核,避免了虚拟机启动时所需的系统引导时间和操作系统运行的资源消耗。利用docker能在几秒钟之内启动大量的容器,这是虚拟机无法办到的。快速启动、低系统资源消耗的优点使docker在弹性云平台和自动运维系统方面有着很好的应用前景。

docker与虚拟机网络性能比较

采用netperf软件,分别使用TCP_STREAM | UDP_STREAM | TCP_RR | UDP_RR 四中模式测试性能和延迟

docker与虚拟机存储性能比较

采用iometer分别以顺序读、随机读、顺序写、随机写四中模式对如下3中场景进行测试,测试过程中文件系统采用ext4 测试前预热30s,每一种测试用例测试时间3分钟

参考文献

cbl709《docker与虚拟机性能比较》2015-02-26

@线超博《Native、Docker容器和KVM虚拟机网络性能对比测试》

时间: 2024-10-21 15:46:17

docker性能测试的相关文章

Docker五种存储驱动原理及应用场景和性能测试对比

Docker最开始采用AUFS作为文件系统,也得益于AUFS分层的概念,实现了多个Container可以共享同一个image.但由于AUFS未并入Linux内核,且只支持Ubuntu,考虑到兼容性问题,在Docker 0.7版本中引入了存储驱动, 目前,Docker支持AUFS.Btrfs.Device mapper.OverlayFS.ZFS五种存储驱动.就如Docker官网上说的,没有单一的驱动适合所有的应用场景,要根据不同的场景选择合适的存储驱动,才能有效的提高Docker的性能.如何选择

用Docker安装Web前端性能测试工具YellowLabTools

一.YellowLabTools概述 1.YellowLabTools简介 Yellow Lab Tools:是一款开源的Web前端性能测试工具,具有一些在其他工具上无法看到的独特功能,如页面加载时,JavaScript与DOM互动和其他程序代码验证问题. Yellow Lab Tools 偏向于一个发现不良实践的工具,会综合页面权重.请求数.DOM.错误的Javascript.错误的CSS等方面取得一个综合评分.并显示出在加载页面的过程中,DOM 是如何相互影响. 2.YellowLabToo

【Docker】性能测试监控平台搭建:InfluxDB+Grafana+Jmeter+cAdvisor

https://www.cnblogs.com/Detector/p/10104254.html 前言 在做性能测试时,如果有一个性能测试结果实时展示的页面,可以极大的提高我们对系统性能表现的掌握程度,进而提高我们的测试效率.但是我们每次打开Jmeter都会有几个硕大的字提示别用GUI模式进行负载测试,而且它自带的监视器效果实在一般:在Windows下渲染效果不好,在linux环境(非GUI环境)下更是无法使用,这一点我在如何选择性能测试工具中有过简单的描述. 所以,在做性能测试时,为Jmete

[转载] Docker背后的内核知识——cgroups资源限制

原文: http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isolation 上一篇中,我们了解了Docker背后使用的资源隔离技术namespace,通过系统调用构建一个相对隔离的shell环境,也可以称之为一个简单的“容器”.本文我们则要开始讲解另一个强大的内核工具——cgroups.他不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重.计算使用量.操控进程启停等等.在介绍完基

基于Docker的持续发布都要解决哪些问题 第一集

郑昀编著,文字资料来自于张帆.白俊华.刘飞宇以及网络资料 创建于2015/10/21 最后更新于2015/10/29 关键词:Docker,容器,持续集成,持续发布,CI,私有云 本文档适用人员:广义上的技术人员 提纲: 集装箱还是卷挂载? Host Networking 还是 Bridge Networking? 容器要固定IP吗? 容器内部如何获取宿主机的IP? 待续   首先,你要明白容器并不是虚拟机,虽然它可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于资源要求过高而无法解决的问题

活动干货|基于Docker的DevOps实现

作者:精灵云 众所周知,传统开发模式已经面临了诸多难题.首先,在代码集成方面,因为没有合适粒度的代码合并,大规模的合并会有很大的风险,且传统开发模式中没有自动化测试,以至于测试周期特别长,人力成本高昂.其次,传统开发中的单体应用,通常都很庞大,单体应用把所有模块都包含在一个应用中,升级单个模块也需要对整个应用进行升级,所以升级和创新都很不方便,常见的比如银行系统就是如此. 同时,传统的开发模式中单独采用微服务的情况也会由于服务数量多而没有有效管理,在大批量的部署和测试的时候容易出现问题.除此之外

Docker背后的内核知识——cgroups资源限制(转)

时间 2015-04-20 21:10:00 InfoQ 原文  http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isolation 主题 Cgroups Docker 上一篇中,我们了解了Docker背后使用的资源隔离技术namespace,通过系统调用构建一个相对隔离的shell环境,也可以称之为一个 简单的“容器”.本文我们则要开始讲解另一个强大的内核工具——cgroups.他不仅可以限制被

calico性能测试

硬件环境: 三台虚拟机: 192.168.99.129 master(kube-apiserver.kube-controller-manager.kube-proxy.kube-scheduler.kubelet.etcd.calico.docker) 192.168.99.130 slave1(kube-proxy.kubelet.etcd proxy.calico.docker.dns) 192.168.99.131 slave2(kube-proxy.kubelet.etcd proxy

docker基础理论知识

Docker实现的两个基本理论知识 一.NameSpace:内核的实现技术,隔离机制. ●PID NameSpace:(隔离pid)每一个用户空间都有一个唯一的PID号,彼此之间不会干扰.从Linux2.6.24内核版本开始引入的,是一种最新的技术. ●Network NameSpace:真正起源于Linux2.6.29,实现与网络用户隔离的.(网络设备.网络线.端口资源隔离) ●User NameSpace:实现用户和用户组资源隔离的.Linux3.8 ●IPC NameSpace: 进程间通