areca ARC-1680 레이드 카드를 빌리게 되어 h/w raid를 실험해보게 되었다.
실험환경은 hp의 z400 workstation으로 모두 초기화한 상태에서 진행하였다.
해당 RAID카드는 RAM을 cache로 사용할 수 있는 모델이었다. 따라서 raid card의 cache를 위주로 알아보려고 한다.
raid카드의 사용 목적에는 raid를 구성하여 하드디스크를 안전하게 사용하는 것도 있지만, I/O로 인해 발생하는 병목현상을 줄여주어 속도를 향상시키는 역할도 있다고 한다.
*RAID를 백업 개념으로 이해하는 사람들이 다수 존재하는데, 개인적으로 보안 관점에서는 백업의 의미로 보지 않는다. 해킹을 통해 디스크 무결성을 훼손하면, 결국 패리티/백업 디스크 또한 오염될 될 가능성이 높기 때문이다.
정리에 들어가기 앞서, 물리적으로 하드디스크는 동시에 한개 이상의 작업을 수행할 수 없다는 사실을 인지해야 한다.
따라서 하드디스크 1개의 입출력 속도는 제품간 성능의 차이가 일부 존재하더라도 한계가 있다. SSD 또한 운영체제가 동시에 여러 작업을 수행할 수는 없다.
가장 기초적인 RAID 구성인 RAID 0 의 경우, 디스크의 저장공간을 100% 사용할 수 있는 방식이면서 안정성 측면에서는 이점을 가지지 못하는 패리티 구성이다. 하지만 RAID 0를 사용하면 A1과 A2에 동시에 접근 할 수 있기에 성능이 더 좋아진다. 물리적인 디스크가 2개이기 때문에, 동시에 2개의 작업을 수행할 수 있기 때문이다.
RAID 1의 경우, 안정성을 확보하기 위해 가용공간을 50% 포기하며, 1개의 디스크가 고장나더라도 데이터 손실이 발생하지 않도록 설계된 RAID 이다. 이 경우에 쓰기 속도는 미세하게 느려지지만 접근 속도는 미세하게 빨라진다. 쓰기의 경우 2개의 DISK에 모두 써야하므로 작업 시간이 길어지지만, 읽기의 경우에는 A1과 A2에 동시에 접근할 수 있다는 점에서 미세하게 이점을 가져온다. 이러한 이유로 RAID는 아래와 같은 속도 향상을 가져온다.
RAID 0 의 속도 = 하드디스크 1개의 속도 x 하드디스크의 갯수
RAID 5 / 6의 속도 = 하드디스크 1개의 속도 x 하드디스크의 갯수 x 0.5~0.7 (레이드 카드의 페리티 계산 속도가 빠를 수록 숫자 증가)
RAID 1+0의 속도 = 하드디스크 1개의 속도 x 하드디스크의 갯수 x 1/2 ( RAID 0에 참가한 하드디스크 만의 갯수 = 총 하드 갯수의 절반)
일반적으로 위 공식을 바탕으로 스토리지 서버를 구축하게 된다.
예시로 10G 망으로 스토리지 서버를 구축하려고 하는 상황이라고 가정해보겠다.
하드디스크는 100MB/s ~ 200MB/s 정도의 속도가 최선이며, sata SSD의 경우 300MB/s, NVME는 1,000~3,000MB/s 정도의 속도가 나온다. 이론적으로는 sata 6GB/s 의 속도도 과분할 정도로 느린 속도이다. 이러한 하드디스크의 물리적 속도 한계를 극복하고 10GB/s의 속도를 내기 위해 RAID를 도입한다. 물론 10G 망을 위해서는 일반적으로 sas를 사용하여 구축하지만, 간단한 예를 들자면 1GB/s NVME 10개를 RAID 0로 엮어서 구현하는 개념으로 서버를 구축한다.
하지만 여기에는 한가지 문제가 있다. 디스크 10개에 병렬로 동시에 접근하는 것은 I/O 인터럽트가 과도하게 많이 발생되면서 프로세서의 굉장한 부하가 걸리게 된다. 심지어 VM을 돌리는 서버의 경우, 여러 OS가 동시에 접근하게 되어 I/O에서 병목현상이 발생하게 된다.
*가상화 서버 구축에서 DISK I/O 고려는 굉장히 중요한 요소인데, 대부분의 업체에서 간과하는 부분이기도 하다.
RAID를 많은 수의 디스크로 구축하면서, I/O 병목을 해결해주기 위해 사용되는 것이 RAID cache이다. RAID I/O에 사용되는 cache메모리를 따로 사용하여 프로세서의 I/O의 부담을 줄여준다. 이때 필요한 cache 의 크기는 주로 I/O 인터럽트의 빈도와 RAID 로 엮은 디스크 수에 비례하게 책정된다. 이번에 실험에 사용하게 된 RAID 카드의 경우, dram 을 cache 메모리로 사용하는 형태의 장치였다. 하지만 cache를 활용하는 RAID카드는 공통되는 문제점을 가지고 있다.
휘발성 메모리를 통해 I/O를 구현하는 만큼, 전력공급이 어려운 시점에 기록된 모든 데이터가 지워진다는 점이다.
따라서 BBU라는 보조 장치를 사용하게 된다. backup battery unit의 약자라고 하며, 안정성을 위해 대부분의 cache를 사용하는 RAID 카드에 적용된다.
*256K -512K 캐쉬는 1-2TB 하드에서 속도가 올라가고 그 이상 크기의 하드에서는 더 큰 캐쉬가 있어야 속도 향상이 된다. 일반적인 SATA RAID 카드는 512캐쉬까지 장착되어 나오고, SATA3를 지원하는 RAID 카드는 1GB 까지 캐쉬가 달려 나온다고 한다. SAS RAID 카드의 경우, 3G 1세대 형은 512KB 이며 12G SAS RAID 카드는 4GB 까지 나온다고 한다.
그 외 레이드 엔진이라고 불리는 외장 박스식 레이드 장비는 8GB까지 캐쉬를 지원한다.
이러한 cache지원 RAID가 서버에 필요한 이유 중 하나가 swap 성능향상이라고 생각한다.
cache가 없는 상태에서 시스템이 page fault를 빈번하게 겪게 되면, 시스템의 성능저하가 크게 발생한다. swap이란 실제로 물리 메모리(ram)에 적재하지 않은 데이터를 DISK의 swap 공간에 저장해두는 것을 의미한다. ram 공간이 부족한 경우, 당장 필요한 부분이 아닌 메모리는 disk에 저장하여 ram을 효율적으로 사용하는 방식인데, 프로세스가 swap해둔 데이터를 요청할 경우, 프로세스를 일시 중단하며 disk의 데이터를 ram으로 옮겨온 후 이어서 프로세스를 실행하는 사이클이 작동하게 된다.
이 사이클의 속도는 전적으로 disk 속도에 따라 결정되며, 사이클 실행 시간이 길어질 경우 프로세스가 실행되지 못하는 시간이 길어지게 된다. VM서버를 구축하다보면, 대부분의 속도 저하 체감이 이 부분에서 발생한다. cache가 존재하는 RAID시스템을 구축하여 DISK 성능이 충분히 좋은 경우에는 swap으로 인한 오버헤드가 크게 줄어, 성능 향상이 크게 체감된다.
보통 SSD RAID로 묶어서 swap을 위한 공간으로 할당해준다.
현재는 이러한 방법들을 통해서 H/W의 DISK 속도 한계를 극복해낸다.
하지만 H/W RAID를 통해서 높은 안정성과 성능 향상을 얻기 위해서는 큰 비용이 발생한다. 안정성을 일부 포기하며 S/W RAID를 사용하는 것이 더 합리적인 순간이 오기도 한다.
S/W RAID를 사용하면, cache를 실제 ram으로 사용하여 용량이 여유롭기도 하며 일반적으로 H/W보다 성능이 잘나오기 때문이다. 주로 NAS에서 이러한 방법을 많이 채택한다.
다음 글에서 이어서 H/W RAID로 엮고 벤치마크를 돌려보는 내용을 작성하겠다.
'study' 카테고리의 다른 글
[RAID] h/w raid card 03 (0) | 2024.04.29 |
---|---|
[RAID] h/w raid card 02 (0) | 2024.04.29 |
[학점을 챙기자]구글 설문지 파이썬으로 정리하기 (0) | 2024.03.14 |
SVN 사용법 (0) | 2024.03.05 |
[OS만들기]BOOTLOADER->KERNEL 시도... (0) | 2024.02.24 |