好像都是数据复制中去掉了内核缓存?
两个不是一个概念。
Direct IO和Buffer IO相对应。
Direct IO就是直接把IO请求提交给底层IO设备,不经过缓存处理。
Buffer IO就是IO请求经过缓存子系统处理,例如Linux 上的VFS Cache层;
写数据会先写入内存,写入内存后就会返回,不等数据刷到磁盘上。
读数据会从先尝试从内存中读取,如果内存中命中,就不需要从磁盘上读取了。
Buffer IO会带来读写性能的大幅度提升,这和在数据库前面加一个Memcached是一样的概念。
大多数场景下,Buffer IO都是最优选择。
以下情况下我们可能需要考虑Direct IO:
而内存映射是另外一个很大的概念,展开会有很多内容;仅看文件IO这部分,像通过Linux mmap这样的方式访问文件,实际上就是由应用分配了一段内存,这段内存直接充当了文件读写过程中的缓存,用户态可以直接访问,而不是像普通的read/write方式需要把用户态的buffer拷贝到内核分配的缓存上,其本质还是buffer IO,只是省去了用户态到内核态的拷贝开销。
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答800 阅读✓ 已解决
2 回答3.2k 阅读