知识卡片
数据卷绕开联合文件系统提升I/O性能
内容
容器默认的可写层要经过联合文件系统这一层抽象才能落到磁盘,这层抽象为了支持镜像分层、写时复制付出了额外的间接开销,对I/O性能敏感的场景并不友好。Docker的数据卷(Volume)直接把宿主机的一个目录挂载进容器,容器对这个目录的读写完全绕开联合文件系统,性能等同于直接读写宿主机磁盘;数据卷的生命周期也独立于容器,容器删除后数据卷依然存在,还可以被多个容器同时挂载实现共享。发散:这再次印证了[[Direct I/O与Buffered I/O的权衡]]中提到的规律——通用抽象层带来的间接性总是有代价的,当某个场景明确不需要抽象层提供的额外能力(这里是镜像共享、分层管理)时,直接绕开它去访问底层资源往往是性能最优的选择,代价是失去了这层抽象本来提供的好处(比如数据卷不能像镜像层一样被多个容器零成本共享同一份基础环境)。
参考来源
《Linux开源存储全栈详解从Ceph到容器存储》第9章《容器存储》