# Such v1.3.5 실측 벤치마크

측정일: 2026-10-17 (한국시간 기준 결과 정리)  
빌드: Such v1.3.5, Linux x64 Release, C++20/GCC, Public ABI v1  
Runtime: `runtime/linux-x64/libSuchRuntimePrivate.so` (Private Runtime Fix5 계열)  
SHA-256: `cd3dbd1cd1d62f4695c88d56c090134676f06c89e1a79ed2bbdb1a2a0c073552`

## 측정 환경 및 방법

- CPU: AMD EPYC 9V74, 컨테이너에서 논리 CPU 5개 사용 가능.
- RAM: 5.8GiB. Linux kernel 6.18.44. 파일시스템 overlayfs.
- GNU find 4.10.0, ripgrep 14.1.1.
- 별도 합성 데이터셋 10,000 / 100,000 / 500,000개. 동일 규칙: 20%씩 `.cpp`, `.txt`, `.dwg`, `.png`, `.json`이며 특별 표적 파일 1개가 다른 확장자를 대체함. 전체 약 60%가 짧은 텍스트 파일.
- 각 데이터셋 독립 `SUCH_STATE_DIR`, 독립 HOME. 인덱싱은 CLI `root`로 실행하며 데이터셋 생성 시간은 **인덱싱 시간에 포함하지 않음**.
- 최초 인덱싱: CLI 프로세스 전체 wall-clock(`/usr/bin/time`), 피크 RSS 계측. 데이터셋당 1회 측정이므로 오차 범위 및 반복 측정 분산은 없음.
- 검색 엔진: 실제 SO ABI에 직접 연결된 네이티브 C++ 벤치마크. Runtime을 메모리에 유지한 채 **검색어별 5회 예열 후 40회 측정**, 중앙값과 95백분위 기록.
- Runtime 재로드: 동일 프로세스에서 생성+로드를 6회 측정한 중앙값. OS 페이지 캐시가 이미 가열된 상태.
- GNU find / ripgrep / CLI: 별도 프로세스 호출, 캐시 가열. 10k·100k는 2회 예열+12회 측정, 500k는 1회 예열+6회 측정. CLI 시간에는 Runtime 로드 및 출력 처리 포함.
- CLI 경로와 직접 Runtime ABI 경로는 테스트 계층이 다르다. 프런트엔드 후보 정책·IME·GUI 이벤트는 직접 ABI 벤치마크의 측정 범위가 아니다.

## 1. 최초 인덱싱 및 메모리

| 파일 수 | 최초 인덱싱 | 파일/초 | 인덱싱 프로세스 피크 RSS | 인덱스 공간(초기) |
| ---: | ---: | ---: | ---: | ---: |
| 10,000 | 0.30초 | 33,333 | 26.8MiB | 약 6.7MiB |
| 100,000 | 4.02초 | 24,876 | 239.5MiB | 약 66.8MiB |
| 500,000 | 59.72초 | 8,372 | 1,202.8MiB | 약 334.3MiB |

**유의:** 파일 수가 5배(10만→50만)로 늘면서 인덱싱 시간은 약 14.9배. 데이터셋 50만 개는 실제로 30만 개의 소스/설정/텍스트 파일을 포함하므로 과거 Such v1.1 메타데이터 위주 50만 파일 벤치마크와 직접 비교할 수 없다.

## 2. 검색 엔진만 측정(메모리에 로드된 Runtime)

중앙값, ms. 아래 표는 매 검색 때의 프로세스 실행 시간을 포함하지 않는다.

| 종류 | 일치 건수(10k / 100k / 500k) | 10k | 100k | 500k |
| --- | ---: | ---: | ---: | ---: |
| 정확한 파일명 | 1 / 1 / 1 | 0.0170 | 0.0232 | 0.0549 |
| 파일명 검색 MISS | 0 / 0 / 0 | 0.0032 | 0.0090 | 0.0363 |
| 넓은 파일명(`engineering_plan`) | 1,999 / 19,999 / 99,999 | 0.9447 | 10.2391 | 55.2960 |
| `.dwg` 필터 (`//dwg`) | 2,000 / 20,000 / 100,000 | 0.8356 | 9.1070 | 46.7499 |
| `/inside` 7 / 61 / 301건 | 7 / 61 / 301 | 0.0345 | 0.3731 | 2.2183 |
| `/inside` MISS | 0 / 0 / 0 | 0.0291 | 0.2951 | 1.6073 |
| Runtime 재로드 | 해당 없음 | 16.43 | 198.55 | 1280.20 |

50만 파일 Runtime 검색 프로세스 최고 RSS는 약 869.5MiB.

## 3. GNU find / ripgrep / Such CLI(실행 비용 포함)

각 경우 **중앙값(ms)**, 50만 파일 기준.

| 동일 목적 | 엔진 상주 Such | 일반 도구 | Such CLI 새 프로세스 |
| --- | ---: | ---: | ---: |
| 정확한 파일명 검색 | 0.0549 | GNU find 235.50 | 1776.79 |
| 넓은 파일명 검색 | 55.30 | GNU find 262.07 | 별도 측정 안 함 |
| 파일 내용 301건 검색 | 2.22 | ripgrep 459.37 | 2513.38 |

- Runtime 상주 정확 검색은 GNU find 대비 약 4,290배 빠르다. 단, **이미 구축된 인덱스 이용 vs 실시간 디렉터리 순회**라는 전제가 다르다.
- 실제 CLI 정확 검색은 GNU find 대비 약 7.5배 느렸다. `such_runtime_load_v1` 호출을 비롯한 매번 발생하는 시작 작업이 핵심 병목 후보이며, 프로파일링 없이 세부 원인을 확정하지 않는다.
- 텍스트 검색은 미리 생성된 검색 인덱스 vs ripgrep의 실시간 파일 스캔 비교다. 둘의 메커니즘이 다르므로 결과를 순수 알고리즘 우위로 해석하지 않는다.

## 4. 정확성 확인

- 각 데이터셋에서 ABI 검색의 Exact/광범위 파일명/확장자/내용 검색 결과 수가 독립 GNU find 및 ripgrep 확인치와 일치했다.
- 각 검색어 40회 반복의 결과 건수 및 file_id 기반 fingerprint가 일관되었다.
- 50만 파일 상태에서 실제 SuchCLI 명령으로 Exact 파일명 1건과 `/inside` 결과의 스니펫·줄 번호를 확인했다.
- CTest 14/14 PASS (Linux Release). Windows 신규 Runtime/DLL 및 설치 GUI 성능은 이번 환경에서 측정하지 않았다.

## 5. 재인덱싱 및 영속성 주의점

10만 파일 `such scan`: **4.65초**, 최대 RSS **314.5MiB**. 인덱스 공간은 초기 약 **66.8MiB**에서 재인덱싱 후 **128.8MiB**로 증가. 디스크상 `generations/` 폴더 4개가 확인됨. 이는 generation 보존 정책에 의한 결과일 수 있어 누수로 단정하지 않는다. 장기 운영에서 확인이 필요하다.

## 6. 배포·도구 경계

- 이번 벤치마크는 공개 v1.3.5와 동봉된 **Linux Fix5 SO**에서 재현했다. 업로드된 Windows DLL은 SHA-256 `f13a1025…`의 신규 버전으로, Windows 파일명 체크포인트/멀티샤딩 향상은 **이번 Linux 결과로 검증할 수 없다**.
- Linux ZIP의 `runtime/RUNTIME_SHA256.txt`가 CRLF로 저장되어, Linux 검증 스크립트가 CR 문자를 해시의 일부로 읽어 정상 바이너리를 거부했다. **벤치용 임시 소스 복사본에서 매니페스트 줄바꿈만 LF로 바꿔 검증**했다. 또한 ZIP 추출 후 `scripts/*.sh` 실행 권한을 벤치 환경에서 설정했다. Runtime 바이너리 바이트는 변경하지 않았다. 이는 별도의 패키징 QA 결함이며 이번 측정을 위해 제품 소스를 공식 변경한 것은 아니다.
- 벤치 하네스는 공개 C ABI에만 의존하며 Private 구현 소스는 포함하지 않는다.
- **개선 우선순위 제안:** CLI cold/warm 재로드 프로파일링 → 50만 파일 인덱싱 메모리·IO 병목 조사 → 세대 보존/정리 정책의 장기 사용량 계측. 기능을 추가하거나 성급하게 상주 서비스를 만들 필요는 없다.

## 7. 데이터

- `Such_v1.3.5_Benchmark_Raw.csv`: 인덱싱과 벤치 질의별 원시 요약값.
- `Such_v1.3.5_Benchmark_Repro.zip`: 생성기, 네이티브 ABI 벤치 소스, 외부 도구 비교 스크립트, 로그. 원본 테스트 50만 파일 자체는 포함하지 않는다.
