스토리지 I/O 경로
Nutanix의 스토리지 I/O경로는 다음과 같다. 아래 구성도는 가장 전통적인 Nutanix의 High-level 스토리지 I/O 경로를 보여 준다.
한가지 특이한 점은 UVM(사용자 가상머신)의 스토리지 I/O가 호스트를 통해 실제 물리 스토리지 장치에 적용되는 것이 아니라, CVM의 스타게이트(Stargate)를 통해 I/O를 처리하는 것을 볼 수 있다. 스타게이트는 모든 스토리지 I/O 요청을 처리하고 다른 CVM(클러스터 내 다른 CVM)과 물리 스토리지 장치와의 상호작용을 담당한다. 따라서 모든 스토리지 I/O는 호스트를 우회하여 발생하게 된다. 다만 위와 같은 구성에서 현재 최신 버전(AOS 5.18 이상)에서는 Block Store라는 유저 스페이스에서 처리되는 확장 가능한 관리계층을 통해 I/O성능을 확장시켰다.
위 그림을 보면 전체 I/O경로에서 CVM의 부분의 변경점을 보여주는 것으로, 실제 I/O 요청이 기존에 커널영역(Net I/O) -> 유저영역(스타게이트) -> 커널영역(스토리지 I/O)의 프로세스로 처리되는 부분에서 스토리지 I/O 부분을 Block Store라는 계층을 통해 바로 물리 스토리지 장치에 I/O처리를 하는 방식으로 바뀐 것을 보여준다. 이렇게 바뀌면 파일 시스템 커널 드라이버의 호출이 제거되어 문맥 교환(Context Switch)가 필요하지 않게 되어 성능이 향상된다. 아래의 구성도는 Block Store를 이용한 I/O처리 구성도를 나타낸다.
위와 같은 구조에서 데이터 복제를 수행하기 위해 CVM은 네트워크를 통해 통신한다. 이 경우는 커널 레벨의 드라이버가 호출되는 구조를 가지고 있다. 그러나, RDMA를 사용하면 이러한 네트워크 사용 없이 호스트의 모든 것을 바이패스하여 CVM에게 전달되게 된다. CVM 또한 RDMA를 사용하여 모든 네트워크 트래픽은 호스트 커널의 네트워크 스택을 사용하고 실제 데이터 I/O는 문맥 교환(Context Switch)없이 유저 스페이스에서 수행된다.
즉, Nutanix는 PCI 패스스루를 통해 디스크장치를 호스트를 바이패스 하여 CVM에서 직접 컨트롤하고, BlockStore 계층을 통해 CVM 커널 드라이버 작업을 유저 스페이스로 옮기며, RDMA를 통해 호스트를 바이패스 하여 모든 데이터 전송이 CVM 유저 스페이스에서 수행되도록 개선되어 I/O 경로가 최적화된다.
[참고자료 출처] https://www.nutanixbible.com/ : 뉴타닉스 바이블