ILoveMK 发表于 2014-08-13 11:45

orian 发表于 2014-08-13 11:45

overlap io和async io不是一回事,但有关系。一个是时间overlap,这就是完全的async io的概念,另一个是写入点overlap,我前面说过。提到sync io,在底层是sequential执行的,不可能parallel,即使顶层同时调用,真正到物理执行层面,驱动也是一个一个搞的。因此,overlap不overlap写入的地址没影响,因为io一定是一致的,一个写完了才能写另一个。

async io就有影响了,当然overlap io在async情况下一定出问题,但不overlap的io也可能出问题,例如在io过程中出错回退,就要考虑回退的时间点。通常async io是没办法直接回退的,都是用前滚、重试这种方案。至于别人怎么说,我不清楚,我的理解是这样的。

首先,谁跟你说磁盘就是一个物理磁盘,raid都几十年了,几十个io同时写很正常啊。
其次,即使同一个物理磁盘,也不是只有一个磁头,如果一个长写足够大(当然只是理论,max transfer通常不可能长过一个cylinder),第一个写会覆盖磁盘另一面的头,就可能overlap了

为避免不一致,就要用时间控制,保证先写的永远在前,后写的永远在后,并且先写的要写完,才能执行后面的,也就是顺序执行serialization。

orian 发表于 2014-08-13 11:58

继续回答。:D

overlap里面没有async的意思吧?

两个io请求同时发生,一个写第一sector,另一个写第三个sector,在sector这个级别(两个io都只写一个sector),两个io就不算overlap的;但如果两个io都写10个sector长,这两个io就是overlap的。为避免数据不一致,显然要注意overlap io的顺序。

另一个是relocation,报错都报的。如果允许relocation,aix可以找个空的空间,通过镜像,把坏块标记了,坏块对应的数据写到新的地方,数据还是mirror的,完好的。如果不允许,那坏块部分就只有一份copy,要人工干预赶快换盘。

ILoveMK 发表于 2014-08-14 09:45

ILoveMK 发表于 2014-08-15 09:36

orian 发表于 2014-08-15 11:52

sync的含义不在接受方接到的先后,而在发送方如何认可io完成。如果发出去就不管了,那无论怎样都是async io,就是写入的时间是没准的,没有保证的,必须有别的机制去保证一致,通常由更高层的协议完成,就是在哪一层确认,则在哪一层被认为是sync io。因此即使sync io,顺io线路追踪,也会发现在不同层有时是sync,有时是async。

如果发出去io等待写完确认,则发出io请求这一层就是执行的sync io。sync io的特点是请求方知道什么时候io是完成的,并且要对io完成负责。这里要说清楚比较复杂,你自己想吧,最终目的不是sync或者async这个名词,而是为什么要这么做,和都有哪些方法去完成。这里不涉及物理技术,是完全的逻辑、时间概念。

orian 发表于 2014-08-15 11:55

例如:两个io请求都只写一个sector,也是有可能overlap的,如果它们写的是同一个sector并且并行处理,如何保证一致?即使io等待应答回应,如果请求并行发出,也不能保证一致,本质上,即使等待回应,他们还是异步的,因为两个并行写入线程之间没有任何同步。如果要同步,有很多方式,例如拿写令牌;由单一线程写;批量写之后拿scn等等,各有优缺点,各有不同的适用点。

ILoveMK 发表于 2014-08-15 16:16

页: [1]
查看完整版本: 关于 mklv 的几个问题