멀티버스 동적 다중버전 트랜잭션 메모리
초록
멀티버스는 기존 비버전형 STM과 다중버전형 MVCC의 장점을 결합한 새로운 소프트웨어 트랜잭션 메모리이다. 트랜잭션은 처음에 비버전 모드로 실행되며, 필요에 따라 동적으로 버전 모드로 전환한다. 두 가지 전역 모드(Q와 U)를 활용해 읽기 전용 장기 트랜잭션과 빈번한 업데이트를 동시에 최적화한다.
상세 분석
멀티버스는 “불투명(opacity)”을 보장하면서도, 비버전 트랜잭션의 성능을 최신 비버전 STM인 DCTL 수준으로 유지한다는 목표를 갖는다. 이를 위해 주소 수준에서 동적 버전 관리가 이루어지며, 주소가 버전화될 때마다 전역 시계(global clock)와 연동된 버전 리스트가 생성된다. 버전 리스트와 락은 해시 기반의 버전 리스트 테이블(VLT)과 락 테이블에 저장돼, 프로그램의 메모리 레이아웃을 변경하지 않는다. Bloom filter를 활용해 주소가 버전화됐는지 빠르게 판단하고, 버전 리스트 탐색 시에는 TBD(to‑be‑determined) 마크를 사용해 다른 트랜잭션이 일관된 버전을 읽을 수 있도록 동기화한다.
멀티버스는 두 가지 전역 모드, Mode Q와 Mode U를 도입한다. Mode Q에서는 버전화된 트랜잭션이 주소를 버전화하고, 비버전 트랜잭션은 버전화된 주소를 무시한다. 반면 Mode U에서는 쓰기 트랜잭션이 주소를 버전화하고, 버전화된 읽기 전용 트랜잭션은 모든 주소가 이미 버전화됐다고 가정한다. 두 모드 사이의 전환은 abort 횟수, 최근 트랜잭션 행동, 전체 시스템 컨텐션 등을 고려한 히스토리 기반 휴리스틱으로 결정된다.
버전 해제는 VLT 버킷 단위로 수행되며, Bloom filter를 리셋해 전체 버킷을 비버전 상태로 만든다. 백그라운드 스레드가 버전 리스트의 타임스탬프와 전역 시계 차이를 분석해 언제 해제할지 판단한다. 이러한 설계는 버전 리스트가 과도하게 쌓이는 것을 방지하고, 메모리 회수와 캐시 효율성을 동시에 확보한다.
실험에서는 (a,b)-tree, 스킵리스트, 큐 등 다양한 워크로드에 대해 멀티버스가 기존 STM보다 동일하거나 더 높은 처리량을 보였으며, 특히 장기 읽기와 높은 업데이트 비율이 결합된 상황에서 수십 배, 경우에 따라서는 수백 배까지 성능 향상을 달성했다. 이는 버전화가 필요한 경우에만 동적으로 활성화되고, 그렇지 않은 경우에는 거의 무부하에 가깝게 동작한다는 점을 입증한다.
댓글 및 학술 토론
Loading comments...
의견 남기기