커널 필터 드라이버
개요
FSR은 파일 시스템 수준에서 데이터 복제를 수행하는 기술입니다. 이는 물리적 블록이 아닌, 파일 시스템이 관리하는 **파일(File)과 경로(Path)**를 기준으로 복제 대상을 식별하고 데이터를 관리함을 전제합니다.
FSR의 핵심 아키텍처는 I/O 인터셉트(Intercept) 방식입니다. 파일 시스템 계층 상부에 커널 필터 모듈(Kernel Filter Module)을 삽입하여, 볼륨으로 유입되는 모든 쓰기(Write) I/O를 실시간으로 감시합니다.
데이터 처리 흐름
유입 및 식별: 쓰기 I/O가 발생하면 경로 필터(Path Filter)가 해당 I/O의 목적지를 확인합니다.
분기(Branch): 복제 대상이 아닌 경우 하부 계층으로 즉시 통과(Bypass)시키며, 복제 대상인 경우 하부 디스크 기록과 동시에 복제본 생성을 위한 버퍼링을 수행합니다.
전송: 버퍼링된 데이터는 공유 메모리나 파일을 통해 FSR Syncer 엔진으로 전달되며, Syncer 엔진이 이를 네트워크를 통해 타깃 서버로 전송합니다.
경로 필터 (Path Filter)
경로 필터는 유입되는 I/O가 '복제 대상인지 아닌지'를 판단하는 핵심 구성요소입니다. 커널 레벨의 실시간 I/O 경로(Critical Path) 상에서 동작하므로, 이곳에서의 처리 속도가 전체 스토리지 성능에 직접적인 영향을 미칩니다.
구조적 특징 경로 필터는 리소스에 지정된 복제 대상 경로들을 목록화하고 관리합니다. 검색 속도 최적화를 위해 내부적으로 이진 트리(Binary Tree) 기반의 자료 구조를 사용합니다. 하지만 자료 구조가 최적화되어 있더라도 비교해야 할 대상 경로(Rule)가 많아지거나 복제 리소스(Set) 개수가 늘어나면, 각 리소스의 필터를 순차적으로 모두 검색해야 하므로 CPU 연산 비용과 지연 시간(Latency)이 증가하는 것은 불가피합니다.
성능을 위한 구성 권고 로컬 I/O 성능 저하를 방지하기 위해 다음과 같은 구성 전략이 필요합니다.
단순화: 복제 대상 경로 구성을 최대한 단순하게 유지해야 합니다.
그룹화: 개별 파일 단위로 수천 개의 경로를 등록하는 것보다, 상위 디렉터리 하나를 등록하는 것이 검색 비용 측면에서 훨씬 효율적입니다 (예: O(N) vs O(1)).
복잡도 지양: 과도하게 복잡한 제외(Exclude) 규칙이나 정규표현식 사용은 필터링 연산 부하를 가중시키므로 주의해야 합니다.
파일 스트림 문맥 (File Stream Context)
표준 파일 입출력은 열기(Open) -> 읽기/쓰기(Read/Write) -> 닫기(Close)의 생명주기를 가집니다. 만약 수시로 발생하는 Write 연산 때마다 매번 경로 필터를 조회하고 복제 대상 여부를 판단한다면 심각한 병목 현상이 발생할 것입니다.
FSR은 이를 해결하기 위해 스트림 문맥(Stream Context) 방식을 사용합니다.
동작 원리: 파일이 처음
Open되는 시점에만 경로 필터링을 수행합니다.캐싱(Caching): 필터링 결과(복제 대상 여부 및 정책)를 해당 파일의 스트림 문맥 정보로 메모리에 할당하여 보관합니다.
효과: 이후 발생하는 모든 I/O 연산은 복잡한 경로 검색 과정 없이, 캐싱된 문맥 정보를 참조하여 즉시 처리되므로 시스템 부하를 최소화할 수 있습니다.
공유 버퍼 메커니즘 (Shared Buffer)
FSR은 데이터 전송의 안정성과 연속성을 보장하기 위해 메모리 버퍼와 파일 버퍼를 상호보완적으로 사용하는 이중 버퍼링 구조를 채택하고 있습니다.
메모리 버퍼 (Memory Buffer)
역할: I/O 데이터를 가장 먼저 받아들이는 1차 고속 버퍼입니다.
용량: 사용자 설정에 따라 수백 MB에서 수 GB 수준으로 할당됩니다.
동작: 정상적인 운영 상황에서는 데이터가 큐잉(Queuing) 되는 즉시 타깃으로 전송되어 버퍼 사용량이 낮게 유지됩니다.
한계: 네트워크 대역폭 부족이나 타깃 측 지연으로 인해 전송 속도가 데이터 생성 속도를 따라가지 못하면 버퍼가 차오릅니다. 메모리 버퍼가 가득 차게 되면 FSR은 다음 단계인 파일 버퍼로 전환하거나, 복제를 중단하고 재동기화(Resync) 상태로 전환합니다.
파일 버퍼 (File Buffer)
역할: 메모리 버퍼가 넘침(Overflow) 상태일 때 데이터를 받아주는 2차 대용량 스풀(Spool)입니다.
장점: 디스크의 여유 공간만큼 버퍼를 확보할 수 있어, 메모리 버퍼에 비해 훨씬 큰 용량을 제공하며 장시간의 네트워크 불안정 상황을 견딜 수 있게 합니다.
성능 영향 (Double I/O): 파일 버퍼링이 동작하면
원본 데이터 기록+버퍼 파일 기록이 동시에 수행되므로 디스크 쓰기 I/O가 약 2배로 증가하므로 시스템 성능에 영향을 줍니다.주의사항: 디스크 I/O 속도에 종속되므로 메모리 버퍼 대비 지연시간이 큽니다. 따라서 파일 버퍼는 비상용 안전장치로 간주해야 하며, 상시 파일 버퍼링이 발생하는 환경은 네트워크 증설 등의 튜닝이 필요합니다.