docker storage driver compare

docker storage driver对比

aufs

分为多层镜像层,一个读写层.

  • 修改存在的文件,有写延迟,需要拷贝整个文件到读写层
  • 读文件性能差,需要在多层中搜索
  • 删除一个文件,只需要在读写层放一个空白文件,镜像层文件不删除

性能

  • 支持page cache,内存使用效率高
    The underlying mechanics of how AUFS shares files between image layers and containers uses the systems page cache very efficiently.
  • 大文件修改有延迟,需要拷贝整个文件到读写层然后修改

overlayfs

分为二层,upper层和lower层,lower层也就是所谓的images层,upper层就是所谓的读写层.

  • 修改存在的文件(在images层存在),对于小文件影响不大,对于大文件有写延迟(无论是小文件还是大文件,只要修改都会整个文件拷贝到读写层然后修改)
  • 读文件性能优于aufs,因为overlayfs只有两层,所有对于文件搜索来说性能好于aufs
  • 删除一个文件只需要在读写层放一个空白同名文件,镜像层文件并不删除

性能

  • 支持 page Caching 多个容器访问同一个文件可以共享
    single page cache entry efficient with memory and a good option for PaaS and other high density use cases.
  • 修改存在的文件的时候,需要从镜像层拷贝整个文件到读写层然后修改,对于大文件有写延迟,但是性能好于aufs,因为搜索文件性能优于aufs overlayfs只有二层
  • 对inode有大量消耗,可能会导致inode用完(可以在格式化文件系统的时候多分配一点inode来解决)

device mapper

一层就是一个快照,快照就是一个个指向底层真实数据的数据指针

  • 新增文件,导致分配一个block(64kb),然后在这个block上写入数据,因此在有大量小文件写的场合有性能问题
  • 修改文件,copy on write,只是拷贝修改的部分到快照层,不像aufs overlayfs那样会拷贝整个文件,这是一个优势
  • 删除文件就是简单的把快照层中指向真实数据的指针设置为NULL即可

性能

  • 小文件写性能有影响,每次写会导致分配一个block(64kb)其后写数据直接在这个block中写
  • copy on write性能平均情况下优于aufs和overlayfs,在大量小文件的情况下要* 相同文件访问多个容器需要拷贝多次到内存,在大密度paas场景不适用,内存使用效率不高.没有overlayfs和aufs那样支持page cache.
    devicemapper is not the most memory efficient Docker storage driver. Launching n copies of the same container loads n copies of its files into memory. This can have a memory impact on your Docker host. As a result, the devicemapper storage driver may not be the best choice for PaaS and other high density use cases.

官方对比图

docker storage driver compare_第1张图片

参考文献

select storage driver
Docker and AUFS in practice
Docker and the Device Mapper storage driver
Docker and OverlayFS in practice

你可能感兴趣的:(性能,缓存,存储,docker,驱动)