2010-08-22 36 views

回答

5

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

如果你正在写一个数据库服务器,你可能会在意这一点,但任何小于一个大铁机处理数以百万计的请求的第二个将看不到任何好处。

+2

现在,在2017年它的情况并不少见,看看100K IOPS SSD在中档的笔记本电脑。这是否意味着我们正在有效地使用您正在讨论的大型机器,并且应该为随机读取实现矢量化IO? – Soonts 2017-05-25 04:57:40

1

我会想象你会使用分散gatehr IO时,(a)您怀疑您的应用程序有一个性能瓶颈,(b)你建立了一个性能分析框架,可以显示出使用它的显着改进。

除非您可以证明可以改进,否则额外的代码复杂性只是一种风险,并且没有魔术配方说明,当满足某些条件时,应用程序将自动从一些编程巧妙中获益。

或 - 换一种说法 - 不基地基础上的“关于互联网论坛上的一些人”的陈述主要的架构决策。创建一个测试,并找出答案。

5

保罗 - 一个额外注:一个附加的好处是,你的手在同一时间多个请求到磁盘驱动器。然后司机可以对请求进行排序并按最佳顺序发布。尽管系统调用时间很短,但寻找时间(很多毫秒)可能会产生惩罚性(小于1000 I/O /秒)。

克里斯的有关表现的效率评论是务实的。大自然从来不会说谎。好吧,几乎从不。

+0

目前在NT中分散的I/O实际上并没有在一个连续段的不同页面中执行除地图以外的任何特殊功能,并且驱动程序不知道它。所以不,司机不会“按照最优顺序排序请求并发布它们”。 – wj32 2010-12-07 10:52:23

+0

任何异步I/O也会这样做,唯一一次你不会得到这个的是,如果你是一个进程将I/O同步到随机页面,因为内核没有关于你的页面的信息,我会问下一个 – 2015-04-27 04:08:46

0
在POSIX,readv

和writev可以获得读取或写入不连续的内存,但读写不连续的文件从连续内存范围在一个去你想要readx和writex这是所提出的POSIX增加的一个

做readx更快,然后做大量的读取,因为它只有一个系统调用,它可以让磁盘调度程序有最多的io重新排序我记得有人说ext2/3/.. fsck程序,他们想知道这个,因为它知道什么范围就是了

相关问题