크래프톤정글/운영체제

[OSTEP] CH38 Redundant Array of Inexpensive Disk, RAID

아람2 2024. 11. 22. 12:33
반응형

CH37 하드디스크 드라이브 

암을 움직이는 게 가장 큰 비용이 든다, 트랙 비틀림 Track Skew 은 달리기 선수들 출발점이라고 생각하면 편하다 

https://www.notion.so/ch-37-143002d06e1180ccacb1e936124c17bd

https://www.notion.so/Ch-37-9f6f2514b7914747b0ebf0258d8f0464?pvs=25

SPTF (Shortest Positioning Time First)

탐색 시간과 회전 지연을 동시에 고려하여 가장 짧은 위치 시간을 가진 요청을 우선 처리한다.

탐색 시간과 회전 지연을 모두 최적화할 수 있으나 구현이 복잡하고 OS보다는 디스크 내부 컨트롤러에서 주로 사용한다.

상황에 의존적이다.

작업 보전 방식과 작업 비보전 방식

하나의 I/O만 있더라도 디스크로 즉시 내려보내거나(작업 보전 방식) 디스크가 즉시 요청을 처리하지 않고 더 나은 요청이 올 때까지 대기하는 방식(작업 비보전 방식)이 있다. 비보전은 얼마나 기다리는 가를 결정하는 것이 중요하다

CH38 Redundant Array of Inexpensive Disk, RAID

디스크를 사용할 때 우리는, 디스크가 좀 더 빨랐으면, 디스크의 용량도 더 많았으면, 좀 더 안정적으로 동작하기를 바란다 

핵심 질문 - 대용량이면서 빠르고 신뢰할 수 있는 디스크를 어떻게 만들까
어떻게 하면 대용량이면서 고속의 신뢰할 수 있는 저장 시스템을 만들까? 핵심 기술들은 무엇인가?
서로 다른 접근법들의 절충안은 무엇인가?

Rendundant Array of Inexpensive Disk, RAID 는 여러 개의 디스크를 조화롭게 사용하여 고속이면서 대용량의 신뢰할 수 있는 디스크 시스템을 만든다, 

외면적으로 RAID 는 하나의 디스크처럼 보이지만, RAID 는 여러 개의 디스크와 메모리, 시스템을 관리하기 위한 하나 또는 그 이상의 프로세스로 이루어진 복잡한 기계이다 

 

RAID 는 단일 디스크에 비해 성능, 용량, 신뢰성이라는 장점이 있다 

성능 - 디스크 여러 개를 병렬적으로 사용하면 I/O 시간이 크게 개선된다 

용량 - 데이터의 양이 많아지면 더 많은 디스크 공간이 필요하다 

신뢰성 - 데이터 중복 기술 Redundancy 를 사용하여 디스크 한 개가 고장나도 고장이 전혀 없던 것처럼 동작할 수 있다 

RAID 는 이런 장점들을 투명하게 제공하여 호스트 시스템이 RAID 를 거대한 하나의 디스크로 인식하게 한다, 이를 통해 운영체제와 클라이언트 응용 프로그램은 변경 없이 계속 동작할 수 있으며, 이는 RAID 의 확산력 Deployability 를 크게 개선시켰다 

🐣 투명해서 안 보이는 것! 운영체제는 RAID 가 있는 줄도 모르지만, RAID 가 알아서 다 해준다

운영체제는 하드웨어를 다 모른다, 다 알게 되면 너무 무거워진다 🐣

38.1 인터페이스와 RAID 의 내부 

파일 시스템이 RAID 에 논리적 I/O 를 요청하면 RAID 는 내부에서 어떤 디스크(들)를 접근해야 요청을 완료할 수 있는지 계산한 후에 하나 또는 그 이상의 물리적 I/O 를 발생시킨다

RAID 시스템은 보통 별도의 하드웨어 박스 형태로 되어 있으며 호스트와 SCSI 나 SATA 와 같은 표준 인터페이스로 연결된다 

RAID 는 프로세서와 메모리, 디스크를 갖고 있기 때문에 상위 레벨의 관점에서 볼 때 특수한 컴퓨터 시스템으로 볼 수 있지만, 응용 프로그램 대신 RAID 를 동작시키기 위해 설계된 전용 소프트웨어를 실행한다는 점이 다르다 

38.2 결함 모델 

RAID 를 이해하고 다른 접근법들과 비교하기 위해서 결함 모델 Fault Model 이 있어야 한다 🐣 like 장애 상황에 대한 테스트 케이스 🐣

고장 시 멈춤 Fail-Stop 결함 모델에서 디스크는 "정상 작동"이거나 "멈춤" 둘 중 하나의 상태로 있다고 가정한다, 고장 시 멈춤 모델의 치명적인 단점은 결함이 발견되는 경우에 대한 가정인데, RAID 컨트롤러 하드웨어 (또는 소프트웨어)는 디스크 고장 시 즉시 알 수 있다고 가정한다 🐣 근데 고장 시 멈춤 모델은 전제에 치명적인 오류가 있다, 디스크가 고장났을 때 쉽게 파악할 수 없기 때문이다 🐣

38.3 RAID 의 평가 방법

RAID 를 구성하는 방법은 몇 가지 있고, 각 구성 방법은 서로 다른 특성을 가지고 있기 때문에 평가 수단이 필요하다 

1) 용량 - 각각이 B개의 블럭을 가지는 N개의 디스크가 주어졌을 때 RAID 의 클라이언트가 사용할 수 있는 유효 용량은 얼마나 되는가? 

2) 신뢰성 - 몇 개의 디스크 결함을 감내할 수 있는가?

3) 성능 - 성능은 디스크 배열이 처리해야 할 워크로드에 따라 크게 달라지기 때문에 평가하기 쉽지 않다 

38.4 RAID 레벨 0 - 스트라이핑 

첫번째 RAID 레벨, 스트라이핑 Striping 은 중복 저장을 하지 않기 때문에 엄밀히 말하면 RAID 레벨은 아니지만, 성능과 용량에 대한 훌륭한 상한 기준을 나타낸다 

가장 간단한 스트라이핑은 블럭들을 여러 디스크에 걸쳐서 줄을 긋는 것처럼 저장한다, 디스크 배열의 블럭들을 라운드 로빈 방식으로 디스크를 가로질러 펼치는 것이다 

이 접근법은 배열의 연속적인 청크에 대해 요청을 받았을 때 병렬성을 가장 잘 활용할 수 있도록 설계되었고, 같은 행에 있는 블럭들을 스트라이프 Stripe 라고 부른다 

청크 크기

청크 크기는 RAID 성능에 큰 영향을 준다, 요청 처리 시간은 여러 디스크에 걸친 요청들 중에 가장 오래 걸린 위치 찾기 시간에 의해 결정되된다, 청크 크기가 작아지면 많은 파일들이 여러 디스크에 걸쳐서 스트라이프되기 때문에, 하나의 파일을 읽고 쓰는 데 병렬성은 증가하지만 위치 찾기 시간이 늘어날 수 있다, 반면 청크 크기가 크다면 파일 내의 병렬성은 줄어들지만 위치 찾기 시간은 줄어든다 

"최적"의 청크 크기를 정하는 것은 디스크 시스템이 처리할 워크로드에 대한 심도 있는 이해가 필요하다 

청크란?
RAID에서 데이터를 디스크에 나누어 저장할 때 사용하는 최소 데이터 단위
RAID는 데이터를 청크 크기로 나누고, 이를 각 디스크에 분배하여 저장한다

RAID 의 성능 평가하기 

단일 요청의 지연 시간 - 하나의 I/O 를 처리하는데 걸리는 RAID 의 지연 시간

정상 상태 Steady State 에서의 처리 성능 Throughput - 병행 요청의 전체적인 대역폭, 안정 Stable 상태에서의 대역폭이 중요하다 

순차랜덤 워크로드가 있다고 가정할 때, 순차 워크로드는 연속된 큰 청크의 형태로 RAID 에 요청된다 

  순차 랜덤
크기 크다 작다
탐색과 회전 지연  짧다 길다
데이터 전송 시간  길다 짧다

순차 워크로드 S MB/s, 랜덤 워크로드 R MB/s 라고 할 때, S 가 R 보다 매우 크다 (S >> R)

RAID-0 분석 

용량 - 각각이 B개의 블럭을 갖는 N개의 디스크에서 N*B 개의 디스크만큼 유효 용량을 갖는다, 용량 측면에서는 완벽

신뢰성 - 디스크 하나라도 고장나면 전체 데이터가 손실되기 때문에 나쁜 의미로 완벽

성능 - 병렬로 사용자 I/O 요청을 처리할 수 있기 때문에 모든 디스크가 활용되므로 성능도 훌륭 

    정상 상태에서의 처리 성능 - N (디스크의 수) X S (디스크 하나의 순차 접근 대역폭)

    랜덤 I/O - N*R MB/s 

38.5 RAID 레벨 1 - 미러링 

두 개의 다른 디스크에 각각 쓰기를 한다

읽기는 둘 중 하나만 한다

하나의 디스크가 망가져도 하나가 남아 있기 때문에 신뢰성 왕 좋음 

38.6 RAID 레벨 4 - 패리티를 이용한 공간 절약 

패리티 블록을 별도의 하나의 디스크에 둔다 

XOR 연산으로 패리티를 만들어서 하나가 고장나도 계산해서 복구할 수 있다 

순차 접근은 연속된 데이터를 바꿔주는 거니까 전체 데이터르 다 바꿔주고

랜덤은 하나만 바꿔주는거고, 그렇기 때문에 다시 다 계산해서 패리티 블록을 다시 써준다, 이 작업을 가산적 계산이라고 한다, 불필요한 작업이기 때문에 변경된 값의 옛날 값과 XOR 연산을 하고, 그 연산값과 패리티 블록을 다시 XOR 연산을 해서 패리티 블록 값을 다시 계산하는 것을 감산적 패리티라고 한다 

그런데 디스크의 값들이 하나씩 변경이 될 때 각각의 패리티 블록을 수정해야 하기 때문에 패리티 블록이 있는 디스크에 병목 현상이 일어날 수 있다 

38.7 RAID 레벨 5 - 순환 패리티 

그래서 패리티 블록을 각각 다른 디스크에 넣어 준다 

레벨 4를 완전히 대체할 수 있다 

38.8 RAID 비교 - 정리 

RAID 레벨 용량 신뢰성 성능

 

아래는 스터디 ㅌㅎ 자료 

RAID-0 N×BN \times BN×B 없음 (디스크 고장 시 복구 불가) 최고 성능: 순차 및 랜덤 작업에서 모든 디스크 병렬 활용.
RAID-1 N×B2\frac{N \times B}{2}2N×B​ 1개의 디스크 고장 허용 랜덤 읽기 성능 우수 (병렬 읽기). 쓰기 성능은 단일 디스크와 비슷하나, 공간 효율성 낮음.
RAID-4 (N−1)×B(N - 1) \times B(N−1)×B 1개의 디스크 고장 허용 순차 작업에서 우수. 랜덤 쓰기 시 패리티 디스크 병목 발생. 랜덤 쓰기 성능은 R/2R/2R/2.
RAID-5 (N−1)×B(N - 1) \times B(N−1)×B 1개의 디스크 고장 허용 순차 작업에서 RAID-4와 유사. 랜덤 쓰기 성능은 N4×R\frac{N}{4} \times R4N​×R로 RAID-4보다 개선.

그래서 무엇을 써야하나?

  1. 성능 : RAID-0 → 순차 및 랜덤 작업 모두 성능이 뛰어나지만 신뢰성이 없다.
  2. 신뢰성 : RAID-1 → 1개의 디스크 고장을 안전하게 처리하고 랜덤 읽기 성능이 우수하며, 중요한 데이터에 적합하다.
  3. 공간 효율과 신뢰성의 균형 : RAID-5 →공간 손실을 최소화하면서 1개 디스크 고장 복구 가능. 랜덤 쓰기 성능은 제한적이지만 순차 작업에서는 우수하다.
반응형