Learning
토픽 28 / 85·프로세스 동기화와 교착상태

RCU (Read-Copy-Update)

RCU (Read-Copy-Update)

읽기 작업이 락 없이 진행되고 쓰기 작업은 데이터를 복사하여 수정 후 포인터를 교체하는 Linux 커널의 동기화 기법으로, 읽기 중심 워크로드에서 최고의 성능 제공

목적: Lock-Free 읽기, 고성능 동시성, 읽기 중심 최적화, 커널 동기화

특징: 읽기 락 없음, Copy-then-Update, Grace Period, 지연된 해제, 읽기 확장성

동작 원리

  • 읽기: rcu_read_lock() / rcu_read_unlock(), 실제 락 없음, 선점 비활성화만
  • 쓰기: 데이터 복사 → 수정 → 포인터 원자적 교체 → Grace Period 후 이전 데이터 해제

Grace Period: 모든 기존 읽기 작업이 완료될 때까지 대기, 이전 데이터 안전하게 해제

Quiescent State: CPU가 읽기 섹션 외부에 있는 상태, 모든 CPU가 Quiescent 통과하면 Grace Period 완료

API (Linux 커널)

  • rcu_read_lock() / rcu_read_unlock(): 읽기 섹션
  • rcu_dereference(): 포인터 안전하게 읽기
  • rcu_assign_pointer(): 포인터 원자적 갱신
  • synchronize_rcu(): Grace Period 대기
  • call_rcu(): 비동기 콜백 등록

장점: 읽기 무제한 확장, 락 없는 읽기, 데드락 없음, 우선순위 역전 없음

단점: 쓰기 복잡, 메모리 증가(이전 버전 유지), Grace Period 지연

적용사례: Linux 커널(라우팅 테이블, 디렉토리 엔트리), 읽기 중심 자료구조

비교: RCU(읽기무잠금/복잡쓰기) vs Reader-Writer Lock(읽기잠금/단순) vs Mutex(완전잠금)

연관: Lock-Free, 커널 동기화, Grace Period, 메모리 배리어