GurupiaCopy 저장소의 핵심은 **"윈도우 파일 시스템의 한계를 극복하는 초고속 파일 복사/동기화 엔진"**에 있습니다. 이를 바탕으로 시스템 프로그래밍의 정수가 담긴 기술 포스팅을 다시 작성합니다.


[System Dev] OS의 한계를 넘는 데이터 이동: 고성능 파일 복사 엔진 'GurupiaCopy' 분석

파일 복사는 가장 기초적인 작업처럼 보이지만, 수십 GB의 대용량 파일이나 수만 개의 작은 파일을 다룰 때 OS 기본 복사(Explorer)는 심각한 병목 현상을 보입니다. GurupiaCopy는 시스템 아키텍트의 관점에서 I/O 처리량을 극대화하기 위해 설계된 전용 엔진입니다.

1. 왜 기존 복사는 느린가? (The Problem)

일반적인 파일 복사는 Windows의 **파일 시스템 캐시(File System Cache)**를 거칩니다. 이는 소량의 파일에는 유리하지만, 대용량 데이터 이동 시에는 오히려 CPU 점유율을 높이고 메모리 캐시 오염(Cache Pollution)을 유발하여 시스템 전체를 느리게 만듭니다.

2. GurupiaCopy의 핵심 아키텍처: Direct I/O

GurupiaCopy는 OS의 캐시 계층을 우회하여 스토리지와 직접 대화하는 Unbuffered I/O 방식을 채택했습니다.

  • FILE_FLAG_NO_BUFFERING: 커널 캐시를 거치지 않고 디스크에서 유저 메모리 버퍼로 데이터를 직접 전송합니다. 이는 NVMe SSD의 성능을 100% 끌어올리는 핵심 키입니다.
  • Sector Alignment: Direct I/O를 위해 데이터 버퍼를 하드웨어 섹터 크기(4KB 등)에 맞춰 정렬(Memory Alignment)하는 정교한 메모리 관리 로직을 구현했습니다.

3. 비동기 논블로킹 파이프라인 (Overlapped I/O)

데이터를 읽고 쓰는 동안 CPU가 대기하는 시간을 없애기 위해 Windows Overlapped I/O와 **이중 버퍼링(Double Buffering)**을 결합했습니다.

  • Read-Write Pipelining: 첫 번째 버퍼에 데이터를 쓰는 동안, 동시에 두 번째 버퍼는 디스크로부터 다음 데이터를 읽어옵니다.
  • IOCP(I/O Completion Port) 활용 가능성: 수많은 작은 파일을 복사할 때 스레드 오버헤드를 줄이기 위해 효율적인 비동기 통지 메커니즘을 사용합니다.
코드 스니펫
 
sequenceDiagram
    participant Disk_Read as Disk (Source)
    participant Buffer as Memory Buffer (Aligned)
    participant Disk_Write as Disk (Dest)
    
    Note over Disk_Read, Disk_Write: Pipelined Execution
    Disk_Read->>Buffer: Read (Overlapped)
    activate Buffer
    Note right of Buffer: Buffer 1 Full
    Buffer->>Disk_Write: Write (Overlapped)
    deactivate Buffer
    Disk_Read->>Buffer: Concurrent Read to Buffer 2

4. C#과 C++의 기술적 조화

이 프로젝트는 **시스템 하드웨어 제어(C++)**와 **고급 관리 로직(C#)**의 강점을 극도로 활용합니다.

  • C++ Core: CreateFile, ReadFileEx, WriteFileEx 등 Win32 Native API를 통해 I/O 파이프라인을 제어합니다.
  • C# Interface: 복사 진행 상황(Progress), 파일 인덱싱, 예외 처리 등 복잡한 비즈니스 로직은 C#의 생산성을 활용합니다.
  • Zero-copy Bridge: C++ 레이어에서 확보한 버퍼 주소를 C#으로 넘겨줄 때, Span<T>이나 NativeMemory를 활용하여 메모리 복사 오버헤드를 '0'으로 유지합니다.

🚀 블로그 마케팅 포인트: "왜 GurupiaCopy인가?"

  1. "NVMe 시대의 필수 엔진": 일반 복사 툴이 잡지 못하는 최신 SSD의 압도적인 순차 읽기/쓰기 속도를 경험할 수 있습니다.
  2. "캐시 오염 방지": 백업 작업 중에도 시스템이 버벅이지 않는 쾌적한 작업 환경을 보장합니다.
  3. Robocopy에 비해 옵션의 종류가 많지 않아서 사용자에게 옵션에 대한 부담이 없고 필수 옵션 기능을 구현
  4. GUI를 지원하여 사용자가 요구하는 새로운 편의 기능을 며칠 만에 추가 가능하다.(기능 추가를 위한 구조화가 잘되어 있어서 간단한 기능은 하루안에 추가 가능한것이 장점. 개발자의 프로그램이 해당 기능을 필요로 하면 단 몇줄만으로 최고성능의 복사및 백업 기능을 추가할 수 있음)

Understanding Direct I/O and File System Performance

Posted by gurupia
,