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인가?"
- "NVMe 시대의 필수 엔진": 일반 복사 툴이 잡지 못하는 최신 SSD의 압도적인 순차 읽기/쓰기 속도를 경험할 수 있습니다.
- "캐시 오염 방지": 백업 작업 중에도 시스템이 버벅이지 않는 쾌적한 작업 환경을 보장합니다.
- Robocopy에 비해 옵션의 종류가 많지 않아서 사용자에게 옵션에 대한 부담이 없고 필수 옵션 기능을 구현
- GUI를 지원하여 사용자가 요구하는 새로운 편의 기능을 며칠 만에 추가 가능하다.(기능 추가를 위한 구조화가 잘되어 있어서 간단한 기능은 하루안에 추가 가능한것이 장점. 개발자의 프로그램이 해당 기능을 필요로 하면 단 몇줄만으로 최고성능의 복사및 백업 기능을 추가할 수 있음)
Understanding Direct I/O and File System Performance
'[GurupiaTools]' 카테고리의 다른 글
| GurupiaProtector vs 상용 솔루션(VMProtect, Themida) 벤치마크 결과 리포트 (0) | 2025.12.31 |
|---|---|
| 개인프로젝트-GurupiaProtector (0) | 2025.12.31 |
| C# & C++ 하이브리드 설계로 구현한 고성능 캡처 엔진: GurupiaCapture (0) | 2025.12.31 |
| GurupiaCapture 개발기 (C# & C++) (0) | 2025.12.31 |
| GurupiaCopy 1.0 (0) | 2025.12.26 |





