본문 바로가기
공부/OS

[운영체제] RAID

by algosketch 2021. 6. 7.

 하드디스크는 비용대비 사용할 수 있는 용량이 크다. 하지만 물리적인 부분을 많이 사용하는 HDD 특성상 고장의 빈도수가 높고 느리다는 단점을 갖고 있다. RAID 는 HDD 여러 개를 같이 사용하여 이런 문제를 해결한다. 또한 RAID 를 사용하는 프로그래머는 여러 개의 HDD 를 이용하고 있다는 것을 몰라야 한다.

RAID : Redundant Array of Inexpensive Disks 의 약자이다. 근데 요즘엔 비싸서 inexpensive 대신 independent 로 사용하기도 한다. 서버에서는 표준적으로 사용한다.
RAID Controller : cpu, sw, memory 를 갖고 있는 HW 이다. RAID 자체가 운영체제를 갖고 있는 하나의 시스템이다.
RAID level 에 따라 configuration 을 설정할 수 있다. level 은 0~6 정도가 있다.

RAID 0 : striping

 예를 들어 디스크가 4개라면 병렬로 처리하여 4배 빠르게 처리할 수 있다. 용량 또한 4배가 된다. chunk size 는 1 block 이 될 수도 있지만, 한 번 block 을 찾으면 seek time 이 들지 않기 때문에 좀 더 크게 잡는 것이 좋다. 2 block 을 chunk size 로 둘 수도 있고, 일반적으론 64kb 를 chunk size 로 둔다. 대신 chunk size 가 작으면 병렬성이 좋다.

performance

sequential : 47 mb/s
random : 0.98 mb/s
RAID 여도 random access 라면 disk 의 seek time 에 의존적이다.

disk 의 개수 : N
디스크가 하나일 때 sequential 처리 속도 : S
디스크가 하나일 때 random 처리 속도 : R
이라고 하자.

용량 : N
신뢰성 : 낮음. 하나의 disk 만 고장나도 복구 불가능하다.
read&write 속도 : N * S, N * R

RAID 1 : Mirroring

 마치 거울처럼 같은 내용을 여러 개의 디스크에 저장하는 방법이다. 보통 RAID 만 사용하지는 않고 RAID 0 과 같이 사용한다. 보통은 RAID 10 을 사용한다. RAID 01 도 있고 이 둘의 차이는 없다. RAID 01 은 striping 한 것을 mirroring 한 것이고, RAID 10 은 mirroring 한 것을 striping 한 것이다. RAID 4, 5 가 어느정도 신뢰성도 있고 성능이나 가성비 면에서 좋지만 은행같이 중요한 시스템에서는 RAID 10 을 많이 이용한다.

평가

용량 : 2 / N
신뢰성 : 높다. 최대 2 / N 개의 디스크가 고장나도 복구가 가능하다.
read&write : N/2 * S
read : N * R
write : N/2 * R

consistent update problem

 일관성 있게 데이터가 저장되어야 한다. 만약 디스크에 write 하는 도중 전원이 나갔을 때 mirroring 하는 두 디스크의 내용이 다르다면 어떤 디스크의 데이터를 기준으로 복구할 것인가? -> controller 에 cache 를 두고 이 cache 에 같이 저장한다. 데이터 복구시 cache 와 비교한다. cache 는 백업 배터리를 사용한다.

 가성비보다 신뢰성이 중요한 상황일 때 사용한다.

RAID 2~4

 코딩 테크닉을 이용한 모델이다. 신뢰성은 RAID 1 보다 떨어지지만 하나의 디스크가 고장나는 것을 복구가 가능하다. 하나의 디스크를 parity bit 를 사용하여 디스크 하나가 고장났을 때 XOR 연산을 사용하여 오류를 검출한다. 2 : bit 단위, 3 : byte 단위, 4 : sector 단위

write 속도 문제

addtive parity : 한 번의 write 가 3 번의 read 를 발생시켜 오버헤드가 크다.
subtractive parity : (N = 5 일 때)disk 4 만 read 한다. 원래 있던 값을 xor 로 없애주고 새로운 값을 계산하여 넣어 준다. write 한 번이 write 한 번을 유도한다.

 disk 4 에 parity bit 를 계속 업데이트 해 줘야 하므로 random write 할 때에는 병렬로 사용할 수가 없다. 오히려 disk 하나만 사용할 때보다 성능이 떨어진다.

평가

용량 : N-1
신뢰성 : 하나의 디스크 고장을 복구할 수 있다.
read : S * (N-1), R * (N-1)
write : S * (N-1), R / 2

RAID 5

 RAID 2~4 의 random write 를 개선시킨 모델이다. parity bit 를 여러 디스크에 분산시켜 저장한다. random write 에서도 병렬 계산이 가능하다.

평가

용량 : N-1
신뢰성 : 하나의 디스크 고장을 복구할 수 있다.
sequential R&W : (N-1) * S
Random Read : N * R
Random Write : n/4 * R
n/4 * R 부분은 잘 이해가 안 된다...

 RAID 6 까지 표준으로 정의되어 있고 RAID 6 은 parity disk 를 두 개 사용한다. performance 가 중요하다면 RAID 0, recovery 가 중요하다면 RAID 10 or RAID 6, balance 를 맞추려면 RAID 5 를 사용하면 된다.

hot spare : 디스크 고장시 자동으로 이 디스크로 복구, 대체하고 고장 사실을 알린다. 복구 중에도 계속 실행할 수 있도록 도와준다.

 소프트웨어로도 RAID 를 구현할 수 있다. 하드웨어 구현의 경우 controller 고장이나, disk migration 호환이 잘 안 되지만 신뢰성이 좋다. 소프트웨어 구현은 controller 가 없어도 되기 때문에 가격이 저렴하지만 잘 사용하지 않는다. 신뢰성과 성능이 떨어진다는 문제도 있지만 consistent update problem 을 소프트웨어만으로는 해결할 수 있는 방법이 없다.

'공부 > OS' 카테고리의 다른 글

[운영체제] 후기  (0) 2021.06.24
[운영체제] SSD (Solid State Drive)  (0) 2021.06.07
[운영체제] 하드디스크 (Hard Disk)  (0) 2021.06.07
[운영체제] Free space  (0) 2021.06.07
[운영체제] 데드락 (Deadlock)  (0) 2021.06.02