
RAID 1(및 RAID 10)에 대한 RAID IOPS 쓰기 페널티를 2로 설명하는 기사가 계속 보입니다. 물론 RAID 0의 페널티는 1입니다. 모든 쓰기가 단순히 디스크에 기록되기 때문입니다. RAID 1은 "두 번의 쓰기 필요"로 설명되므로 페널티는 2입니다.
하지만 데이터가 동시에 기록되기 때문에 1이어야 하지 않나요?
디스크를 사용하는 애플리케이션이나 서버의 관점에서 보면 RAID 1 어레이는 두 디스크에 동시에 쓰는 단일 장치로 나타나야 합니다. 하나의 디스크가 다른 디스크보다 뒤처질 수 있지만 실제 하드웨어 RAID 컨트롤러는 동시에 쓰기를 시작할 수 있어야 하며 느린 디스크가 완료되면 쓰기 작업이 완료된 것으로 보고해야 합니다. 이는 RAID보다 약간 더 높아야 합니다. -0, 전혀. 따라서 IOPS 페널티는 RAID 1의 경우 1이거나 최대 1.2여야 합니다.
두 가지 쓰기 작업이 있으므로 "IOPS"는 2개이지만 이는 RAID 컨트롤러 내부에 있다는 것을 알고 있습니다.
여기서 뭔가 빠졌나요?
답변1
RAID 1이 단지 케이블을 핫와이어링한 경우 성능에 미치는 영향은 전혀 없습니다(1.0배). 그러나 RAID 1 미러링은 단순히 케이블을 핫와이어링하는 것 이상입니다.실제 작업두 개의 드라이브에 데이터를 쓰고 각 드라이브의 쓰기 결과를 처리하려면 작업을 수행해야 합니다.
추가 작업은 성능에 미치는 영향에 대해 이야기하는 요소입니다. I/O 작업이 OS 어딘가(소프트웨어 RAID)에서 발생하든 아니면 전용 보조 프로세서/컨트롤러(하드웨어 RAID)에서 발생하든 모든 데이터 조각에 대해 두 개의 쓰기가 여전히 실행되어야 하며 해당 쓰기 결과(성공, failure 또는 on_fire)를 "처리"해야 합니다.
최악의 경우에는 커널이 두 번 쓰기를 수행하고 디스크 컨트롤러와 두 번 대화한다는 의미(OS에 구현된 소프트웨어 RAID-1)가 발생할 가능성이 높습니다.
스택 전체에 걸쳐 거의 두 배의 작업을 수행하므로 이는 2배의 쓰기 페널티입니다.
(실제로는 아마도 1.9에 더 가까울 것입니다. 결국 우리는 파일 시스템에 두 번의 write() 호출을 실행하지 않습니다. 하지만 비관론을 위해 그냥 마무리하겠습니다.)
최선의 경우(전용 컨트롤러로 구현된 하드웨어 RAID 1) 커널은 컨트롤러와 한 번의 대화를 하고 있지만 컨트롤러는 두 드라이브가 모두 명령을 수신하는지 확인해야 하기 때문에 여전히 두 번의 대화(각 디스크에 하나씩)를 하고 있습니다. 데이터를 기록하고 데이터가 기록되었음을 확인합니다(또는 드라이브가 보고하는 오류 조건을 처리합니다).
질문에서 추측한 대로 컨트롤러의 추가 작업에 대한 페널티는 약 1.2배입니다. 커널 내 추가 작업(컨트롤러가 수행하는 작업보다 훨씬 비쌉니다)을 절약하는 것뿐입니다.
이제 우리는 시스템 관리자이고 비관적인 사람으로 돈을 받았기 때문에 소프트웨어 RAID의 성능 요소를 반올림했을 때와 마찬가지로 최악의 성능을 취하게 될 것입니다. 따라서 누군가 묻는다면 우리는 말할 것입니다. 고급 하드웨어 컨트롤러의 경우에도 2배의 쓰기 페널티가 있으며 시스템이 평균 1.5배의 페널티만으로 작동할 때 만족할 수 있습니다. :-)
답변2
실제 하드웨어 RAID 컨트롤러는 동시에 쓰기를 시작할 수 있어야 하며 느린 디스크가 완료되면 쓰기 작업이 완료된 것으로 보고해야 합니다. 이는 RAID-0보다 약간만 높아야 합니다.
그러나 각 쓰기에는 사용 가능한 전체 성능의 절반이 있습니다. 귀하의 예에서 RAID 0의 각 디스크는 RAID 컨트롤러로 전송된 것의 절반만 쓰면 됩니다. RAID 1에서는 각 디스크가 모든 내용을 기록해야 합니다.
이로 인해 RAID 0은 쓰기(2-디스크 RAID 그룹)에 대해 RAID 1보다 두 배 빠른 속도를 가지며 이론적 읽기 속도는 동일합니다.