본문으로 건너뛰기

[abtop] Codex 세션 파일 검색 성능 개선: lsof 대신 /proc/pid/fd 활용

PR 링크: graykode/abtop#60 상태: Merged | 변경: +None / -None

들어가며

소프트웨어 개발 과정에서 성능 최적화는 끊임없이 추구해야 할 목표입니다. 특히 시스템 리소스를 다루거나 외부 프로세스와 상호작용하는 애플리케이션에서는 효율적인 자원 관리가 필수적입니다. Graykode의 abtop 레포지토리에서 진행된 이번 PR은 OpenAI Codex CLI 세션에서 사용되는 로그 파일(rollout-*.jsonl)을 찾는 방식을 개선하여, 특히 Linux 환경에서의 성능 병목 현상을 해결하고자 합니다.

기존에는 lsof (list open files) 명령어를 사용하여 열린 파일 목록을 조회했습니다. 하지만 lsof는 별도의 프로세스를 포크(fork)하고 실행(exec)한 뒤 결과를 파싱해야 하므로, 특히 짧은 주기로 반복되는 작업에서는 상당한 오버헤드를 발생시킬 수 있습니다. 이 PR은 이러한 비효율성을 제거하고, Linux의 /proc 파일 시스템을 직접 활용하여 훨씬 빠르고 효율적인 파일 검색 메커니즘을 도입합니다.

코드 분석

이번 PR의 핵심 변경 사항은 src/collector/codex.rs 파일 내 CodexCollector::map_pid_to_jsonl 함수에 집중되어 있습니다. 이 함수는 주어진 프로세스 ID(PID) 목록을 받아 해당 PID들이 열고 있는 rollout-*.jsonl 파일을 찾아 매핑하는 역할을 합니다.

변경 전: lsof 명령어 사용

변경 전 코드에서는 lsof 명령어를 사용하여 각 PID가 열고 있는 파일 정보를 가져왔습니다. lsof는 강력한 도구이지만, 시스템 호출(syscall) 및 프로세스 생성 오버헤드가 발생합니다.

// Before
// Build lsof command for all PIDs at once
let pid_args: Vec<String> = pids.iter().map(|p| format!(

## 참고 자료
- https://linux.die.net/man/8/lsof
- https://man7.org/linux/man-pages/man5/proc.5.html
- https://doc.rust-lang.org/std/fs/fn.read_dir.html
- https://doc.rust-lang.org/std/fs/fn.read_link.html

> ⚠️ **알림:** 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.

댓글

관련 포스트

PR Analysis 의 다른글