[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/운영체제

[운영체제] RAID

inu 2020. 6. 12. 11:34
반응형

RAID (Redundant Array of Independent Disks)

  • 디스크 배열을 사용하는 대용량 저장장치
  • 프로세서 속도, 메인 메모리 크기, 2차 저장소 등의 크기는 급속도로 발전했지만 입출력 전송률은 그렇지 못하여 요구하는 속도를 만족시킬 수 없다는 점에서 착안했다.
  • 여러 디스크를 동시에 접근할 수 있는 디스크 배열로 입출력 처리량, 전송률을 개선한다.
  • RAID에서 I는 원래는 Inexpensive라는 의미였지만 이 후 많은 RAID 시스템에서 값이 비싼 고성능 디스크를 사용하게 되면서 Independent로 수정되었다.
  • 디스크 배열은 '데이터 스트라이핑'으로 병렬성을 이뤄 성능을 개선시킬 뿐 아니라, '중복성'으로 신뢰성도 향상시켜준다.

데이터 스트라이핑, 중복성

  • 스트립 : 디스크를 고정크기 블록으로 나눈 것
  • 스트라이프 : 디스크 배열 내 각 디스크 상 동일 위치에 있는 스트립의 집합
  • 데이터 스트라이핑 : 파일도 스트립으로 분할하고 연속된 스트립을 스트라이프로 배치함으로써 파일에 대한 요청이 한번에 여러 디스크를 통해 동시에 이루어진다. 즉, 파일을 나눠서 각각을 디스크 배열의 다른 디스크에 배치하는 것이다. (병렬화가 이루어져 접근 시간이 개선된다.)
  • Bit-level stripingm Block-level striping 등 다양한 단위의 데이터 스트라이핑이 있을 수 있다. 주로 사용되는 것은 Block-level striping이다.
  • 중복성 : 디스크 배열은 전송률은 높여주지만, 배열의 디스크 수가 늘어날 수록 자연스럽게 디스크 고장 확률도 증가하게 된다. 배열 중 한 디스크가 고장나면 그 디스크에 포함된 스트립을 가지고 있는 파일이 손상되기 때문이다. 따라서 이를 피하기 위해 중복성을 디스크 미러링이라는 방식으로 구현한다. 이는 하나의 데이터 항목을 디스크 두 개에 저장하여 전체 디스크 공간 중 반을 낭비하게 되는 대신 장애내구성을 높인다.
  • 데이터 스트라이핑과 중복성의 정도에 따라 기본적으로 다섯 수준의 디스크 배열 방식이 제안된다.

RAID 컨트롤러

  • RAID 시스템은 파일을 스트립으로 나누고, 스트립으로부터 파일을 형성하는 작업을 필요로 한다.
  • 뿐만 아니라 디스크 배열에서 스트립의 위치를 파악하고 중복성을 실현하는 작업도 필요하다.
  • CPU가 해당 작업을 직접 수행하면 시스템 성능이 저하될 수 있다.
  • 따라서 RAID 컨트롤러라는 별도의 장치를 구성하여 이를 해결한다.

RAID Level 0 (스트라이핑)

  • 중복성없이, 스트라이프된 디스크 배열을 사용한다.
  • 스트립으로 나누어진 가상 디스크 공간이 각각 n개의 물리적 디스크에 배치된다.
  • 응용프로그램이 각각 다른 디스크에 위치한 스트립 A와 B의 데이터를 읽으려 하면, A,B에 동시에 접근하여 데이터를 불러올 수 있다. 이렇듯 병렬성으로 인해 성능이 높아짐을 알 수 있다.
  • 장애 내구성을 높이는 구조는 아니기 때문에 진정한 RAID Level로는 인정받지 못했다. (스트립 크기에 따라서는 단 한 디스크만 손실되어도 모든 데이터가 손실될 수 있다.)
  • 저렴한 비용으로 속도를 내야하는 경우에만 사용된다. 중복성 오버헤드가 존재하지 않고, 디스크가 n개일 때 디스크 하나의 시스템보다 최대 n배 빠르게 읽기/쓰기가 수행 가능해지기 때문이다.

RAID Level 1 (미러링)

  • 디스크 미러링을 통해 중복성을 실현한다. 각 디스크가 쌍을 이루어 이중화된다.
  • 데이터 일관성을 위해 쓰기 요청은 미러링된 두 디스크에 한번에 동시에 써야한다.
  • 미러링된 디스크 쌍끼리도 동시 작업이 가능하다. (디스크1과 그 쌍 디스크2에 둘 다 A,B 스트립이 있어도, 디스크1의 A와 디스크2의 B에 동시접근 가능)
  • 각 데이터 블록을 디스크 쌍에 저장하기 때문에 디스크 하나가 손상되어도 데이터 손실을 막을 수 있다.
  • 미러 쌍의 디스크에도 동시 접근할 수 있어 읽는 속도가 빠르고, 높은 장애내구성을 가진다는 장점이 있다.
  • 하지만 디스크 용량의 절반이 낭비되어 저장소 오버헤드가 야기될 수 있다. 저장소 용량 대비 비용이 큰 고비용 방식이다.
  • 미러 쌍에 대한 쓰기 요청은 두 쌍에 이루어져야 하기 때문에 쓰기 속도는 느리다.

RAID Level 2 (비트수준 해밍 ECC 패리티)

  • 바이트 혹은 워드 단위로 스트라이프하고, 비트 단위의 패리티를 사용한다. (패리티 디스크가 따로 필요하다.)
  • 미러링이 없어 저상소 오버헤드 문제가 줄어든다.
  • 스트라이프의 데이터 비트의 합이 짝수면 1, 홀수면 0으로 패리티 비트를 저장한다.
  • 스트라이프에 대한 다음 접근 시, 해당 패리티 비트를 동시에 읽고 오류를 검출한다. 하지만 이 경우 오류가 짝수개인 경우 오류를 검출할 수 없고, 홀수개의 오류를 검출하더라도 위치는 알 수 없다.
  • 실제로는 홀짝 패리티 대신, 해밍 ECC를 사용한다. 이는 오류여부 뿐만 아니라 일부 오류는 정정도 가능하다.
  • 패리티 비트에 대한 검토, 수정을 위해 디스크 접근 횟수가 늘어난다.
  • 일반적으로 SCSI나 IDE 단일 디스크에도 해밍 ECC에 버금가는 장애내구성이 내장되어 있어, 오늘날 잘 사용되지는 않는다.

RAID Level 3 (비트수준 XOR ECC 패리티)

  • 패리티 생성을 위해 해밍 ECC 대신 XOR ECC를 사용한다. 이는 해밍 ECC보다 훨씬 간단하다.
  • XOR : 비트들 내 1이 하나도 없거나 짝수개 있으면 0
  • 예를 들어 스트라이프 A가 1001이라면, 1이 짝수 개이므로 XOR ECC 패리티값 Ap = 0이 된다. 이를 기반으로 추후 데이터 고장시 복구가 가능해진다.
  • XOR의 특성상 구현이 쉽고, RAID Level 2와 비교했을 때 적은 저장소 오버헤드만으로 비슷한 신뢰도를 달성할 수 있다.
  • 단, RAID Level 2 처럼 큰 파일을 읽거나 쓸 때 전송률이 높지만, 일반적으로 한번에 한 요청에 대해서만 서비스가 가능하다. (비트단위의 스트라이핑 때문에 대부분의 읽기 요청은 배열 전체에 접근하게되며, 패리티 생성 때문에 한번에 하나의 쓰기 요청만 수행 가능)

RAID Level 4 (블록수준 XOR ECC 패리티)

  • Block-level로 스트라이핑을 수행한다.
  • 블록 단위로 XOR ECC 패리티를 생성해 패리티 디스크에 저장한다. 해당 블록과 관련된 패리티 블록만 간단히 계산할 수 있다. (이에 따라 배열 전체에 접근해야 하는 오버헤드 문제를 해결할 수 있다.)
  • Ap’ = (Ad XOR Ad’) XOR Ap
  • Ad: 수정전 블록, Ad’:수정후 블록, Ap: 수정전 패리티 블록, Ap’: 수정된 패리티 블록
  • block-level 스트라이핑을 하기 때문에 스트립 내 더 많은 데이터를 저장한다. 이로인해 임의 데이터가 같은 스트립에 저장되어 있을 가능성이 높아 여러 읽기 요청을 동시에 서비스할 수 있을 가능성도 높아진다.
  • 하지만 쓰기 요청에서는 패리티 갱신이 요구되므로 한번에 하나씩 수행해야 한다. 이 때문에 쓰기 병목이 발생할 수 있다.

RAID Level 5 (블록수준 분산 XOR ECC 패리티)

  • Level 4와 마찬가지로 블록수준의 스트라이핑을 한다. 단, 패리티 블록들이 배열의 디스크 전체에 분산된다. (패리티 디스크를 따로 구성하지 않는다.)
  • 패리티 블록이 여러 디스크에 분산되어 있어 패리티 스트립을 동시에 접근, 수정이 가능하다. (기존의 쓰기 병목현상이 해결된다.)
  • 각 쓰기 요청에 대해 읽기-수정-쓰기 사이클을 수행해야한다. 따라서 한 번의 쓰기에 네 번의 디스크 접근이 필요하다. 이를 해결하기 위해서 패리티 로깅, AFRAID 등의 개선 방법이 고안되었다.
  • 성능은 높지만 구현이 어렵고 비용이 많이 든다. 패리티가 디스크 배열 전체에 흩어져 있어 데이터의 재구축도 복잡하다.
  • 하지만 성능, 비용, 신뢰성의 균형을 맞출 수 있기 때문에 범용 RAID로 인식되고 있으며, 서버나 비즈니스 시스템에서도 많이 볼 수 있다.
반응형

'💻 CS > 운영체제' 카테고리의 다른 글

[운영체제] IPC  (0) 2022.01.18
[운영체제] 디스크 스케줄링  (0) 2020.06.10
[운영체제] 디스크 공간할당  (0) 2020.06.08
[운영체제] 파일시스템  (0) 2020.06.03
[운영체제] 쓰레싱 및 커널메모리  (0) 2020.06.01