Docker存储驱动device-mapper与voerlay2性能对比

 

                                                       Docker存储驱动device-mapper与voerlay2性能对比

 

第1章 文档目的 

第2章 测试说明 

2.1测试环境 

2.2 linux内核3.10测试 

2.3 linux内核4.19测试 

第3章 overlya2特性使用说明(对比overlay驱动)

3.1 验证开启overlay2驱动 

1. 文档目的

当前公司集群所用docker存储驱动为devicemapper,为了优化性能目前有打算切换驱动为社区所使用的overlay2,本文针对二者进行了性能对比测试。

 

2. 测试说明

   2.1 测试环境

     1)测试工具Iozone说明

  Iozone主要用来测试操作系统中文件系统性能的测试工具,使用iozone可以在多线程、多cpu,并指定cpu cache空间大小以及同步或异步I/O读写模式的情况下进行测试文件操作性能;

  Iozone提供测试功能全面,本次只对文件系统的读写、重复读写和随机读写能力做了测试

  

     2)测试场景说明

  目前集群linux内核版本为3.10,而overlay2从linux内核3.18起并入内核,为了测试数据的准确性,测试采取在3.10和4.19两种内核下分别对2种驱动做测试。3.10版本只做了单线程测试,4.19做了多线程测试。

  其中在测试devicemapper驱动时,采用direct-lvm模式,该模式为官方推荐模式,性能较高,当前集群采用的正式该模式,不需要改动配置;

  在测试overlay2驱动时,需要把devicemapper驱动改为overlay2驱动。

  修改/etc/docker/daemon.json如下重启docker即可

{

"storage-driver": "overlay2",

"storage-opts": [

"overlay2.override_kernel_check=true"]

}

重启完成后可以通过docker info   查看Storage Driver: overlay2确认配置是否生效

 

    2.2 linux内核3.10测试

测试1: 内核3.10单线程测试devicemapper 消除linux缓存对测试数据的影响

说明: 在iozone安装目录中执行如上命令,可生成单线程devicemapper的性能测试

 

参数说明:

  -a:全面测试,输出细节数据

  -n:测试文件的最小大小 单位可指定kb、m、g等

  -g:测试文件的最大大小 单位同上

  -i:可选指令,0=write/rewrite,1=read/re-read,2=random-read/write

  -r:指定每次读取的数据块大小,一般为2的幂指数 该数据会影响读取速率,本测试经过对比后统一使用64kb 不指定时会从2开始枚举2的幂指数

  -f:指定要测试的文件(要测试哪块设备,便在该设备下提前创建改文件,测试完会自动删除,本测试中不需指定)

  -I:对所有文件操作使用VxFS VX_DIRECT 。告诉VXFS 文件系统所有对文件的操作将跨过缓存直接在磁盘上进行。

  -p:同上,清除缓存影响

  -R:输出结果为Excel格式

  -b:指定文件名

  Ps:linux缓存的测试结果影响较大,解决方式有:1.指定测试文件的大小为linux内存的2倍;2.执行命令时指定-Ip参数,可以清除缓存

生成的excel部分内容如下:

 

测试2: 内核3.10单线程测试overlay2 消除linux缓存对测试数据的影响

 

说明: 命令同上。不会上传excel,对比文件就不放了。

    2.3 linux内核4.19测试

测试1: 单线程 读取块为64kb 测试devicemapper生成对应excel

说明:命令同上

测试2: 单线程 读取块为64kb测试overlay2 生成excel

说明:同上

测试3: 线程数17 读取块为64kb 测试devicemapper生成excel

测试4: 线程数17 读取块为64kb 测试overlay2生成excel

 

3. overlya2特性使用说明(对比overlay驱动)

 3.1 验证在centos kernel 3.10开启overlay2驱动特性

说明:配置完成overlay2驱动后,要保证d_type是支持的,不然不会使用overlay特性

3.2 查看overlay2驱动文件系统层级结构

说明:拉取nginx镜像,查看overlays2文件保存情况

 

说明:l目录下包含了很多软连接,通过应用短名指向镜像层,避免在挂载的时候,超过名字长度限制

 

说明:查看最下层目录,包含diff目录和link文件,其中diff目录包含了镜像的内容,link文件里是该层应用的短名称。

 

说明:倒数第二层的目录

 

说明:更上层的目录结构

 

通过mount查看挂载目录结构:

说明:从lowerdir中的分层结构可以看出,overlay2驱动原生所支持的多层lower OverlayFs特性生效(最多128层,每层之间用 : 分割)

 

Overlay特性:overlay驱动只工作在一个lower OverlayFS层之上,因此需要硬链接来实现多层镜像,过多的硬链接会消耗较大inode,这是overlay性能不如overlay2的关键原因之一。

通过mount查看overlay的挂载目录结构:

说明:overlay只会有一层挂载目录,通过硬链接指向不同的镜像层。

 

总结

测试文件大小限制在8m-4g,从测试数据对比结果来看,devicemapper驱动在第一次对文件读写时性能稍微优越于overlay2,但是对已有文件的重复读写来看,overlay2性能优越于devicemapper,对于随机读写来说,overlay2性能优越于devicemapper。

由于devicemapper是基于block复制,并且每次修改数据时,都会进行复制,这会造成磁盘空间和内存的浪非甚至会出现磁盘和内存溢出等问题,对于overlay2驱动来说,只在第一次修改的时候复制文件,后续更在都在该文件上进行。自从Docker1.12起,Docker也支持overlay2存储驱动,目前社区更推荐使用overlay2。

通过对overlay2和overlay存储结构的对比,可以看出overlay2在centos kernel3.10上是支持的,overlay2所支持的多层lowerdir特性也被支持。

 

发布了5 篇原创文章 · 获赞 0 · 访问量 7375

猜你喜欢

转载自blog.csdn.net/Billy_xxu/article/details/101770141