기록공간

4-3장. Redundant Array of Inexpensive Disk (RAID) 본문

OS

4-3장. Redundant Array of Inexpensive Disk (RAID)

입코딩 2020. 7. 23. 00:50
반응형

이번 글에서는 Redundant Array of Inexpensive Disk 또는 RAID라고 더 잘 알려진 기술을 소개한다. 이 기술은 여러 개의 디스크를 조화롭게 사용하여 고속이면서 (디스크의 일부가 고장나더라도) 대용량의 신뢰할 수 있는 디스크 시스템을 가능케한다.

 

RAID란?

외면적으로는 RAID는 하나의 디스크처럼 보인다. 읽거나 쓸 수 있는 블럭의 그룹으로 보인다. 안을 들여다보면 RAID는 여러 개의 디스크와 메모리, 시스템을 관리하기 위한 하나 또는 그 이상의 프로세서로 이루어진 복잡한 기계이다. RAID의 하드웨어는 컴퓨터 시스템과 매우 유사하며 디스크의 그룹을 관리하기 위한 전용 시스템이다.

 

RAID는 단일 디스크에 비해 여러 장점들을 제공한다. 그 중 하나는 성능이다. 디스크 여러 개를 병렬적으로 사용하면 I/O 시간이 크게 개선된다. 또 다른 장점은 용량이다. 데이터의 양이 많아지면 더 많은 디스크 공간이 필요하다. 마지막으로 RAID는 신뢰성을 높일 수 있다. RAID를 사용하지 않고 데이터를 여러 디스크에 분산하여 저장하면 디스크 중 하나가 고장 나도 데이터를 잃어버릴 수 있다. 데이터 중복 기술(redundancy)을 사용함으로써 RAID는 디스크 한 개의 고장은 감내할 수 있으며, 고장이 전혀 없는 것 처럼 동작할 수 있다.

 

RAID는 자신을 활용하는 시스템에게 이러한 장점들을 투명하게(transparently) 제공한다. 호스트 시스템은 그저 RAID를 거대한 디스크로 인식한다. 운영체제와 클라이언트 응용 프로그램은 변경 없이 계속 동작할 수 있다. 이와 같이 투명성은 RAID의 확산력(deployability)을 크게 개선시켰다. 사용자와 관리자가 소프트웨어의 호환성을 전혀 걱정하지 않고 RAID를 사용할 수 있게 하기 때문이다.

RAID는 여러 개의 디스크를 모아서 더 빠르고, 크고, 신뢰성있는 디스크를 만드는 방법

 

RAID의 종류

RAID는 6가지의 종류가 있지만, 여기서 살펴볼 중요한 RAID는 다음과 같다. 

RAID Level 0 : 스트라이핑(striping)
RAID Level 1 : 미러링(mirroring)
RAID Level 4/5 : 패리티 기반 공간 절약

이제 이 세 개의 RAID 설계를 각각 살펴볼 것이다.

 

RAID Level 0 : 스트라이핑

첫 번째 RAID 레벨은 사실 중복 저장을 하지 않기 때문에 RAID 레벨이 결코 아니다. 하지만, RAID 레벨 0 또는 스트라이핑(striping)이라고 더 잘 알려진 이 방식은 성능과 용량에 대한 훌륭한 상한 기준을 나타내기 때문에 이해하고 넘어갈 만하다.

 

가장 간단한 스트라이핑은 위 그림과 같이 블럭들을 여러 디스크에 걸쳐서 줄을 긋는 것처럼 저장한다. 그림을 보면 기본 개념은 이해할 수 있다. 디스크 배열의 블럭들을 라운드 로빈(RR) 방식으로 디스크를 가로질러 펼치는 것이다. 이 접근법은 배열의 연속적인 청크에 대해 요청을 받았을 때 병렬성을 가장 잘 활용할 수 있도록 설계되어 있다. 같은 행에 있는 블럭들을 스트라이프(stripe)라고 부른다. 따라서 블럭 0, 1, 2, 3은 같은 스트라이프에 존재한다.

 

분석

이제 스트라이핑 방식의 용량, 신뢰성, 그리고 성능을 평가해 보자. 용량 측면에서는 완벽하다. N개의 디스크에서 스트파이핑은 블럭 개수의 N배 용량(B(block) * N)만큼의 유효 용량을 갖는다. 신뢰성 측면에서는 스프라이핑은 역시 완벽하지만 나쁜 의미로 완벽하다. 어느 디스크라도 고장 나면 전체 데이터가 손실된다. 마지막으로 성능은 훌륭하다. 병렬로 사용자의 I/O 요청을 처리할 수 있기 때문에 모든 디스크가 활용한다.

 

RAID Level 1 : 미러링

스트라이핑 이후 첫 번째 RAID 레벨은 RAID 레벨 1 또는 미러링으로 알려져 있다. 미러링을 사용하는 시스템에서는 각 블럭에 대해서 하나 이상의 사본을 둔다. 각 사본은 당연히 서로 다른 디스크에 저장되어야 한다. 그렇게 함으로써 디스크 고장에 대처할 수 있게 된다.

 

일반적인 미러링 시스템에서 RAID는 각 논리 블럭에 대해 두 개의 물리적 사본을 둔다고 가정한다. 그 예제는 다음과 같다.

 

이 예제에서는 디스크 0(0)과 1(0)이 동일한 값을 갖고 디스크 0(1)와 1(1)이 동일한 값을 가지고 있다. 데이터는 미러링 된 쌍들에 대해서 스트라이핑을 적용하였다. 원본과 복사본은 서로 다른 디스크에 넣어 디스크 고장에 대비한다. 미러링된 배열에서 블럭을 읽을 때 RAID는 원본을 읽을 건지 사본을 읽을 건지 선택할 수 있다. 

 

분석

미러링을 평가해 보자. 용량 측면에서는 미러링은 비용이 많이 든다. 미러링 레벨이 2라면 최대 사용 가능한 용량의 반만 사용할 수 있다.((N * B) / 2 용량) 하지만 같은 용량의 디스크를 하나 더 준비했을 경우에는 용량은 그대로이다. (N * B)

 

신뢰성 측면에서는 미러링은 괜찮은 편이다. 디스크 중 어느 것에서 고장이 발생하여도 감내할 수 있다. 실제로 운이 따라준다면 미러링은 더 많은 고장을 감내할 수 있다. 앞의 그림에서 디스크 1에 고장이 발생하여도 디스크 0에 모든 정보가 있으므로 정보를 잃어버리지 않는다. 일반적으로 미러링 시스템의 경우 한 개의 디스크 고장은 확실히 감내할 수 있고 어떤 디스크가 고장 나느냐에 따라 N/2개의 결함까지 감내할 수 있다. 

 

마지막으로 성능을 분석해보자. 단일 읽기 요청의 동시에 읽을 수 있기 때문에 기존 속도의 2배의 성능 보인다. 쓰기의 경우는 약간 다르다. 같은 내용을 두 번 써야 하기 때문에 쓰기 성능은 그대로이다. 

 

RAID Level 4 : 패리티 디스크 추가

이제 패리티라고 알려진 중복성을 추가하는 다른 방법을 설명한다. 패리티 기반의 접근 방법은 저장 공간을 더 적게 사용하려고 하여 미러링 기반 시스템이 지불하는 엄청난 공간 낭비를 극복하려고 시도한다. 대신 성능이라는 비용을 지불해야 한다.

 

패리티 디스크에는 같은 그룹 섹터들의 같은 위치의 비트들을 XOR 하거나, 같은 위치의 바이트들을 더한 값을 갖는다. 그렇기 때문에 패리티 디스크를 사용하면 같은 그룹의 섹터가 손상되었을 경우에도 나머지 섹터들의 값을 통해 재생이 가능하다. 

 

분석

용량은 패리티를 위한 디스크를 하나 사용해야 하므로 (N - 1) * B 만큼을 사용할 수 있다. 그리고 읽기 속도는 기존 속도의 (N - 1) 배다. 그리고 쓰기 속도는 기존의 (1 / 2) 배로 더 느려진다. 패리티 섹터를 업데이트하려면, 기존 섹터와 패리티 섹터를 읽어봐야 하기 때문이다. 신뢰성은 두 개의 디스크가 동시에 고장 나지 않는 한 안전하다고 할 수 있다. 

 

4, 13번 블럭을 갱신하기 위해 P1, P3 패리티 블럭을 읽어야 한다. 즉 기존에 비해 느려진다.

 

RAID Level 5 : 순한 패리티

위와 같은 RAID 4의 Small Write(쓰기 동작이 많아 병목현상 발생) 문제를 해결하기 위해서 RAID 5가 소개되었다. RAID 5는 RAID 4와 거의 동일하게 동작하지만 패리티 블럭을 순환(rotate) 시킨다는 점에서 다르다.

 

그림과 같이 각 스트라이프를 위한 패리티 블럭은 RAID 4의 패리티 디스크의 병목 현상을 없애기 위해 전체 디스크에 걸쳐서 순환 배치된다.

 

분석

많은 부분은 RAID 4와 동일하다. 용량과 결함 허용 정도는 둘 다 동일하다. 하지만 병목현상을 없애고 모든 디스크를 다 활용하기 때문에 성능은 RAID 4보다 상당히 높은 편이다. 

 

RAID Level Analysis

앞에서 살펴본 3가지 RAID 설계 방식에 대한 분석표는 다음과 같다.

 

 

반응형

'OS' 카테고리의 다른 글

4-5장. 파일 시스템 구현  (0) 2020.08.02
4-4장. 막간 : 파일과 디렉터리  (0) 2020.07.23
4-2장. 하드 디스크 드라이브  (0) 2020.05.22
4-1장. 영속성 - I/O 장치  (0) 2020.05.20
3-9장. 이벤트 기반의 병행성 (고급)  (1) 2020.05.19
Comments