找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3885|回复: 0

磁盘阵列控制器模式对比

[复制链接]
发表于 2008-2-22 15:14:42 | 显示全部楼层 |阅读模式
本文从低层原理上,深入透析了目前存在的7种模式的组成原理,结构,并深刻分析了各种级别相对于单盘IO速率的变化。1 F  n3 G4 L6 ]# Q
; k3 W$ g1 I! J: f+ G+ R9 k# Z
Raid00 l: o: g" q3 e. y
; p3 l6 @0 O- }1 V) j# s: Q+ {
Raid0是这样一种模式:我们拿5块盘的raid0为例子。
( H- q, V, H/ R- ?! v+ B# I1 v% g1 E8 f5 O5 ~
$ i$ R; y7 n1 R

0 m% M  `5 l7 j2 k3 j% ?4 F
  上图中5个竖条,分别代表5个磁盘上的一个extent,也就是竖条的意思,每个磁盘被逻辑的划分为N个这种extent。然后再在磁盘相同偏移的extent上,横向逻辑分割,形成strip,一个strip横跨过的extent个数,称为strip lenth,而一个strip和一个extent交叉带,称为一个segment,一个segment中所包含的data block个数,称为strip depth。Data block,可以是N倍个扇区大小的容量,应该可以调节,或者不可调,随控制器而定。+ G, Z& x3 t! {( J6 N( u' r8 q
  Raid0便是将一系列连续编号的data block,分布到多个物理磁盘上,扩散IO,提高性能。其分布的方式,如图所示:这个例子中,条带深度为4,则0、1、2、3号data block,被放置到第一个条带的第一个segment中,然后4、5、6、7号block,放置到第一个条带的第二个segment中,依此类推,条带1放满后,继续放条带2。这种特性,称为“局部连续”,因为block只有在一个segment中是物理连续的,逻辑连续,就需要跨物理磁盘了。
  对外来说,参与形成raid0的各个物理盘,会组成一个逻辑上连续,物理上也连续的虚拟磁盘。磁盘控制器对这个虚拟磁盘发出的指令,都被raid控制器截获,分析,根据block映射关系公式,转换成对组成raid0的各个物理盘的真实物理IO请求指令,收集或写入数据之后,再提交给主机磁盘控制器。
  Raid0还有另一种非条带化模式,即写满其中一块物理磁盘之后,再接着写另一块,直到所有组成磁盘全部写满。这种模式,对IO写没有任何优化,但是对IO读,能提高一定的并发IO读几率。
在进一步讲述raid0和其他raid级别之前,我们先来看一下IO的种类。IO按照可以分为:读/写IO,大/小块IO,连续/随机IO,顺序/并发IO。下面我们来分别介绍每一种IO。
  读/写IO,这个就不用多说了,读IO,就是发指令,从磁盘读取某段扇区的内容。指令一般是通知磁盘开始扇区位置,然后给出需要从这个初始扇区往后读取的连续扇区个数,同时给出动作是读,还是写。磁盘收到这条指令,就会按照指令的要求,读或者写数据。控制器发出的这种指令+数据,就是一次IO,读或者写。
  大/小块IO,指控制器的指令中给出的连续读取扇区数目的多少,如果数目很大,比如128,64等等,就应该算是大块IO,如果很小,比如1,4,8等等,就应该算是小块IO,大块和小块之间,没有明确的界限。
  连续/随机IO,连续和随机,是指本次IO给出的初始扇区地址,和上一次IO的结束扇区地址,是不是完全连续的,或者相隔不多的,如果是,则本次IO应该算是一个连续IO,如果相差太大,则算一次随机IO。连续IO,因为本次初始扇区和上次结束扇区相隔很近,则磁头几乎不用换道或换道时间极短;如果相差太大,则磁头需要很长的换道时间,如果随机IO很多,导致磁头不停换道,效率大大降底。
  顺序/并发IO,这个的意思是,磁盘控制器每一次对磁盘组发出的指令套(指完成一个事物所需要的指令或者数据),是一条还是多条。如果是一条,则控制器缓存中的IO队列,只能一个一个的来,此时是顺序IO;如果控制器可以同时对磁盘组中的多块磁盘,同时发出指令套,则每次就可以执行多个IO,此时就是并发IO模式。并发IO模式提高了效率和速度。
说完了4种IO模式,我们再来说2个概念:
  IO并发几率。单盘,IO并发几率为0,因为一块磁盘同时只可以进行一次IO。对于raid0,2块盘情况下,条带深度比较大的时候(条带太小不能并发IO,下面会讲到),并发2个IO的几率为1/2。其他情况请自行运算。
  IOPS。一个IO所用的时间=寻道时间+数据传输时间。IOPS=IO并发系数/(寻道时间+数据传输时间),由于寻道时间相对传输时间,大几个数量级,所以影响IOPS的关键因素,就是降底寻道时间,而在连续IO的情况下,寻道时间很短,仅在换磁道时候需要寻道。在这个前提下,传输时间越少,IOPS就越高。
  每秒IO吞吐量。显然,每秒IO吞吐量=IOPS乘以平均IO SIZE。Io size越大,IOPS越高,每秒IO吞吐量就越高。设磁头每秒读写数据速度为V,V为定值。则IOPS=IO并发系数/(寻道时间+IO SIZE/V),代入,得每秒IO吞吐量=IO并发系数乘IO SIZE乘V/(V乘寻道时间+IO SIZE)。我们可以看出影响每秒IO吞吐量的最大因素,就是IO SIZE和寻道时间,IO SIZE越大,寻道时间越小,吞吐量越高。相比能显著影响IOPS的因素,只有一个,就是寻道时间。
  下面我们来具体分析一个从上到下访问raid0磁盘的过程。假如某一时刻,主机控制器发出指令:读取 初始扇区10000
# w; {* I5 n9 a) a长度128。Raid控制器接受到这个指令之后,立即进行计算,根据对应公式(这个公式是raid控制器在做逻辑条带化的时候制定的)算出10000号扇区所对应的物理磁盘的扇区号,然后依次计算出逻辑上连续的下128个扇区所在物理磁盘的扇区号,之后,分别向对应这些扇区的磁盘,再次发出指令,这次是真实的读取数据了,磁盘接受到指令,各自将数据提交给raid控制器,经过控制器在cache种的组合,再提交给主机控制器。
分析以上过程,我们发现,如果这128个扇区,都落在同一个segment中的话,也就是说条带深度容量大于128个扇区的容量(64K),则这次IO就只能真实的从这一块物理盘上读取,性能和单盘相比会减慢,因为没有任何优化,反而还增加了raid控制器额外的计算开销。所以要提升性能,让一个IO尽量扩散到多块物理盘上,就要减小条带深度,磁盘数量不变的条件下,也就是减小条带大小strip size。让这个IO的数据被控制器分割,同时放满第一个segment、第二块物理磁盘上的第二个segment。。。。。。。依此类推,这样就能极大的占用多块物理盘。在这里大家可能存在一个误区,就是总是以为控制器是先放满第一个segment,再放满第二个segment,其实是同时进行的,因为控制器把每块盘要写入或者读取的数据都计算好了,是同时进行的。所以,raid0要提升性能,条带做的越小越好。但是这里又一个矛盾出现了,就是条带太小,导致并发IO几率降底,因为如果条带太小,则每次IO一定会占用大部分物理盘,而队列中的IO就只能等待这次IO结束后才能使用物理盘。而条带太大,又不能充分提高传输速度,这两个是一对矛盾,按照需求来采用不同的方式。
我们接着分析raid0相对于单盘的性能变化。根据以上总结出来的公式,可以推得以下表格:

! c' k1 u7 l9 z
! B2 M7 ^3 C+ B8 P3 Z; G
RAID0

. j  C3 p$ _+ m6 C+ z* C" N
IOPS

% M( ?! k) H) d4 ?6 |9 D# h
3 m" D2 f# K% `, e# i: ^

7 B9 x+ S9 T" H7 x5 L: s1 a
并发IO
) W6 t0 D0 Y. z+ x4 |' V8 o* C
顺序IO

7 u& s. J8 T+ x0 j
并发IO

9 u: O2 \0 y/ G+ ?& k! g
顺序IO
$ ?, {# z! ]$ N' U' {* g2 i0 T
随机IO
: K% z4 T3 l  Q3 s
连续IO
, K% H' \  c3 ^) n, e
随机IO
( ^4 |7 z' D2 _6 z
连续IO
1 k9 u" o7 ?$ C/ A& [3 ^/ k+ Q; r* `/ ~
随机IO
" I5 V* m" _# X; L2 Q& {
连续IO

. m' w0 V4 E, Q* t# o; L; ?0 P& N
随机IO
" N7 s& {$ e# Y' I/ V
连续IO
! m' `9 ?- N/ l6 K! t8 `
Io size/strip size较大

# r( ^3 f# o0 ?# P6 ~) w7 H
不支持

8 h, j$ J6 }5 p9 @; T4 `' V
不支持

. v: ^* i2 Y, D3 d: i
提升极小
" y1 K6 x. H6 c, a; f5 R
提升了N乘系数倍
: T+ e8 F8 F* r3 [1 a; E, D% F/ F
不支持

# z4 r1 T; C8 F/ l3 Q1 I
不支持
+ w* q6 N, [1 R$ }1 ~4 D
提升极小

. b7 A5 W* C# l. x
提升了N乘系数倍

9 o7 q* O& ^# Y+ A4 d  y! m
Io size/strip size较小
. h5 ]2 [$ P8 J; x3 ^
提升了(1+并发系数)倍

2 H: K6 T% `- s& w" a$ B- q  ]9 g- G4 A7 j
提升了(1+并发系数+系数)系数倍

3 j& C5 p, g! ~" O$ S; x$ b9 @4 n, I1 ?8 x
提升极小

. t6 q; w" c6 \. B
提升了系数倍
) G4 k! |1 G( ]: {$ \, ^" q
提升了(1+并发系数)倍
6 J: |6 t; N0 f! V) f
提升了(1+并发系数+系数)倍
4 f! R- Y' Q" ^, ~4 L$ R
提升极小
  @: _% Z# @2 h/ g+ w6 U" x4 V8 O; M
提升了系数倍
; m$ x! N3 c- u
注:并发IO和IO size/strip size是一对矛盾,两者总是对立。N=组成raid0的磁盘数目。系数=io size/strip size和初始LBA地址所处的strip偏移综合系数,大于等于1。并发系数=并发IO的数量% I3 n9 {( r- p* _3 U
; I4 g4 N: n% s$ y5 n: T# s+ V5 c+ }

$ z% R4 p4 e8 @9 }' cRaid1
! F& q4 s. x  O" Y7 A, O+ ZRaid1是这样一种模式,我们拿2块盘的例子来说明:3 \/ T; W9 o3 O2 s4 n0 V

3 E$ L- U" o; Z. S4 K  w5 @7 V% a; v
. \$ H' ]/ y/ c; S4 f8 L

5 b1 A2 N9 a3 |/ @- @& V, v8 b
7 d2 I9 w4 d+ O3 F# L- |( R, ^# d/ v

: l: }1 t2 c% c! J6 Y5 K( lRaid1和raid0不同,raid0对数据没有任何保护措施,每个block都没有备份或者校验保护措施。Raid对虚拟逻辑盘上的每个物理block,都在物理盘上有一份镜像备份。也就是说数据有两份。对于raid1的写IO,速度不但没有提升,而且有所下降,因为数据要同时向多块物理盘写,时间以最慢的你个为准,因为是同步的。而对于raid1的读IO请求,不但可以并发,而且就算顺序IO的时候,控制器也可以象raid0一样,从两块物理盘上同时读数据,提升速度。Raid1没有srip的概念。同样我们总结出一个表格:
& w* c+ N2 c! F4 K1 G8 X8 d
RAID1
5 E( f  F# w+ [% L" C' y: x
IOPS

$ r' E1 l- g/ I- r# E
" V# l7 k3 A- \2 E$ A3 K# h+ {
1 v; ^/ [# {! u  R. @
并发IO

3 z" ~- s: t/ c' O
顺序IO
) j% c2 R: Y* P: ~- w4 Y
并发IO
7 J! V1 ?9 u9 k% ~3 S+ P, z& v
顺序IO
& ~8 \9 C7 f- j0 U" h
随机IO

. j+ |) F% F( x/ c4 h
连续IO
- m5 {/ t% M* `, ]) m& W& D3 Y
随机IO
+ q7 Y$ I7 q+ ]$ ?3 L0 ?- i4 z- _  [& ]1 @
连续IO

4 x8 i0 \, }/ c& Y
随机IO

2 R, [+ x( a8 t0 b$ y
连续IO
4 k; K- K7 e% E* w8 P6 E  a
随机IO

: V; M) O9 i- r" R- ~
连续IO

5 v# u- F, b5 x6 ]2 T6 x0 J

% x- @' i' ]' Z  O- }
提升N或者并发系数倍

7 R9 M3 d3 u3 v5 N3 a
提升N倍或者并发系数

( B: q- i" {; s& e
提升极小

- y- \0 e9 c' C: J! c3 b4 g
提升了N 倍

" d4 ^8 j% Y. t) W& _* I" T
不支持
" D: ?! F# ]8 u* a- M* E
事物性IO可并发,提升并发系数倍

9 |; ?6 P( |  i
没有提升
. X! h  ~2 a7 E5 V
没有提升
) ]2 U2 I$ ~9 L' b5 m
注:raid1没有strip的概念。N=组成raid1镜像物理盘的数目。 ! v7 k: N0 h0 I- S
. {: J% c6 p2 j
5 |3 ^- S4 s1 C, F9 B. F
在读、并发IO的模式下,由于可以并发N个IO,每个IO占用一个物理盘,这就相当于提升了N倍的IOPS。由于每个IO只独占了一个物理盘,所以速度相对于单盘并没有改变,所以不管是随机还是顺序IO,相对单盘都不变。
- L4 ~' [7 ]0 B在读、顺序IO、随机IO模式下,由于IO不能并发,所以此时一个IO可以同时读取N个盘上的内容,但是是在随机IO模式下,那么寻道时间影响很大,纵使同时分块读取多个磁盘的内容,也架不住寻道时间的抵消,所以性能提升极小# ?7 M# a  W8 M5 y2 Z8 P$ D
在读、顺序IO、连续IO模式下,寻道时间影响到了最低,此时传输速率为主要矛盾,同时读取多块磁盘的数据,时间减少为1/N,所以性能提升了N倍。/ ~4 n6 ?, w( c  O5 A& Q- w6 l/ j
写IO的时候和读IO情况相同,就不做分析了。写IO因为要同时向每块磁盘写入备份数据,所以不能并发IO,也不能分块并行。但是如果控制器把优化算法做到极至的话,还是可以并发IO的,比如控制器从IO队列中提取连续的多个IO,可以将这些IO合并,并发写入磁盘。前提这几个IO必须是事物性的,也就是说LBA必须连续,不然不能作为一个大的合并IO,而且和文件系统也有关系,文件系统碎片越少,并发几率越高。
Raid2
raid2是一种比较特殊的raid模式,他是一种专用raid,现在早已被淘汰。他的基本思想是,IO到来之后,控制器将数据分割开,在每块物理磁盘读或者写1bit。这里有个疑问,磁盘的最小IO单位是扇区,512字节,如何写入1bit呢?其实这个写入1bit,并非只写入1bit。我们知道上层IO,可以先经过文件系统,然后才通过磁盘控制器驱动来向磁盘发出IO,最终的IO大小,都是N倍的扇区,也就是Nx512字节,N大于等于1,不可能发生N小于1的情况,即使你需要的数据只有几个字节,那么也同样要读出或者写入整个扇区,也就是512字节。明白这个原则之后,我们再来看一下raid2中所谓的“每个磁盘写1bit”是个什么概念。IO最小单位为扇区,512字节,我们就拿一个4块数据盘+3块校验盘的raid2系统给大家来说明一下。这个环境中,raid2的一个条带大小是4bit(1bit乘4块数据盘),而IO最小单位是一个扇区,那么如果分别向每块盘写1bit,就需要分别向每块盘写一个扇区,每个扇区只包含1bit有效数据,这显然是不好的,因为太浪费空间,没有意义。因为IO数据到来时,我们拿以下IO请求为例:写入 初始扇区10000长度1,这个IO目的是要向LBA10000写入一个扇区的数据,也就是512字节。Raid2控制器接受到这512字节的数据之后,先将其放入cache,然后计算需要写入的物理磁盘的信息,比如定位到物理扇区,分割数据成bit,然后一次性写入物理磁盘扇区。
也就是说第一块物理盘,控制器会写入本次IO数据的第1、5、9、13、17、21。。。。。。。。。。。等等位,第二块物理盘会写入2、6、10、14、18、22。。。。。。。。。。等等位,其他两块物理盘同样方式写入。直到这样将数据写完。我们可以计算出来,这512字节的数据写完之后,此时每块物理盘只包含128字节的数据,也就是一个扇区的四分之一,那么这个扇区剩余的部分,就是空的。如果要利用起这部分空间,那么等下次IO到来之后,控制器对数据进行bit分割,将要填入这些空白区域的数据,控制器将首先读出原来的数据,然后和新数据合并之后,一并再写回这个扇区,这样做效率和速度都大打折扣。我们可以发现,其实raid2就是将原本连续的一个扇区的数据,以位为单位,分割存放到不连续的多块物理盘上,因为这样可以全组并行读写,提高性能。每个物理磁盘扇区其实是包含了N个扇区的“残体”。那么如果出现需要更新这个IO的4个扇区中某一个扇区的情况,怎么办?这种情况下,必须先读出原来的数据,和新数据合并,然后在一并写入。其实这种情况出现的非常少。我们知道上层IO的产生,一般是需要先经过os的文件系统,然后才到磁盘控制器这一层的。所以磁盘控制器产生的IO,一般都是事务性的,也就是这个IO中的所有扇区,很大几率上对于上层文件系统来说,是一个完整的事务,所以很少会发生只针对这个事务中某一个原子进行读写的情况。这样的话,每次IO很大几率都会包含入这些逻辑上连续的扇区的,所以不必担心经常会发生那种情况,即便发生了,控制器也只能按照那种低效率的做法来做,不过总体影响较小。但是如果随机IO比较多,那么这些IO初始LBA,很有可能就会命中在一个两个事务交接的扇区处,这种情况,就导致速度和效率大大降低了。连续IO出现这种情况的几率非常小了。
Raid2因为每次读写都需要全组磁盘联动,所以为了最大化其性能,最好保证每块磁盘主轴同步,使得同一时刻每块磁盘磁头所处的扇区逻辑编号都一致,并存并取,达到最佳性能,如果不能同步,则会产生等待,影响速度。
基于raid2的并存并取的特点,raid2不能实现并发IO,因为每次IO都占用了每块物理磁盘。
Raid2的校验盘对系统不产生瓶颈,但是产生延迟,因为多了计算校验的动作。校验位和数据位是一同并行写入或者读取的。Raid2采用海明码来校验数据,这种码可以判断修复一位错误的数据,并且使用校验盘的数量太多,4块数据盘需要3块校验盘,但是随着数据盘数量的增多,校验盘所占的比例会显著减小。* `5 t8 Q1 |4 E
Raid2和raid0有些不同,raid0不能保证每次IO都是多磁盘并行,因为raid0的分块相对raid2以位为单位来说是太大了,而raid2由于她每次IO都保证是多磁盘并行,所以其数据传输率是单盘的N倍,为了最好的利用这个特性,就需要将这个特性的主导地位体现出来,而根据IOPS=IO并发系数/(寻道时间+数据传输时间),寻道时间比数据传输时间大几个数量级,所以为了体现数据传输时间减少这个优点,就必须避免寻道时间的影响,而避免其影响的最佳做法就是:尽量产生连续IO而不是随机IO,所以,raid2最适合连续IO的情况。另外,根据每秒IO吞吐量=IO并发系数乘IO SIZE乘V/(V乘寻道时间+IO SIZE),如果将IO size也增大,则每秒IO吞吐量也将显著提高。所以,raid2最适合的应用,就是:产生连续IO,大块IO的情况,不言而喻,文件服务,视频流服务等等这些应用,适合raid2,不过,raid2的缺点太多,比如校验盘数量多,算法复杂等等,它逐渐的被raid3替代了。

8 |  S  r- J. b, N5 d7 G8 M: R5 R7 b2 I0 i0 g
RAID2

5 M2 ~  N/ j+ n; Z# h
IOPS
1 b1 ?* T$ N* B# q7 o; P* i7 X
3 B0 g0 l$ }% @
# t% ^1 b% R; d2 ~" ~. V6 Z6 E$ O( N3 T
顺序IO

% h+ v9 m0 K2 a$ _2 z" H
顺序IO
! a5 q) `; E9 f( ]' P
非事务性随机IO
: [9 D! ~, O/ q! d
事务性随机IO

& `" e' W5 X% k9 u: T4 x, m
连续IO
. y8 Z; g8 u7 C  D
非事务性随机IO
) a4 c! H3 @; u0 x9 R* R) p' }
事务性随机IO

5 |9 O' J: \) Q9 q
连续IO

; H2 e* f+ |9 p4 a( x" D) F8 D
IO满足公式条件
; ]5 `# Y1 `: M
提升极小

% o, j6 v* Y6 W2 z
提升极小
6 Y, ?( ]* K9 o; w3 x
提升N倍
" ^( F9 u0 d& E' V6 g6 O, O  b- {
性能降低

$ Y. ^' X9 h; L, Q7 ~& p
提升极小
7 {8 q2 M6 _3 A* I( Y
提升N倍
! g, @, i8 Z( r! Z
注:N=数据盘数量。Raid2不能并发IO
, {2 ~( i" z6 T
& X1 t0 E) K* w5 r5 A9 a, u0 A, M
( P& Q5 R. @8 |/ e
0 T, y9 [8 T# o( R
7 ^  w6 d, M, E5 ~: g. }Raid36 N, r1 X) W% V$ x
' v& \6 J9 R8 d8 |' K1 ?
由于raid2缺点比较多,比如非事务性IO对他的影响,校验盘数量太多等等。Raid2的劣势,就在于它的将数据以bit为单位,分割,将原本物理连续的扇区,转变成物理不连续,逻辑连续的,这样就导致了它对非事务性IO的效率低下。为了从根本上解决这个问题,raid3出现了。既然要从根本上解决这个问题,首先就是需要抛弃raid2对扇区进行分散的做法。Raid3保留了扇区的物理连续。Raid2将数据以bit为单位分割,这样为了保证每次IO占用全部磁盘的并行性。而raid3同样也保留了这个特点,但是没有以bit为单位来分散数据,而就是以扇区或者几个扇区为单位来分散数据。Raid3还采用了高效的XOR校验算法,但是这种算法只能判断数据是否有误,不能判断出哪一位有误,更不能修正。XOR校验使得raid3不管多少块数据盘,只需要一块校验盘就足够了。5 a+ T& @& u1 ?8 \% k& @  }% `% ^
  \" [, e; l7 ]9 ?) q" C

% o% S4 J( q8 Q3 }- y( g

9 u1 M9 l5 K' o6 @. M8 U. ]# ]8 G% O/ a, ~- X% ~6 v6 \
Raid3的每一个条带,其长度很小,深度为1。这样的话,每个segment的大小一般就是1个扇区或者几个扇区的容量。以上图的例子来看,4块数据盘,一块校验盘,每个segment,也就是图中的一个block portion,假如为2个扇区大小,也就是1k,则整个条带大小为4k,如果一个segment大小为8个扇区,即4k,则整个条带大小为16K。
我们还是用一个例子来说明raid3的作用机制。比如,一个4数据盘,1校验盘的raid3系统,segment size为2个扇区大小即1k。raid3控制器接受到了这么一个IO:写入 初始扇区10000长度8,即总数据量为8乘512字节=4k。则控制器先定位LBA10000所对应的真实物理LBA,假如LBA10000恰好在第一个条带的第一个segment的第一个扇区上,那么控制器将这个IO数据里的第1、2个512字节写入这个扇区,同一时刻,第3、4个512字节会被同时写入这个条带的第二个segment中的两个扇区,其后的数据同样被写入第3、4个segment中,此时恰好是4k的数据量。也就是说这4k的IO数据,同时被写入了4块磁盘,每块磁盘写入了两个扇区,也就是一个segment,他们是并行写入的,包括校验盘,也是并行写入的,所以raid3的校验盘没有瓶颈,但是有延迟,因为增加了计算校验的开销。但现代控制器一般都使用专用的XOR硬件电路而不是cpu来计算xor,这样就使得延迟降到最低。上面那个情况是IO size刚好等于一个条带大小的时候,如果IO size小于一个条带大小呢?我们接着分析,还是刚才那个环境,此时控制器接收到IO大小为2K的写入请求,也就是4个连续扇区,那么控制器就只能同时写入两个磁盘了,因为每个盘上的segment是2个扇区,其他两个磁盘此时就是空闲的,也只能得到两倍的单盘传输速率。我们再来看看IO size大于一个条带大小的情况,会发生什么。还是那个环境,控制器收到的IO size=16k。则控制器一次所能并行写入的,是4k,这16k就需要分4批来写入4个条带。其实这里的分4批写入,不是先后,而还是同时,也就是这16k中的第1、5、9、13k将由控制器连续写入磁盘1,第2、6、10、14k,连续写入磁盘2,依此类推,直到16k数据全部写完,是并行一次写完,这样校验盘也可以一次性计算校验值并且和数据一同并行写入。而不是“分批”。
通过比较,我们发现,与其使得IO size小于一个条带的大小,空闲一些磁盘,不如使得Io size大于或者等于条带大小,使得没有磁盘空余。因为上层IO size是不受控的,控制器说了不算,但是条带大小是控制器说了算的,所以如果将条带大小减少到很小,比如2个扇区,一个扇区,则每次上层IO,一般情况下都会占用所有磁盘,进行并发传输。可以提供和raid2一样的传输速度,并避免raid2的诸多缺点。Raid3和raid2一样,不能并发IO, 因为一个IO要占用全部盘,就算IO size小于strip size,因为校验盘的独享,也不能并发IO。
8 _5 s5 ^. i. P

3 p  W& o) w8 i5 j8 U
RAID3

( e+ W+ D3 G% w
IOPS
( D3 \7 ~% P2 x4 B2 p, B9 \, P0 L0 r
& E, E0 ]: A9 ^/ o. q$ ~4 o. k

( d+ {- v! \* n4 a3 W2 Q( }
并发IO

: f1 S% G$ z6 H7 u( Y5 u- ]
顺序IO

- C4 h: T/ c) n; `) a) g
并发IO

% B1 d0 ~0 x' y0 H* F0 [
顺序IO
* w# ^' E: w6 a/ k' v* N! M
随机IO
$ r; F! W8 {! {) M: N7 N5 t
连续IO

9 m/ e: j, A9 t2 J
随机IO

+ {$ R9 J0 ^! ^% K
连续IO

; e+ u4 _; s. u( D; _
随机IO
7 z( P+ a) G) ]* Y. g. x  h
连续IO
7 F8 E; s: D& p* h# @  K. y
随机IO

+ @) b$ R( C4 t! a8 X/ Y
连续IO
+ T9 `/ g; c. C  V8 i
Io size大于strip size
" o* A' F$ R0 x$ M( l' \" T
不支持

- d$ d5 T4 \: M  F
不支持
  d! J; N9 P* \3 s' M8 H, w% ~
提升极小

3 }! R4 e# o0 T- ~
提升了N倍
$ P! M% T! Z( d) b. y1 ~
不支持
9 X. S/ @, Z0 u3 L( o8 w
不支持

* O0 |% g" G+ d. L0 p( l8 l- G
提升极小
# t0 K& n0 y5 l0 I. c$ B
提升了N倍

+ J4 p+ _8 ^" j5 p! a. w
Io size小于strip size
5 U4 k3 U( N1 i% c
不支持

+ g# u/ O9 W9 l: ?
事物性IO可并发,提升并发系数倍

5 g1 ?# e& Y2 a9 U8 x" Q- l3 U
提升极小
6 \4 H. ]; U$ p% q3 X- v
提升了N乘IO size/strip size倍
2 u( c" y3 ?- Q/ g
不支持

: `$ _: i9 V1 L; K* L2 i( w, }0 G
事物性IO可并发,提升并发系数倍

2 |6 z  L5 W2 h$ U5 U2 Z
提升极小

8 [, H# a' k! h( s( l
提升了N乘IO size/strip size倍
/ L" _. T& t/ k9 v: K8 D5 f- q
注:N=组成raid3的数据磁盘数量。和raid2相同,事物性连续IO可能并发。
! m5 }+ o1 e9 s. j: @4 T和raid2一样,raid3同样也是最适合连续大块IO的环境,但是它比raid2成本更低,更容易部署。" `3 R- s  `* y* }0 p. |
具体分析:
1 T: F; j1 s' q6 q% i0 A不管任何形式的raid,只要是面对随机IO,其性能比单盘没有大的优势,因为raid作所的只是提高传输速率,并发IO,容错。随机IO只能靠降低单个物理磁盘的寻道时间来解决。而raid不能优化寻道时间。所以随机IO,raid3也同样没有优势。
& a: u0 ~3 L7 i. I0 B7 o连续IO,因为寻道时间的影响因素可以忽略,raid3最拿手,因为象raid2一样,raid3可以大大加快数据传输速率,因为他是多盘并发读写。所以理论上可以相对单盘提高N倍的速率。- E3 h) K+ o& s7 n" I
! z" Z0 D- I. [
% i$ f. g: G0 o

6 B* K6 \# }# L2 bRaid4
1 K; S- F( f4 G& v4 c  I- j. E
1 [; s* s: d7 g
1 c, q+ u! E. |) H+ C
0 R" I( w+ y8 Y9 K5 Q' w  F9 i

) s0 z" o$ H; V9 A* R
! }+ H+ j$ z: T& L/ e9 ~* n不管是Raid2还是raid3,他们都是为了大大提高数据传输率而设计,而不能并发IO。诸如数据库等等应用,他们的特点就是随机IO和小块IO。想提高这种环境的IOPS,根据公式:IOPS=IO并发系数/(寻道时间+数据传输时间),随机读导致寻道时间很大,靠提高传输许率已经不是办法。所以观察这个公式,想在随机IO频发的环境中提高IOPS,唯一能够做的,只有提高IO并发系数,不能并发IO的,想办法让他并发IO,并发系数小的,想办法提高系数。& k8 M5 \) V. H
在raid3的基础上,raid4被发展起来。我们分析raid3的性能的时候,曾经提到过一种情况,就是io size小于strip size的时候,此时有磁盘处于空闲状态,而如果抓住这个现象,同时让队列中的下一个IO来利用这些空闲的磁盘,岂不是正好达到并发IO的效果了么?所以raid4将一个segment的大小做的比较大,以至于平均IO size总是小于strip size,这样就能保证每个IO少占用磁盘,甚至一个IO只占用一个磁盘。
, ?: K8 I) h7 ?是的,这个思想对于读IO是对路子的,但是对于写IO的话,有一个很难克服的问题,那就是校验盘的争用。考虑这样一种情况:4块数据盘+1块校验盘组成的raid4系统,某时刻一个IO占用了前两块盘+校验盘,此时虽然后两块是空闲的,可以同时接受新的IO请求,但是如果接受了新的IO请求,则新IO请求同样也要使用校验盘,由于一块物理磁盘不能同时处理多个IO,所以新IO虽然占有了数据盘的写权限,但是写校验盘的时候,仍然要等旧IO写完后,才能写入校验,新IO才能完成,这样的话,就和顺序IO无异了,数据盘可并发而校验盘不可并发,这样不能实现并发IO。8 B. x4 W9 [0 S( N' f
下面我们来说几个概念。! f# L+ V* b  |! g. W; h

4 K: |7 H0 }, x3 g: `: m3 v
5 h; P/ v' e' _  G) T1 @8 ^. ^& d

2 D7 @9 t1 M- e" A8 r: F
整条写、重构写与读改写
整条写(Full-stripe Write):整条写需要修改奇偶校验群组中所有的条带单元,因此新的奇偶校验值可以根据所有新的条带数据计算得到。不需要额外的读、写操作。因此,整条写是最有效的写类型。整条写的例子,比如raid2,raid3。他们每次IO总是几乎能保证占用所有盘,因此每个条带上的每个segment都被写更新,所以控制器可以直接利用这些更新的数据计算出校验数据之后,在数据被写入数据盘的同时,将计算好的校验信息写入校验盘。
重构写(Reconstruct Write):如果要写入的磁盘数目超过阵列磁盘数目的一半,采取重构写方式。在重构写中,从这个条带中不需要修改的segment中读取原来的数据,再和本条带中所有需要修改的segment上的新数据计算奇偶校验值,并将新的segment数据和没有更改过的segment数据以及新的奇偶校验值一并写入。显然,重构写要牵涉更多的I/O操作,因此效率比整条写低。重构写的例子,比如raid4中,如果数据盘为8块,某时刻一个IO只更新了一个条带的6个segment,剩余两个没有更新,则重构写模式下,会将没有被更新的两个segment的数据读出,和需要更新的前6个segment的数据计算出校验数据,然后将这8个segment连同校验数据一并写入磁盘。可以看出,这个操作只是多出了读两个segment中数据的操作。
- d" i# s7 p% W$ k1 e& G5 z
读改写(Read-Modify Write):如果要写入的磁盘数目不足阵列磁盘数目的一半,采取读改写方式。读改写过程如下:(1)从需要修改的segment上读取旧的数据;(2)从条带上读取旧的奇偶校验值;(3)根据旧数据、旧校验值和需要修改的segment上的新数据计算这个条带上的新的校验值;(4)写入新的数据和新的奇偶校验值。这个过程中包含读取、修改、写入的一个循环周期,因此称为读改写。读改写计算新校验值的公式为:新数据的校验数据=(老数据 EOR 新数据) EOR 老校验数据。如果待更新的segment已经超过了条带中总segment数量的一半,则此时不适合使用读改写,因为读改写需要读出这些segment中的数据和校验数据,而如果采用重构写,只需要读取剩余不准备更新数据的segment中的数据即可,而后者数量比前者要少,所以超过一半,用重构写,不到一半,用读改写。整条更新,就用整条写。写效率:整条写>重构写>读改写
明白了这些概念之后,我们就可以继续深入理解raid4了。如果仅仅根据争用校验盘来下结论说raid4不支持并发IO,在经过了以上三个概念的描述之后,看来显然是片面的。我们设想这样一种情形,某时刻一个IO只占用了全部磁盘的几块盘,另一些磁盘空闲,如果此时让队列中下一个IO等待的话,那么当然不可实现并发IO。此时我们考虑:如果队列中有这样一个IO,它需要更新的LBA目标和正在进行的IO恰好在同一条带上,并且处于空闲磁盘,而又不冲突,那么此时我们恰好就可以让这个IO也搭一下正在进行的IO的顺风车,反正都是要更新这个条带的校验segment,与其两个IO先后更新,不如让他们同时更新各自的数据segment,而控制器负责计算本条带的校验块。这样就完美的达到了IO并发。但是,有个问题,这种情况遇到的几率真是小之又小。即便如此,控制器如果可以对队列中的IO目标LBA进行扫描,将目标处于同一条带的IO,让其并发写入,这就多少类似NCQ技术了,不过这种技术需要上层软件的配合,因为乱序IO,会失去事务的顺序性,所以还需要上层软件作一些处理。
3 o. W7 e9 |' i7 r
除了在控制器内部实现这种算法之外,我们还可以直接在上层来实现这种模式。上层就是指操作系统的文件系统。因为文件系管理着底层磁盘。文件系统决定数据写往磁盘上的哪些扇区。所以完全可以在文件系统这个层次上,将两个不同事物的IO写操作,尽量放到相同的条带上,也就是说,比如一个条带大小为16k,可以前8k放一个IO的数据,后8k放也另一个IO的数据,这两个IO在经过文件系统的计算之后,经由磁盘控制器驱动程序,向磁盘发出同时写入整个条带的操作,这样就构成了整条写,如果实在不能占满整条,那么也应该尽量达成重构写模式,这样不但并发了IO,还使得写效率增加。这种在文件系统专门为raid4做出优化的方案,最点型的就是netapp公司的磁盘阵列操作系统data ontap,这个操作系统中文件系统模块称为WAFL。WAFL文件系统的设计方式确保能够最大限度地减少校验盘寻址操作。 上图右半部对比显示了WAFL如何分配同样的数据块,从而使得RAID 4更加有效。 WAFL总是把相关的数据块写到彼此邻近的条带中,消除校验盘上的长时间寻址操作。只要可能,WAFL也把多重数据块写到同样的条带中,从而进一步减少校验盘上的阻塞。FFS在上图左半部中使用六道独立的条带,因此致使六个校验盘块需要更新。 上图右半部中,WAFL使用仅仅3道条带,即只有三个校验块需要更新。从而大大提高了RAID性能,消除了校验盘瓶颈。
" u% O) {2 e9 S2 t: c
) y3 o3 @; T. e/ T1 m

5 A! p2 P1 r* a! f" T9 v
RAID4

( D$ b" t( w1 X, ?* d. A/ B( w
IOPS

7 V7 }: k5 b# O' [2 X/ D

- A& \$ K7 J: H, I' @) }

+ r0 i8 Z- A, D9 _- V) N) m0 W
特别优化的并发IO

( n5 R5 ~& B+ r( t9 J
顺序IO

9 y' }- c) ~) j2 Y7 k0 b
特别优化的并发IO

4 y. h( J+ l0 N- F# W! c5 H, p6 D* e
顺序IO
' v" A) X" A0 W' }, l- N$ w9 C
随机IO

" R" p/ d. e) C" n2 D+ `
连续IO
, a; h1 O) q" [. g+ s
随机IO

1 }9 t2 P, I1 J- f& O# H" D
连续IO
4 M5 M- x$ Q" T7 x; i6 `
随机IO

, |4 M, c* K0 j  }; x
连续IO
# b, u5 u0 u1 n
随机IO
. f. Q5 v: h4 m9 q1 q6 `: R- c8 o* D" P
连续IO

8 N- @  f0 a' \5 H8 [$ q' {
Io size/strip size较大
8 b& ~9 |. ~2 O, l5 f. b0 l; W7 _
冲突

. `+ T# D6 M, Y$ d7 P+ L6 x9 K
冲突

0 z) a. g0 n: y. ]
提升极小

. ]2 X8 _9 }* Q7 F+ W3 J
提升了N倍
7 {  o: W; j: s+ Q% Z% w8 X0 y+ ~
冲突

8 \* H- c) @* L( a4 r
冲突
" ]8 ]3 c1 O" a. K
没有提升
5 i1 z& E9 G5 e
提升了N倍

$ I% l( A0 W% Z' M  {
Io size/strip size较小

/ b: ]) B+ [( x) X9 V
提升极小

( u. P6 g# h: `, i- C+ z. r, S
提升并发系数倍
' U9 B" T9 y2 ]5 U- a8 F3 T6 h
几乎没有提升
. p4 n: ^' p# V( N
几乎没有提升
7 S* ?) G  l0 K+ f3 b
提升并发系数倍
9 [0 R. b4 N& V
提升并发系数乘N倍
6 G* C6 _& e8 p0 E6 L
性能降底
. y+ c8 c. K! A7 F# _% D
性能降底
( ?$ j" [1 h/ E+ h4 a4 h2 W1 p, C4 ^
注:N为raid4数据盘数量。Io size/strip size太大则并发IO几率很小。
  _. V5 f* `( r0 d6 W9 J值得注意的是,如果io size/strip size的值太小,则顺序IO读,不管是连续还是随机IO,几乎都没有提升。顺序IO写,性能下降,因为io size很小,又是顺序IO,则只能进行读改写,性能降底不少。
1 B8 ^+ @' _2 g, y; u所以,如果要使用raid4,不进行特别优化,是不行的,至少要让他可以进行并发IO。我们观察表格可知,并发IO模式下,性能都有所提升。然而如果要优化到并发几率很高,实则不容易。目前只有netapp的WAFL文件系统还在使用raid4,其他产品均未见使用。面临淘汰,取而代之的是拥有高并发几率的raid5系统。5 L% J+ F; L9 s6 ?- p$ F
" I6 q+ M- u. G! A" `# K
8 m0 ?1 d8 k+ G, C! y0 c( T

) ~9 C5 G2 d0 t9 M( Q; n6 }5 ^$ Z# }Raid5
5 k' w. r- O" V. p; Q

$ P: c# O( p0 g$ [+ j* a' F

  {/ |6 p) r8 R; L: `7 o5 l

0 r! z6 u# S1 U$ x; w* n3 s4 T& e: ]( q( ~# X
为了解决raid4系统不能并发IO困难的窘境,raid5相应而出。Raid4并发困难,是因为他的校验盘争用的问题,如果能找到一种机制,能有效解决这个问题,则实现并发就会非常容易。Raid5恰恰解决了校验盘争用这个问题。Raid5采用分布式校验盘的做法,将校验盘打散在raid组中的每块磁盘上。如图所示。每个条带都有一个校验segment,但是不同条带中其位置不同,在相邻条带之间循环分布。为了保证并发IO,raid5同样将条带大小做的较大,以保证每次IO数据不会占满整个条带,造成队列其他IO等待。所以,raid5如果要保证高并发率,那么每个IO几乎都是读改写模式,尤其是在随机IO的情况下,所以raid5拥有较高的写惩罚,但是在随机IO频发的环境下,仍然能保持较高的IOPS。# F/ Y6 d$ @7 d" O0 w4 }1 _
们来分析一下raid5具体的作用机制。以上图为例的环境,条带大小80k,每个segment大小16k。某一时刻,上层产生一个写IO:写入 初始扇区10000
5 F5 _1 N( C  Z# u8 R长度8,即写入4k的数据。控制器收到这个IO之后,首先定位真实LBA地址,假设定位到了第1个条带的第2个segment(位于图中的磁盘2)的第1个扇区(仅仅是假设),则控制器首先对这个segment所在的磁盘发起IO写请求,读出这8个扇区中原来的数据到cache,与此同时控制器也向这个条带的校验segment所在的磁盘(即图中的磁盘1)发起IO读请求,读出对应的校验扇区数据并保存到cache,随后利用XOR校验电路来计算新的校验数据,利用公式:新数据的校验数据=(老数据 EOR 新数据) EOR 老校验数据。现在cache中存在:老数据,新数据,老校验数据,新校验数据。然后控制器立即再次向相应的磁盘同时发起IO写请求,将新数据写入数据segment,将新校验数据写入校验segment,并删除老数据和老校验数据。+ C( W/ |# h1 Y" j3 J
在上述过程中,这个IO占用的,始终只有1、2两块盘,因为所要更新的数据segment我们假设位于2盘的1条带的2号segment,而这个条带对应的校验segment位于1盘,自始至终其他任何磁盘都没有用到。那么如果此时队列中有这么一个IO,他的LBA初始目标假如位于图中下方红框所示的数据segment中(4盘),IO长度也不超过segment的大小,而这个条带对应的校验segment位于3盘上,这两块盘未被其他任何IO占用,所以,此时控制器就可以并发的处理这个IO,和上方红框所示的IO,达到并发。
+ e$ L  f" a( C( K& R+ hRaid5相对于经过特别优化的raid4来说,在底层就实现了并发,可以脱离文件系统的干预,任何文件系统的IO,都可以实现高并发几率,而不像基于wafl文件系统的raid4,需要在文件系统上规划计算出并发环境。( t* O- P6 z" f6 f
Raid5磁盘数量越多,可并发的几率就越大。
2 r9 V' _# ~5 f7 v% I9 [4 f# D
RAID5
( B8 [7 _3 @3 g+ D
IOPS

6 H; r( m& L5 g4 o
# T! d# b  A5 t7 T& p; h
; N) w6 B% K9 h% p% F
并发IO

$ A" X! H$ }( Z; L9 n
顺序IO
% t: l; i2 S* ?% q0 O
并发IO
* Y0 V3 u+ ^: M0 s+ z0 t
顺序IO

9 d' [1 i1 {8 t) p8 H4 H+ T
随机IO
, l( V. }* [' U
连续IO
$ O2 B0 r, z7 H& D! l5 M
随机IO

3 ]5 N5 h" `1 w) U* H0 Q1 U
连续IO
( |  {! c* h( m! X0 D) n
随机IO
) \1 ]5 o3 r- {  T  y7 |2 }4 F
连续IO

0 k# m2 H/ i- M2 k' w2 w
随机IO

/ C, R/ g2 S- S( T& W, L% O
连续IO
/ k" a$ x* @: }5 l& K, H
Io size近似strip size
$ d8 s8 s& d& F% z0 C$ r0 t. U
不支持
9 r9 x' B6 O8 Q. a
不支持
/ C, a- h8 S6 a( e; u
提升极小
/ P( Q# r' o2 v! U4 J$ i
提升了N倍
. q4 q( o( W1 N+ a  P7 v* J+ M
不支持
3 D' q( }3 O* ^" o* j4 `
不支持
: K" W/ n% `% f. Z$ F
提升极小

1 g& H9 Y  ^9 q6 _9 B
提升了N倍
: H2 e, {# K# ^  T$ Y% S$ l
IO size大于segment size重构写
3 {# @& X( V6 c- X# `$ x9 E
提升并发系数倍

* |; S/ E$ H/ t9 t. p) V! L
提升并发系数倍

+ q; v3 u7 K% @; W( X! I/ _
几乎没有提升
" l+ o) N4 J' h5 l; g: z
提升了IO size/segment size倍
/ m8 S1 D6 e( ~) N
提升并发系数倍

6 i7 z, c9 I# I) C, P2 R
提升并发系数倍
3 Q9 `, t  c  C4 a  v: a7 o
性能下降
+ D) r* L+ {, D6 Q% f7 a9 m9 r6 R' p* b
提升极小
- D" X* ]3 C+ G7 N& K' R) V6 c
Io size小于segment size读改写
; q% \( Q2 A. h+ Q, n
提升并发系数倍

$ d1 \- R$ ~' j- @! {1 q  [' h+ [
提升并发系数倍
; ^8 Z. D. `3 c- y$ O* B; q
提升极小

, Z. y5 n5 U. O5 t* R' p" V7 A
没有提升
# F+ Q6 c/ u: Y) T4 B& F5 d
提升并发系数倍
; F, ^9 a, l5 D8 w+ p2 K, M
提升并发系数倍
( U8 L* X' z8 Q" i  J9 i2 h9 @
性能下降
. t/ b) D0 P, `
性能下降
0 {1 {- |( h) B" j2 c8 s, {: W
raid5最适合小块IO,并发IO的情况下,性能都较单盘有所提升。
% ?- ?) s9 p( v9 V; b( m; j# J
$ d; V4 H+ u1 `2 m5 U+ t: x7 T0 |' Y5 Z0 u% N5 K0 ^1 \9 ?
Raid6
' a" t% @& M: |. a4 [6 `5 O9 X& t  z$ ^  C2 i) y
raid6之前的任何raid级别,最多能保障在坏掉一块盘的时候,数据仍然可以访问,但是如果同时坏掉两块盘,则数据将会丢失。为了增加raid5的保险系数,raid6被创立。Raid6比raid5多增加了一块校验盘,同时也是分布打散在每块盘上,用另一个方程式来计算新的校验数据,这样,raid6同时在一个条带上保存了两份数学上不相关的校验数据,这样能够保证同时坏两块盘的情况下,数据依然可以通过联立这两个数学关系等式来求解丢失的数据。Raid6较raid5在写的时候,会同时读取或者写入额外的一份校验数据,不过由于是并行同时操作,所以比raid5慢不了多少。其他特性和raid5类似。
( K0 w9 J1 T; J& g& o' f4 l/ h, ~2 y
RAID6

' v4 h; }( Z' E6 t; \* ^  v/ o6 Z5 ~
IOPS

9 U- G, k) b% O( y# ]- m9 {& N
# |2 D7 k* F4 O+ ]0 Z5 {5 M1 S; ]$ |
2 B2 r: j# c5 ~& S. L
并发IO

: T* O  E' f6 f! z/ V! J3 X+ U
顺序IO
1 @6 T& \  O3 O" S1 ]& l
并发IO
, Y4 z: i4 ?# A/ \5 h
顺序IO
$ R; ?& v% a" |; I$ {' f
随机IO
/ s9 I! O" c  W2 j9 t
连续IO

( V& h" J5 a6 G$ \$ U/ m( [# ~9 c
随机IO
/ X, m# Q; J0 m$ O$ t" W
连续IO

3 F- m+ ?4 D7 W% W1 m
随机IO
, A+ t# A+ ~% r  h4 I  k
连续IO
; Q( ^" X+ n1 x- j
随机IO

- x/ r; @5 }; w! [6 C  S4 X# J) I
连续IO
; ?% R1 w; K5 H, z  r
Io size近似strip size
1 z6 E7 i, x8 U
不支持

7 b& n$ y& Z  p6 q' j2 n5 V0 }
不支持
3 ~6 L; `1 q& p4 O
提升极小

" `" t2 E% k& P6 a
提升了N倍

% |8 G8 n; S* J7 T: D; e) {
不支持

+ G6 ^4 L7 L' N3 x: c  W
不支持

4 v. h' A6 ^& @/ g
提升极小

6 [# I' L- X+ S( R
提升了N倍

* a: j- Z4 m; D% A; {# [
IO size大于segment size重构写
! E, J! t5 e4 y3 d: [+ ^* b" e
提升并发系数倍

6 d. T# n& m6 q7 y
提升并发系数倍
& F! b8 h. u" n( C  I2 C
几乎没有提升
( w7 [" x4 t/ I+ {
几乎没有提升

( A7 |  H# F6 ^# Q
提升并发系数倍
7 _! Z' w( N9 h1 Q" c9 K  B) R
提升并发系数倍

6 ?$ L# U/ M8 ^- c9 f# J
性能下降

9 s/ o8 K! ?) U# t) I
提升极小

) Y. o  d2 m* f( W4 q
Io size小于segment size读改写
0 T+ G2 q" _- I: X/ k
提升并发系数倍

8 y& P/ A( y7 l- o5 ]
提升并发系数倍
' G% ?+ V# X- _! ~7 N
提升极小
/ l! G" q) a1 ?9 y
没有提升
; j9 S4 q# w. E  e. ?
提升并发系数倍

/ ?. D# T' H0 P# @1 }. ]2 ^. _: r
提升并发系数倍

  _& j" J8 {* l# l# w5 N" |
性能下降

0 @# i. q+ `2 X0 U
性能下降

# I# i7 \& U8 u
4 Q& F; ]/ ~4 `  h% ]+ X6 c- v

6 ?- m- V$ k( `. P  U2 w* \
( g) J/ v# t5 ?/ c2 q! Z0 h
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|赛格电脑 华强北 电脑城 南山赛格 龙岗电子世界 龙华电脑城 沙井电脑城 松岗电脑城 pc4g.com ( 粤ICP备16039863号 )

GMT+8, 2026-3-7 08:22 , Processed in 0.098546 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表