Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents


FSR 의 최적화는 로컬 쓰기 I//O 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 회수는 많아지므로 성능이 좋아집니다. 반대로 지연시간이 증가하면 시간 당 I/O 회수가 감소 하므로 성능이 떨어집니다. 즉 fsr 엔진의 성능을 최적화하려면 이 지연시간이 최소화 되도록 fsr 의 구성 조건들을 조정해서 동작시켜야 합니다.

다음에 설명하는 지연 요소들을 fsr 의 성능모니터를 사용하여 실시간 추적하고 병목이 발생하는 요인들을 확인한 후 그에 맞는 적절한 대응방안을 적용해야 합니다.

시스템 지연

fsr 엔진의 지연요소를 확인하기에 앞서 시스템 자체의 지연시간이 어느 정도인지 파악합니다. 이를 파악하려면 복제를 구성하지 않은 볼륨의 순수한 I/O 성능을 확인해야 합니다. 스토리지의 성능에 따라 다르지만 통상 4KB 단위 I/O를 수행했을 때의 지연시간은 수 nano sec 수준이면 적당한 수치의 성능이라고 보면 됩니다. 이 보다 높게 측정된다면 시스템 자체의 지연이 있는 상태이며  스토리지 자체의 성능을 점검해 볼 필요가 있습니다.

fsr 엔진 지연

다음의 요소들은 fsr 엔진에서 구현하는 구성요소들이며 성능 모니터를 통해 각 요소들 구간의 지연시간을 추적할 수 있습니다.

경로필터

fsr 로 I/O 가 유입되면 fsr 엔진은 경로필터 로직을 수행하여 I/O 의 경로가 리소스 내의 경로인지 즉 복제 대상 I/O 인지를 식별합니다. 이 과정에서 발생하는 지연시간은 fsr에 등록된 복제 대상 경로가 많아질 수록 증가합니다. 따라서 리소스의 복제 대상 경로의 수를 되도록 이면 적게 유지하는 게 바람직합니다. 예를 들어, 개별 파일로 복제 대상을 지정하기 보다는 복제 대상의 최상위 디렉터리 경로로 지정하는게 관리하기도 좋고 성능에도 좋습니다.

제외필터

경로필터와 더불어 사용하는 제외필터의 개수가 많아질 수록 성능에 좋지 않습니다. 되도록이면 제외필터의 개수가 적게 유지되도록 구성하십시오.

로컬 I/O

fsr은 복제 데이터를 버퍼링하기 전에 로컬 쓰기를 먼저 수행합니다. 이 때 로컬 쓰기 I/O 는 위에서 설명한 시스템 지연 시간과 이론적으로 동일한 성능 이어야 합니다. 만약 시스템 지연시간과 차이를 보인다면 이는 어딘가에 문제가 있다는 것을 의미 합니다. 이것은 대부분 fsr 엔진 내부의 병목 문제일 수 있습니다.

송신 버퍼링

로컬 쓰기 I/O 가 완료된 후 복제 데이터를 버퍼로 큐잉하고 원본 I/O를 완료합니다. 버퍼링이 빨리 되어서 원본 I/O 가 즉시 완료된다면 성능이 좋겠지만 버퍼링에 시간이 걸린다면 그 만큼 병목이 발생하고 I/O 가 지연됩니다.

이 때 사용하는 버퍼는 메모리 버퍼와 파일버퍼로 제공 되며 메모리 버퍼는 성능이 높기 때문에 별로 문제가 되지 않지만 파일버퍼는 실제 파일을 버퍼로 삼기 때문에 파일 I/O 가 기존에 비해 두 배로 발생하고 이 병목에 따른 성능저하가 발생합니다. 성능을 고려하면 메모리버퍼를 많이 사용하는게 좋지만 시스템의 자원 상황에 따라 파일버퍼를 같이 운영해야 할 경우라면 이러한 성능저하는 감안하고 사용해야 합니다.

전송 지연

로컬 I/O 는 버퍼링이 되는 시점에 완료가 되므로 버퍼링된 이후의 구간은 로컬 I/O 지연과는 무관합니다. 버퍼링된 데이터가 TX 로 빠져나가는 데 걸리는 데 드는 전송지연은 버퍼링 성능 측면의 지표입니다. 이 성능이 좋아야(전송지연이 낮아야) 복제가 원할하며 만약 버퍼링에 병목이 있다면 fsr 은 버퍼 넘침이 빈번하게 발생되면서 복제 상태를 유지하지 못하고 동기화를 반복하게 됩니다. 버퍼링 성능이 좋지 못한 경우는 fsr 내부 병목의 문제일 가능성이 높습니다.

물론 이것은 네트워크 전송대역이 감당할 수 있는 범위에 한정한 얘기입니다. 만약 로컬 I/O 대역에 비해 네트워크 전송대역이 많이 낮아서 전송대역이 받쳐주지 못하는 상황이라면 대역폭을 더 늘리거나 로컬 I/O 의 분배를 고려해야 합니다.


처리량

단위 시간 당 전송할 수 있는 데이터 양을 처리량으로 정의하며 실시간 복제를 유지하기 위해서는 적어도 로컬 I/O 부하보다 FSR 의 처리량 성능이 좋아야 합니다. 만약 로컬 I/O 부하에 비해 복제 처리량이 낮으면 버퍼 넘침이 유발되어 재동기화 상태가 반복되는 등 복제 상태가 유지되지 못할 수 있습니다. 이를 위해 다음의 내용들이 충족될 수 있도록 고려해야 합니다.

하드웨어

허드웨어의 하드웨어의 사양이 좋을 높을 수록 처리량은 좋아집니다. 이를 위해 기본적으로 기본적으로 CPU, 메모리, 하드디스크 등 좋은 성능의 I/O 서브시스템을 갖추어야 하며 FSR에는 송신버퍼링을 위한 메모리 자원을 충분히 할당하는 것이 좋습니다.

네트워크 대역

데이터를 전송하는 네트워크 전송대역에는 한도가 있기 때문에 네트워크 전송대역의 한계로 인해 처리량은 네트워크 전송대역 내에서 처리됩니다. 따라서 전송 대역을 최대한 크게 확보하는 게 유리하지만 적어도 로컬에서 발생하는 쓰기 I/O 의 부하량을 미리 파악하여 파악하고 복제 대역을 미리 추산하여 네트워크 대역을 산정하는 것이 일반적입니다일반적 입니다. 복제 대역을 산정 하려면 로컬 시스템의 쓰기 I/O 에 대한 모니터링을 수행해야 합니다. 예를 들어 로컬 시스템의 평균 쓰기 I/O 가 200MB/s 라고 하면 복제를 위해서 적어도 10Gbps 네트워크 망이 구축되어야 합니다. 

...

복제 데이터를 압축하여 전송하면 처리량을 개선할 수 있습니다. 데이터 크기를 압축하여 전송에 따르는 소요시간을 줄이는 것은 처리량을 개선하는 가장 고전적인 접근 방법입니다. 다만 소프트웨어적인 압축은 CPU 의 사용량을 점유하기 때문에 로컬에서의 압축은 시스템에 일정 수준의 부하가 발생할 수 있으므로 이를 감안해야 합니다. 데이터 압축 처리를 위해선 DRX와의 연동을 고려하십시오.