FSR 의 최적화는 로컬 쓰기 I//O 지연시간과 복제 트래픽 처리량 두 가지 측면에서 설명합니다.
지연시간
로컬 쓰기 I/O 가 발행되어 디스크에 쓰여진 후 완료 되기 까지 소요된 시간을 응답시간 또는 지연시간(Latency)으로 정의합니다. 지연시간이 작을 수록 성능이 좋습니다.
FSR 은 시스템 상에 커널 필터 드라이버를 적재하여 로컬의 실시간 I/O 를 캡쳐 합니다. 이 점에서 로컬 쓰기 I/O의 전체 지연시간은 시스템의 순수한 성능지연에 따른 지연시간과 FSR 커널 엔진이 적재되어 동작함에 따라 발생하는 추가 지연시간 두 부분으로 구분할 수 있습니다. 이 중 FSR 커널엔진의 지연은 경로필터 탐색, 송신버퍼링 지연 등 엔진 내부에서 발생하는 병목에 해당합니다. 이 요소들의 지연시간(Latency)을 최소화 할 때 최적의 성능을 도출할 수 있습니다.
- 시스템의 순수 지연 시간
- FSR 커널 엔진 지연 시간
- 경로필터 탐색 시간
- 송신 버퍼링을 위한 지연 시간
먼저 FSR 엔진을 튜닝하기 전에 시스템의 순수한 I/O 지연시간을 측정하여 환경적으로 성능 병목이 없는지 먼저 확인합니다. 이것은 일반적으로 사용하는 성능 측정 도구를 활용하여 측정하면 됩니다. 최근의 성능 좋은 스토리지 환경에서는 1회 쓰기 당 수 nano 초 수준의 응답성능으로 측정될 경우 병목이 없다고 보면 됩니다. 이 성능 수치는 전적으로 하드디스크의 하드웨어 성능 명세에 좌우됩니다.
다음은 FSR 커널엔진 동작에 따른 지연입니다. 쓰기 I/O 가 FSR 커널 엔진으로 유입되면 해당 쓰기가 복제로 수행될 I/O 인지를 식별하기 위해 FSR 엔진 내부적으로 관리하는 경로필터에 대한 탐색을 수행합니다. 탐색 결과에 의해 복제로 수행될 I/O 로 판정되면 해당 I/O의 데이터를 타깃으로 전송하기 위해 메모리 버퍼로 복사합니다. 이 때 메모리 버퍼의 공간은 충분히 여유가 있어야 하며 혼잡하지 않아야 합니다. 만약 메모리 버퍼가 혼잡할 경우 I/O 는 메모리 버퍼를 건너뛰어 파일버퍼로 복사되며 파일버퍼 조차 넘치게 되면 복제가 중단되어 전체 재동기화 상태로 전환됩니다. 이렇게 복제를 위한 경로필터 탐색과 송신버퍼링 전반의 과정에서 지연이 발생하게 됩니다.
복제 I/O 를 판별하는 경로필터는 경로검색을 위해 최적의 알고리즘으로 구현되어 있으나 검색비용이 증가할 경우 Latency 의 저하는 불가피 합니다. 따라서 복제 대상 경로를 복잡하게 설정하거나 비 효율적으로 설정하는 것은 성능을 위해 바람직 하지 않습니다. 되도록 이면 단순한 수준의 제외필터를 활용하거나 경로필터의 요소 개수를 줄여서 설정하는 것이 바람직 합니다.
송신버퍼는 메모리버퍼와 파일버퍼 기능으로 제공됩니다. 파일버퍼는 하드디스크 공간을 버퍼로 활용할 수 있다는 점에서 장점이 있지만 디스크에 I/O를 해야 하는 만큼 성능의 저하를 감수해야 합니다. 파일버퍼링이 동작하게 되면 기존 디스크 I/O에 비해 2배의 I/O 가 발생하게 되므로 최상의 조건에서도 최소 2배의 성능저하가 있습니다. 만약 이러한 성능저하가 우려된다면 파일버퍼는 제외하고 메모리 버퍼만 사용해야 합니다. 그러나 시스템의 여유 메모리 공간은 한계가 있기 때문에 메모리 버퍼에만 의존하기 어려운 경우에는 메모리 버퍼와 파일버퍼를 적절히 혼합하여 사용할 것을 권장합니다.
처리량
단위 시간 당 전송할 수 있는 데이터 양을 처리량으로 정의하며 실시간 복제를 유지하기 위해서는 적어도 로컬 I/O 부하보다 FSR 의 처리량 성능이 좋아야 합니다. 만약 로컬 I/O 부하에 비해 복제 처리량이 낮으면 버퍼 넘침이 유발되어 재동기화 상태가 반복되는 등 복제 상태가 유지되지 못할 수 있습니다. 이를 위해 다음의 내용들이 충족될 수 있도록 고려해야 합니다.
하드웨어
허드웨어의 사양이 좋을 수록 처리량은 좋아집니다. 이를 위해 기본적으로 CPU, 메모리, 하드디스크 등 좋은 I/O 서브시스템을 갖추어야 하며 송신버퍼링을 위한 메모리 자원을 충분히 할당하는 것이 좋습니다.
네트워크 대역
데이터를 전송하는 네트워크 전송대역에는 한도가 있기 때문에 처리량은 네트워크 전송대역 내에서 처리됩니다. 따라서 전송 대역을 최대한 크게 확보하는 게 유리하지만 적어도 로컬에서 발생하는 쓰기 I/O 의 부하량을 미리 파악하여 복제 대역을 미리 추산하여 네트워크 대역을 산정하는 것이 일반적입니다. 복제 대역을 산정 하려면 로컬 시스템의 쓰기 I/O 에 대한 모니터링을 수행해야 합니다. 예를 들어 로컬 시스템의 평균 쓰기 I/O 가 200MB/s 라고 하면 복제를 위해서 적어도 10Gbps 네트워크 망이 구축되어야 합니다.
압축
복제 데이터를 압축하여 전송하면 처리량을 개선할 수 있습니다. 데이터 크기를 압축하여 전송에 따르는 소요시간을 줄이는 것은 처리량을 개선하는 가장 고전적인 접근 방법입니다.