토픽 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, 메모리 배리어