개요
FSR 은 파일수준의 복제를 구현합니다. 파일을 복제하는 환경은 볼륨의 데이터가 파일 시스템에 의해 형식화 된 파일과 경로를 통해 관리 됨을 전제합니다. 따라서 FSR 은 파일시스템 계층 상부에 커널 필터 모듈을 삽입하여 볼륨으로 유입되는 모든 쓰기 I/O 에 대해 조사하고 해당 I/O 가 복제할 대상인지 식별합니다. 여기서 커널 필터 드라이버내의 복제 대상을 식별하기 위한 파일 경로 필터링 로직을 경로필터(path filter)라고 합니다. 경로필터는 FSR로 유입된 쓰기 I/O 의 목적지 경로가 복제 대상인지를 판단하고 버퍼링을 하거나 또는 I/O 를 하부 계층으로 bypass 합니다. 쓰기 I/O 가 복제 대상으로 식별되면 드라이버는 공유된 메모리 영역을 통해 I/O 데이터를 FSR Syncer 엔진 측으로 전달합니다. 이후 데이터를 타깃으로 송신하여 전달하는 것은 Syncer 엔진이 담당합니다. 즉 FSR은 커널 필터 드라이버 모듈에서 쓰기 I/O를 캡처하고 Syncer 엔진에서 데이터를 전송하여 복제를 구현하고 있습니다. 여기서는 커널 필터 드라이버의 경로필터와 공유버퍼에 대해 설명합니다.
경로 필터
경로필터는 리소스에 지정된 복제대상 경로들을 목록화하고 검색할 수 있도록 하는 구성요소 입니다. 경로필터는 로컬의 실시간 I/O 문맥에서 수행되기 때문에 경로필터 내의 검색시간이 로컬 I/O 지연시간에 크게 영향을 줍니다. 경로필터의 내부 구조는 이진트리를 기본으로 하여 최적화되어 있지만 기본적으로 목록화 해야할 대상 경로가 많아질 수록 검색비용이 증가하는 것은 불가피 합니다. 또한 복제해야 할 리소스 개수가 많아질 수록 리소스 별 경로필터 검색을 모두 수행해야 하기 때문에 이 또한 지연시간에 영향을 주는 요소가 됩니다. 따라서 경로필터의 대상 요소들을 최소화하여 구성하는게 바람직합니다. 너무 복잡한 복제 경로 설정은 성능에 불리할 수 밖에 없습니다.
File Stream
표준 파일 입출력 에는 파일 열기,읽기, 쓰기, 삭제, 조회, 설정, 닫기 등의 기본 동작이 있습니다. 각각의 연산이 수행될 때 마다 FSR 은 I/O 를 조사하고 각각의 연산에 맞는 동작을 취해야 하는데 만약 그 때 마다 I/O 의 유형과 관련 정보를 계속 조회해야 한다면 상당한 부하와 병목으로 인해 로컬 I/O 성능에 영향을 주게 됩니다.