Linux中的dax特性

在Linux中由于块设备一般属于低速设备,访问成本很高,为了减少访问块设备的次数内核一般会将访问磁盘的内容缓存起来,等下次访问时直接从内存中获得结果,这大大提高了系统的性能。所以说缓存是个好东西。

但是随着技术进步,一些类似于内存的块设备出现了,主要的有Intel的nvdimm设备,它是一种既可以当磁盘又可以当内存使用的存储设备,它的名字是非易失性内存,速度可以比肩内存,而又不会掉电丢数据。如果这种设备来当块设备使用,缓存就会变得多余,本来访问nvdimm就很快何必要缓存呢,这时候缓存就是累赘。可以说成也缓存败也缓存。

这时候dax(direct access)就出来帮忙了,既然缓存无用那就绕过缓存直达块设备,这会提高访问效率,这就是dax存在的意义。

除了像类内存的块设备,对于虚拟机内部dax也有很多用武之地。对于某些虚拟机和主机共享文件的情况比如新进kernel的virtio-fs,因为访问共享文件就会在虚机内部和主机上产生两份缓存,于是dax又可以大显身手,在虚机内部使用dax,不适用缓存,这样其实访问的文件内容就会由主机缓存提供,少了一层缓存的复制。

对于传统的mmap映射的页面都会有相应的page结构,但是对于dax设备,mmap一般是没有page结构的,对于那些跟随传统mmap的某些需要page结构的操作使用dax后就需要小心了,很可能会出现意想不到的bug。

 

参考:

https://www.kernel.org/doc/Documentation/filesystems/dax.txt

https://virtio-fs.gitlab.io/design.html

你可能感兴趣的:(linux,虚拟化)