测试准备
测试目的
Docker在DeviceMapper这块支持两种存储模式,分别是docker默认的loop volume和Direct VLM。为了了解其中区别也是为了依据业务进行选型,所以选择了对二者进行性能测试。
测试范围
性能指标: IOPS、吞吐、IO响应(本次测试忽略)
测试环境:物理机(sas /raid50)、 Loop Container、 LVM Container
IO类型: 顺序读、顺序写、随机读、随机写、随机读写(数据读写值相加)
测试方法
测试参数:
idepth 64 bs:16k
IOPS/吞吐:
使用FIO测试一次的结果,命令行方面仅仅调整rw参数来实现不同的IO类型
fio -filename ./hello -direct=1 -iodepth 64 -thread -rw=randread -ioengine=libaio -bs=16k -size=100G -numjobs=10 -runtime=1000 -group_reporting -name=mytest |
IO响应
暂时略过
测试数据
宿主机单Container环境测试
LVM Direct的设备的顺序读写是物理的一半,而随机读写则非常接近于裸的物理磁盘。
LOOP几乎是一个超越SSD性能的数据,fio参数无法跨越外层文件系统的缓存。
这里给出一个简答数据,当单台物理机上高密集IO的Container数量增加时,loop的性能明显下降,而LVM则下降有限。
按照理论层面分析,随着系统负载的升高,loop方案的劣势将会逐渐明显,并体现在io的非常不稳定。
结论分析
Loop Volume
Docker默认会在/var/lib/docker/devicemapper/devicemapper目录下生成data和metadata两个稀疏文件,并将两个文件挂为loop设备作为块设备来使用。通过losetup ls可以查询到具体的设备。依据Device Mapper的thin pool的制作过程,有了data 和metadata两个块设备就可以开始制作DM thin pool了。由于DM是通过块映射来实现的,所以可以在DM设备上继续递归创建volume,之后每个Container的设备都是pool上的卷。
从测试结果来看loop设备的读写吞吐和iops都非常高,但是从测试过程来看绝大多数时间fio打印的实时数据都是0。从宿主机上来看增加了flush-253:1进程,本质上就是系统再为它刷缓存。
同时loop设备是不支持O_DIRECT的。
Direct LVM
从存储结构上看Direct和LVM的最大不同是创建DM thin pool的不再是通过losetup挂载的两个稀疏文件,而是两个裸的真正的块设备。可以在系统启动进程中通过–storage-op dm.datadev 和–storage-op dm.metadatadev来指定具体的块设备的来源。
Loop Volume VS Direct LVM
direct lvm直接使用dm-thin内核模块,直接使用raw分区,在高负载和高密度下具有性能优势。
direct lvm的O_DIRECT
direct lvm的读写性能表现更加稳定。
direct lvm能避免loop 的block limitation
最终结论
任何情况都应该使用Direct LVM
DOCKER_STORAGE_OPTIONS=--storage-driver devicemapper --storage-opt dm.fs=xfs --storage-opt dm.thinpooldev=/dev/mapper/docker-thinpool --storage-opt dm.use_deferred_removal=true
DOCKER_STORAGE_OPTIONS="--storage-opt dm.no_warn_on_loop_devices=true"
http://blog.csdn.net/gushenbusi/article/details/49494629
相关推荐
使用LVM的direct-lvm模式,Docker可以高效地管理和使用存储资源,同时提供了更好的性能和容错能力。由于直接使用LVM进行数据存储,避免了额外的文件系统层,从而减少了I/O开销。此外,通过设置自动扩展阈值,可以...
blockbridge-docker-volume, Docker的Blockbridge卷插件 Blockbridge Docker 插件版本 3.1Blockbridge插件可以作为 Docker 1.13 的"托管 Docker 插件",也可以作为 Docker 1.12和更高版本的"旧版插件"。 两个选项都...
`docker_volume`很可能是一个用于管理Docker容器存储卷的Python库,对于系统管理员(运维人员)和开发者来说,它可以简化在Docker环境中操作和管理数据卷的过程。 在Docker中,数据卷是持久化容器内数据的一种方式...
### Docker使用OpenStack Cinder 持久化 Volume 原理分析及实践 #### 1. 背景知识 ##### 1.1 OpenStack Cinder 简介 OpenStack Cinder 是一个为 OpenStack 提供块存储服务的项目,类似于 AWS 的 EBS (Elastic ...
Docker Volume是Docker容器技术的重要组成部分,用于解决容器持久化存储问题和容器间数据共享问题。Docker Volume是一种数据存储机制,允许用户在容器运行过程中持久化数据,且独立于容器的生命周期之外。 ### ...
Docker NFS,AWS EFS和Samba / CIFS卷插件 将NFS v3 / 4,AWS EFS或CIFS挂载到Docker容器中。 这是一个Docker插件,可将这些卷类型直接安装在容器中。 文档 聊天/松弛 Linux上的NFS先决条件 需要在Linux系统上安装...
了解和掌握Volume Plugin的使用和内部机制,对于利用Docker进行应用部署和管理具有重要意义。当然,本篇内容仅是对Docker Volume Plugin的入门级介绍,真正深入掌握还需要通过实践以及对Docker官方文档的深入学习。 ...
docker-volume-plugin-helloworld Hello world Docker Volume Plugin,展示了如何编写一个简单的Docker Volume Plugin。 在fordemo.js上查看一个非常简单(不实际)的卷插件,仅用于演示目的。 app.js是一个更完整的...
请创建一个EFS挂载点挂载到本地文件系统和容器环境致谢 (用作引导程序)路线图检查系统是否已安装NFS utils(在启动时)要求主机上安装的NFS工具( ) Docker 1.8+ AWS EFS支持的区域上的AWS EC2主机用法启动插件$ ...
docker-s3-volume 提供了一种创新的方式,将Docker数据卷与AWS S3结合,实现了云存储的灵活性和本地数据的高性能访问。通过这种集成,开发者可以更好地管理他们的应用程序数据,确保数据安全、易于备份和恢复,同时...
sshFS的Docker卷插件 这个插件使您可以轻松地在容器中... $ docker volume create -d vieux/sshfs -o sshcmd=<user> -o password=<password> [-o port=] [-o <any> ] sshvolume sshvolume $ docker volume ls DRIVER V
Docker常用命令大全__参数设定,_端口映射,_Volume【Docker教程2】
docker lvm插件 用于LVM卷的Docker卷驱动程序 该插件可用于创建指定大小的lvm卷,然后可使用docker run命令将其绑定安装到容器中。 设置 1) git clone git@github.com:projectatomic/docker-lvm-plugin.git (You ...
docker-volume-backup 将Docker卷备份到任何S3兼容存储中。 可以将 Docker映像用作现有Docker设置的sidecar容器。 它可以处理将Docker卷定期备份到任何与S3兼容的存储的操作,并可以将旧的备份(如果已配置)轮换掉...
docker-volume-beegfs Docker Volume插件可在集群中创建持久卷。 前提条件 BeeGFS集群必须已设置并正在运行 beegfs-client服务需要在Docker主机上运行 安装 可以从页面获取预构建的二进制文件以及rpm和deb软件包。 ...
Docker Volume是Docker容器中持久化数据的一种方式,它允许数据在容器之间共享和独立于容器存在,确保数据的安全性和持久性。Ceph RBD(RADOS Block Device)是Ceph存储系统的一部分,提供了一个高性能、可扩展的...
但是如果我们需要修改我们的运行代码,或者有输入输出文件的时候,我们就没有办法了,每一个container运行完毕后,其分配的资源以及文件系统都会消失,那么我们就需要在本地给docker container挂载一个卷,这样在...
Docker Windows Volume Watcher 该脚本监视Windows主机上Docker容器的目录绑定,并通知容器有关文件更改的信息。 该脚本旨在解决Windows主机上的文件更改事件传播问题。 由于Linux内核中CIFS实现的限制,Docker for ...