我们什么时候应该使用分散/聚集(向量)IO?

时间:2010-08-22 09:07:10

标签: windows file-io filesystems ntfs

Windows文件系统支持scatter/gather IO。(当然,其他平台确实如此)
但我不知道何时使用IO机制。

你能解释一个合适的案例吗?

使用I / O机制可以获得什么好处?(只需要一点IO请求?)

4 个答案:

答案 0 :(得分:5)

当您进行大量随机(即非顺序)读/写操作时,您使用Scatter / Gather IO,并且您希望保存上下文切换/系统调用 - Scatter / Gather是这种意义上的批处理形式。但是,除非你有一个非常快的磁盘(或更可能是一大堆磁盘),否则系统调用成本可以忽略不计。

如果你正在编写一个数据库服务器,你可能会关心这一点,但是只要处理数千或数百万个请求的大型机器,就不会有任何好处。

答案 1 :(得分:5)

Paul - 一个额外的注意事项:另外一个优点是您可以同时将多个请求传递给磁盘驱动程序。然后,驱动程序可以对请求进行排序并以最佳顺序发出请求。虽然系统调用时间很短,但寻道时间(许多毫秒)可能是惩罚性的(小于1000 I / O /秒)。

克里斯关于证明效率的评论是务实的。大自然永不撒谎。好吧,几乎没有。

答案 2 :(得分:1)

我想你会在你(a)怀疑你的应用程序存在性能瓶颈时使用scatter gatehr IO,并且(b)你构建了一个可以显示使用它的显着改进的性能分析框架。

除非你能显示出可证明的改进,否则额外的代码复杂性只是一种风险,并且没有神奇的方法可以说,当满足某些条件时,应用程序将自动从一些编程聪明中获益。< / p>

或者 - 换句话说 - 根据“互联网论坛上的某些人”的陈述,不要做出重大架构决策。创建一个测试,并找出答案。

答案 3 :(得分:0)

在posix中,readv和writev读取或写入不连续的内存,但是一次性读取和写入不连续存储器中的不连续文件范围你想要readx和writex这是建议的posix添加之一

执行readx比执行大量读取更快,因为它只有一个系统调用它让磁盘调度程序有最多的io来重新排序我记得有人说这对于ext2 / 3 / .. fsck程序他们想要这个,因为它知道它想要的范围