RAID는 OS를 host하는 big disk 같은 것이다.
그리고 inexpensive(or independent) disk를 사용한다.
RAID는 더 빠르고, 크고, reliable한 disk system을 위해 multiple disk를 사용한다.
Host system에게 RAID는 그저 하나의 큰 disk로 보인다.
Reliable하다는 것은 independent/inexpensive disk 중 하나가 failure가 났을 때 그 failure를 극복할 수 있다면 single physical disk를 사용하는 것보다 RAID가 더 reliable한 것이다.
RAID의 장점:
Speed -> Throughput
Size -> Capacity
Failure -> Reliability
RAID가 I/O request를 받았을 때는 각 different disk에 대해 I/O를 수행해야하기 때문에 one or more physical I/O를 하게 된다.
각 disk를 어떻게 organize했는지에 따라 어떻게 I/O를 할지가 결정되는데 이런 disk들을 one single big disk처럼 보이게 한다.
Mirrored RAID system은 각 block의 두 copy를 각각의 disk에 따로 저장하는 것이다.
On request가 들어와도 RAID controller가 두 copy를 서로 다른 disk에 저장하기 때문에 logical I/O가 한 번 발생했을 때 두 번의 physical I/O를 수행한다.
Parity calculation은 XOR operation을 사용한다.
Data의 무결성을 검증하는 데에 사용한다.
RAID는 특정 종류의 disk fault를 detect하고 recover하도록 디자인되었다.
Fail-stop fault model에서 disk는 working of failed의 두 상태를 가질 수 있다.
Fail-stop fault model은 special type of disk failure로, disk에 failure가 있으면 disk는 working을 중지한다 (fail했는데 실행될 수는 없다).
RAID controller는 disk가 fail된 것을 즉시 알 수 있다.
만약 disk에 failure가 발생했는데도 disk가 잘못된 방향으로 계속 일을 한다면 그건 fail stop이라고 하지 않고 malfunctioning이라고 한다.
RAID level 0이 가장 단순한 형태이다.
RAID level 0 에서는 round-robin 방식으로 block을 disk에 spread한다.
No redundancy(data 중복 없음), 좋은 performance와 capacity.
Performance는 엄청 증가한다.
Disk가 하나였다면 request를 하나씩 처리했을텐데 data를 분산해서 저장했기 때문에 겹치지 않는 disk에 존재하는 data에 대한 I/O라면 동시에 처리할 수 있다.
RAID-0의 capacity는 완벽하다.
모든 disk를 사용할 수 있기 때문이다.
RAID-0의 performance는 좋다.
RAID-0에 있는 모든 disk를 utilize할 수 있기 때문이다. 병렬로 I/O를 처리할 수 있다는 의미이다.
RAID-0의 reliability는 별로다.
Disk를 여러개 사용했지만 data를 복사해둔 것은 아니라서 data 손실이 발생하면 복구할 방법이 없다.
RAID performance를 평가할 때에는 두 개의 performance metric을 사용한다.
S
와 R
은 위와 같은 방법으로 구한다.
RAID-0에서 모든 data에 접근하려면 모든 disk가 있어야 한다.
복사된 data가 없고 그저 분산해서 저장했을 뿐이기 때문이다.
따라서 throughput을 구할 때는 N
개의 disk를 전부 사용해야한다.
RAID-1은 RAID-0과 다르게 disk failure를 견뎌낼 수 있다.
RAID-1에서는 각 block의 copy를 시스템에 저장하기 때문이다.
그리고 그 copy를 separate disk에 저장한다.
RAID-1에서는 single write이 2 write을 generate한다. 복사본을 저장해야하기 때문이다.
그리고 전체 disk space를 사용할 수 없다. copy를 저장해야하기 때문에 전체 disk space의 절반만 사용 가능하다.
하지만 한 disk에서 일어난 failure는 견딜 수 있다.
RAID-10은 mirror+stripe 이고 RAID-01은 stripe+mirror이다.
RAID-1의 capacity는 비싸다.
RAID-1에서 사용할 수 있는 capacity는 N/2
이기 때문이다.
복사본을 저장해야하기 때문에 원래 disk 용량의 절반밖에 사용하지 못한다.
RAID-1의 reliability는 좋다.
One single failure는 견딜 수 있다! 복사본이 있기 때문이다.
RAID-1에서는 한 번의 write를 수행하기 위해서 두 번의 phyical write가 발생한다.
Random read에서는 same block에 대해 동시에 2개의 request가 와도 disk가 2개라서 바로 요청을 처리해줄 수 있어서 N * R MB/s
이다.
RAID-4에는 하나의 parity block이 추가된다.
Parity block은 stripe of block에 대한 redundant information을 담고 있다.
Parity block의 값은 stripe의 모든 disk를 XOR연산한 결과이다.
각 disk 중 하나에 문제가 생긴다면 parity block을 통해 recover할 수 있다!
RAID-4에서는 한 disk에 data를 저장하게 되면 나머지 block들의 값을 읽어서 한 parity block을 생성해야 한다.
RAID-4의 capacity는 RAID-1에 비해 상당히 좋은 N-1
이다.
RAID-1의 capacity는 절반이나 줄어들었는데 RAID-4는 parity block을 저장할 한 disk만 잃는다.
RAID-4의 reliability는 딱 하나의 disk에서 발생하는 failure만 감당할 수 있고 그 이상은 안된다.
XOR을 계산해야하는데 여러 disk에 문제가 있으면 안되기 때문이다.
어떻게보면 RAID-0처럼 striping 되어있는건데 거기에 parity block을 저장하기 위한 disk 하나만 제외된 결과라고 생각하면 된다.
Parity disk가 성능의 bottleneck이 될 수도 있다.
Data가 random하게 write 되더라도 모든 parity block이 한 disk에 위치하기 때문에 그 disk에서는 write을 순차적으로 처리해야해서 bottleneck이 된다.
또한 parity disk에는 모든 parity block이 존재하기 때문에 다른 disk에 비해 write가 많이 일어나서 수명이 짧아지고 failure가 일찍 발생하게 된다.
Random write에서 RAID-4의 throughput은 형편없다.
R/2 MB/s
이다.
RAID-5는 small write problem의 해결책이다.
Parity block을 disk에 돌아가면서 저장한다.
이것을 통해서 parity-disk에 대한 bottleneck을 제거한다.
RAID-5의 capacity는 RAID-4와 동일하다.
RAID-5의 reliability는 RAID-4와 동일하게 1 disk failure만 감당할 수 있다.
RAID-5의 sequential read/write, single read/write performance는 RAID-4와 동일하다.
하지만 RAID-5는 RAID-4에 비해 random read가 살짝 좋다.
RAID-5는 모든 disk를 utilize할 수 있기 때문이다 (RAID-4는 한 disk를 utilize할 수 없었다).
그리고 RAID-5는 random write에서 RAID-4에 비해 확실히 좋다.
동시에 두 write request가 overlap될 수 있기 때문이다.
Disk의 수를 늘릴 수록 parallel하게 수행할 수 있는 write request의 수가 점점 늘어난다.
RAID-0은 capacity와 performance를 놓이기 위해 생겼지만 failure를 견딜 수는 없다.
RAID-1은 disk failure를 견딜 수는 있지만 capacity가 절반으로 감소하였다.
RAID-4는 reliability를 유지하고 disk failure도 견딜 수 있는데 capacity를 절반이나 잃지는 않았다! 남은 N-1
disk를 사용할 수 있었지만 parity disk로 인한 성능 bottleneck이 있었다.
RAID-5는 RAID-4와 동일하지만 rotate parity를 사용해서 모든 random write request를 block하지는 않았다. 그리고 모든 disk가 같은 life time을 갖게 되었다.