22. 확장 가능한 락: 스핀락의 한계와 티켓·MCS·CLH 락, 백오프
문제 22 — 확장 가능한 락: 스핀락의 한계와 티켓·MCS·CLH 락, 백오프
배경
게임서버 핫패스(틱 루프, 잡 큐, 세션 레지스트리)에서 임계 구역이 아주 짧을 때는 잠들지 않고 도는 스핀락이 뮤텍스보다 빠를 수 있다. 그러나 단순 스핀락은 코어 수가 늘면 급격히 나빠진다. 아래 물음에 답하라.
질문
-
단순 test-and-set / test-and-test-and-set 스핀락의 동작을 설명하고, 코어가 많아질수록 성능이 무너지는 이유를 캐시 일관성(MESI)·캐시 라인 핑퐁·버스/인터커넥트 트래픽 관점에서 설명하라. "test-and-test-and-set"이 단순 test-and-set보다 나은 점은 무엇인가?
-
**지수 백오프(exponential backoff)**와
PAUSE/yield명령이 스핀 경합을 어떻게 완화하는가? 백오프의 트레이드오프(지연 증가, 공정성)는? -
**티켓 락(ticket lock)**의 동작(발급 번호/서빙 번호)을 설명하고, 단순 스핀락 대비 공정성(FIFO) 이점과, 여전히 남는 확장성 문제(모든 대기자가 같은
now_serving을 스핀 → 해제 시 전원 캐시 무효화)를 설명하라. -
MCS 락과 CLH 락이 이 문제를 어떻게 해결하는가? 각 스레드가 자기 지역 노드에서 스핀한다는 것이 캐시 관점에서 왜 결정적으로 유리한지, 두 락의 차이(노드 소유·큐 방향)를 설명하라. 이들이 제공하는 공정성과 복잡도/메모리 비용은?
-
게임서버 관점에서 선택 가이드를 제시하라: 임계 구역 길이, 코어 수, 경합 정도, NUMA 여부에 따라 (a) 스핀락+백오프, (b) 티켓/MCS, (c) 그냥 OS 뮤텍스(futex, adaptive), (d) 락프리/샤딩 중 무엇을 택할지와 그 이유. "스핀락은 선점형 스케줄러/오버서브스크립션에서 왜 위험한가"도 포함.
직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.