`
m635674608
  • 浏览: 5059140 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Docker loop volume VS direct LVM 选型和分析

 
阅读更多
测试准备
 
测试目的
     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
分享到:
评论

相关推荐

    Docker使用LVM存储配置direct-lvm模式

    使用LVM的direct-lvm模式,Docker可以高效地管理和使用存储资源,同时提供了更好的性能和容错能力。由于直接使用LVM进行数据存储,避免了额外的文件系统层,从而减少了I/O开销。此外,通过设置自动扩展阈值,可以...

    blockbridge-docker-volume, Docker的Blockbridge卷插件.zip

    blockbridge-docker-volume, Docker的Blockbridge卷插件 Blockbridge Docker 插件版本 3.1Blockbridge插件可以作为 Docker 1.13 的"托管 Docker 插件",也可以作为 Docker 1.12和更高版本的"旧版插件"。 两个选项都...

    PyPI 官网下载 | docker_volume-0.1.dev1-py3-none-any.whl

    `docker_volume`很可能是一个用于管理Docker容器存储卷的Python库,对于系统管理员(运维人员)和开发者来说,它可以简化在Docker环境中操作和管理数据卷的过程。 在Docker中,数据卷是持久化容器内数据的一种方式...

    Docker使用OpenStack Cinder持久化 volume原理分析及实践.docx

    ### Docker使用OpenStack Cinder 持久化 Volume 原理分析及实践 #### 1. 背景知识 ##### 1.1 OpenStack Cinder 简介 OpenStack Cinder 是一个为 OpenStack 提供块存储服务的项目,类似于 AWS 的 EBS (Elastic ...

    Docker Volume入门用法详解

    Docker Volume是Docker容器技术的重要组成部分,用于解决容器持久化存储问题和容器间数据共享问题。Docker Volume是一种数据存储机制,允许用户在容器运行过程中持久化数据,且独立于容器的生命周期之外。 ### ...

    docker-volume-netshare:Docker NFS,AWS EFS,Ceph和SambaCIFS卷插件

    Docker NFS,AWS EFS和Samba / CIFS卷插件 将NFS v3 / 4,AWS EFS或CIFS挂载到Docker容器中。 这是一个Docker插件,可将这些卷类型直接安装在容器中。 文档 聊天/松弛 Linux上的NFS先决条件 需要在Linux系统上安装...

    窥探Docker中的Volume Plugin内幕-有容云

    了解和掌握Volume Plugin的使用和内部机制,对于利用Docker进行应用部署和管理具有重要意义。当然,本篇内容仅是对Docker Volume Plugin的入门级介绍,真正深入掌握还需要通过实践以及对Docker官方文档的深入学习。 ...

    docker-volume-plugin-helloworld:Docker Volume Plugin的Hello World

    docker-volume-plugin-helloworld Hello world Docker Volume Plugin,展示了如何编写一个简单的Docker Volume Plugin。 在fordemo.js上查看一个非常简单(不实际)的卷插件,仅用于演示目的。 app.js是一个更完整的...

    docker-volume-efs:适用于AWS EFS(弹性文件系统)的Docker插件

    请创建一个EFS挂载点挂载到本地文件系统和容器环境致谢 (用作引导程序)路线图检查系统是否已安装NFS utils(在启动时)要求主机上安装的NFS工具( ) Docker 1.8+ AWS EFS支持的区域上的AWS EC2主机用法启动插件$ ...

    docker-s3-volume:具有来自s3的数据量的Docker容器

    docker-s3-volume 提供了一种创新的方式,将Docker数据卷与AWS S3结合,实现了云存储的灵活性和本地数据的高性能访问。通过这种集成,开发者可以更好地管理他们的应用程序数据,确保数据安全、易于备份和恢复,同时...

    docker-volume-sshfs:sshfs docker卷插件

    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常用命令大全__参数设定,_端口映射,_Volume【Docker教程2】

    docker-lvm-plugin:用于LVM卷的Docker卷插件

    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-volume-backup 将Docker卷备份到任何S3兼容存储中。 可以将 Docker映像用作现有Docker设置的sidecar容器。 它可以处理将Docker卷定期备份到任何与S3兼容的存储的操作,并可以将旧的备份(如果已配置)轮换掉...

    docker-volume-beegfs:BeeGFS的Docker卷插件

    docker-volume-beegfs Docker Volume插件可在集群中创建持久卷。 前提条件 BeeGFS集群必须已设置并正在运行 beegfs-client服务需要在Docker主机上运行 安装 可以从页面获取预构建的二进制文件以及rpm和deb软件包。 ...

    docker-volume-ceph-rbd:一个Docker Volume插件,可将Ceph RBD用作分布式数据存储

    Docker Volume是Docker容器中持久化数据的一种方式,它允许数据在容器之间共享和独立于容器存在,确保数据的安全性和持久性。Ceph RBD(RADOS Block Device)是Ceph存储系统的一部分,提供了一个高性能、可扩展的...

    Docker volume 挂载卷的实现方法

    但是如果我们需要修改我们的运行代码,或者有输入输出文件的时候,我们就没有办法了,每一个container运行完毕后,其分配的资源以及文件系统都会消失,那么我们就需要在本地给docker container挂载一个卷,这样在...

    docker-windows-volume-watcher:用于通知Docker容器使用者Windows上安装变化的工具

    Docker Windows Volume Watcher 该脚本监视Windows主机上Docker容器的目录绑定,并通知容器有关文件更改的信息。 该脚本旨在解决Windows主机上的文件更改事件传播问题。 由于Linux内核中CIFS实现的限制,Docker for ...

Global site tag (gtag.js) - Google Analytics