본문으로 건너뛰기
피드

POSIX atime: 파일을 읽기만 해도 쓰기가 발생하는 구조의 문제점

backend 약 4분
vote
0
댓글
북마크

POSIX 표준의 atime은 파일을 읽을 때마다 접근 시간을 기록하므로 모든 읽기가 쓰기로 이어짐. Linux는 2009년부터 relatime을 기본값으로 도입해 성능 문제를 완화했으며, 저자는 대다수 사용자에게 atime 자체가 불필요한 레거시라고 주장함.

  • 1

    POSIX atime은 파일 읽기마다 접근 시간을 갱신하므로 모든 읽기가 쓰기 I/O를 유발함

  • 2

    Linux 2.6.30부터 relatime이 기본값으로, mtime/ctime보다 오래된 경우에만 atime 갱신

  • 3

    atime을 실제 사용하는 프로그램은 tmpreaper, systemd-tmpfiles, Mutt, popularity-contest 등 소수에 불과

  • 4

    CoW 파일시스템(Btrfs)이나 NAND 스토리지에서 특히 해로우며, DragonFly BSD는 기본 비활성화

POSIX 표준에 따르면 파일에는 atime(마지막 접근 시간), mtime(마지막 수정 시간), ctime(상태 변경 시간) 세 가지 타임스탬프가 있음. 이 중 atime은 파일을 읽을 때마다 갱신되기 때문에, 모든 읽기가 곧 쓰기가 됨. 디렉토리도 마찬가지임.

왜 문제인가

  • 파일을 읽을 때마다 메타데이터 쓰기가 발생하므로 I/O 성능에 악영향을 줌
  • CoW(Copy-on-Write) 파일시스템인 Btrfs에서는 특히 치명적임. 읽기만 해도 불필요한 복사가 일어남
  • NAND 기반 스토리지에서는 쓰기 횟수가 수명에 직결되므로 YAFFS2 같은 파일시스템은 아예 atime을 저장하지 않음
  • 캐시에서 읽어도 atime 갱신 때문에 디스크 쓰기가 발생해 하드디스크가 스핀다운하지 못하는 문제도 있음

Linux의 해결책: relatime

  • Linux 2.6.30(2009년)부터 relatime이 기본값으로 도입됨
  • atime을 매번 갱신하는 대신, 이전 atime이 mtime/ctime보다 이전인 경우에만 갱신함
  • 1일 이상 경과한 경우에도 갱신하여 기존 도구들의 호환성을 유지함

atime을 실제로 사용하는 프로그램들

  • tmpreaper / systemd-tmpfiles: 오래 접근하지 않은 임시 파일 삭제에 활용
  • Mutt 등 구형 메일 클라이언트: 특정 설정에서 새 메일 확인에 atime 사용
  • Debian popularity-contest: 설치된 패키지 중 실제 사용되는 것을 파악하는 데 활용
  • 디스크 사용량 분석 도구(agedu, dust): 사용하지 않는 파일 식별에 활용
  • relatime은 이 모든 유스케이스를 지원하므로 strict atime은 불필요함

atime의 역사와 잡학

  • CVE-2014-5207: atime을 악용해 TOCTOU 공격의 확률적 방어를 무력화하는 기법이 발표됨
  • DragonFly BSD: 기본적으로 atime을 비활성화함
  • Nix: 가비지 컬렉터에서 atime 지원을 제거함. "실제로 유용하지 않다"는 이유
  • 백업 소프트웨어가 atime을 사용한다는 주장이 있으나, 실제로는 HSM(계층적 스토리지 관리) 소프트웨어 하나가 근거이며 대부분의 백업 프로그램은 atime을 무시하거나 우회함
  • 1991년 논문에서 이미 atime이 내결함성 기법에 문제를 일으킨다고 지적했으며, 파일 닫기(close) 시점에 갱신하도록 Unix 시맨틱스 변경을 제안함

결론

  • 저자는 자신의 ZFS 풀에서 atime을 비활성화함
  • 대다수 사용자에게 atime은 이미 쓸모없는 레거시이며, relatime만으로도 필요한 유스케이스를 충분히 커버할 수 있음
  • popularity-contest는 inotify로 대체 가능하고, 임시 파일 정리용 atime은 tmpfs에만 활성화하면 됨

원문 링크

대부분의 서버와 개발 환경에서 atime은 실질적 이점 없이 I/O 부하만 추가하는 레거시임. ZFS나 Btrfs를 사용한다면 noatime 마운트 옵션을 적극 검토할 만함.

댓글

댓글

댓글을 불러오는 중...

backend

잘못된 추상화보다 중복이 낫다는 샌디 메츠의 고전 조언

샌디 메츠는 중복을 없애려다 잘못된 추상화를 만들면 코드가 조건문과 파라미터로 부풀어 더 위험해진다고 말한다. 이미 틀어진 추상화는 억지로 보존하지 말고, 다시 호출부에 인라인해서 중복을 되살린 뒤 현재 요구사항에 맞는 새 구조를 찾는 편이 빠르다는 주장이다.

backend

리눅스 커널, 6년·360개 넘는 패치 끝에 strncpy 제거

리눅스 커널이 오랫동안 버그의 원인이던 strncpy API 사용을 Linux 7.2에서 제거했어. NUL 종료 동작이 직관적이지 않고 불필요한 zero-fill로 성능 문제도 있던 API를 6년 동안 약 362개 커밋으로 걷어낸 작업임.

backend

덕디비는 왜 빠를까: 서버 없는 분석 엔진의 내부 구조 뜯어보기

DuckDB가 단일 바이너리, 인프로세스 실행, 컬럼형 저장, 최적화 패스, Parquet 푸시다운으로 빠른 분석 쿼리를 처리하는 방식을 깊게 설명한 글이다. 6GB Parquet 파일을 노트북에서 바로 SQL로 읽는 경험 뒤에 어떤 설계가 깔려 있는지 따라간다.

backend

피지독, 포스트그레스를 수평 확장시키겠다고 550만 달러 투자 유치

피지독은 포스트그레스 앞단에 프록시를 두고 샤딩과 라우팅을 처리해 수평 확장을 가능하게 하겠다는 오픈소스 프로젝트다. 이미 프로덕션에서 초당 200만 건이 넘는 쿼리를 처리하고, 확인된 규모만 20테라바이트 이상을 샤딩했다고 밝히며 550만 달러 투자를 공개했다.

backend

펜타시스템, EDB 포스트그레SQL로 국내 엔터프라이즈 DB 전환 시장 공략

펜타시스템테크놀러지가 EDB와 파트너 계약을 맺고 국내에 EDB 포스트그레SQL 기반 데이터 플랫폼을 공급한다. 기존 상용 DBMS 정책 변화로 비용 부담이 커진 기업들을 겨냥해, 오픈소스 기반 엔터프라이즈 데이터 플랫폼 전환 수요를 잡겠다는 전략이다. 금융, 공공, 제조, 유통, 클라우드, AI 데이터 분석 환경까지 적용 범위를 넓히려는 움직임이다.