첫째 날에는 “The RCU-Reader Preemption Problem in VMs”논문에 대한 논문을 읽고 이에 대한 질답을 진행할 수 있었다. 해당 논문은 Read-Copy-Update (RCU) 기능에 대한 내용 소개 및 해당 기능에 의해 발생할 수 있는 문제들을 소개하는 논문이다. 해당 논문에 따르면 확장성을 위해 설계된 RCU 기능이 오히려 확장성을 저해하는 요소로 동작할 수 있다는 점을 보여준다.
Q : Copy-On-Write(COW)와 RCU 기능의 차이점은 무엇인가?
A : COW기능은 데이터의 수정이 발생할 때, 해당 데이터에 대해 직접 수정을 하지 않고 복사본에 수정 사항을 반영하는 기법이지 Reader/Writer 간의 데이터 일관성을 보장하지는 않는다. 이와 달리 RCU에서는 Write 사이드에서 Reader들의 모든 작업이 끝날 때까지 대기하며, 모든 Reader의 작업이 완료되었을 때에 Write를 적용하여 Read/Write 연산간의 동시성 및 일관성을 보장해준다는 장점이 있다.
Q : 논문을 보면 Overcommit 환경, 즉 VM 동작 시에 문제가 발생하였다는 식으로 한정하는 것 같은데 VM을 사용하지 않으면 발생되지 않는 문제인가?
A : VM에 집중한 이유는 RCU를 사용하면 vCPU의 동작 중에 write 사이드가 RCU 작업을 완료해야 할 때 VM 내부적으로 컨텍스트 스위치를 호출하여 해당 작업을 완료하는 상황 때문이다. VM 내부에서의 컨텍스트 스위치는 매우 큰 문제이며, 특히 많은 기업에서 VM을 집중하는 현재 컴퓨터 시장에서 이러한 문제가 있다는 것을 알리는 것이 더욱 중요한 사항이기에 이와 같은 논문을 작성하였다.
둘째 날에서는 “Scalable NUMA-aware Blocking Synchronization Primitives”의 논문을 읽고 저자와 잠시 대화해볼 수 있었다. 본 논문에서는 기존 Scalable Lock에서 발생하는 문제를 해결하고, 전역 락 변수를 코어 별 분산 락으로 사용하는 기법을 개발한 논문이다. 기존 Scalable Lock은 Spinning 단계와 Parking 단계를 통해 Lock 변수를 얻는 작업을 진행한다. 문제는 이와 같은 Scalable Lock이 하나의 전역 변수로 다수의 코어에 의해 공유되는 변수라는 점이다. 본 논문에서는 이를 해결하기 위해 기존의 1개의 전역 Scalable Lock을 소켓 별 2개의 분산 락으로 관리하도록 한다. 스레드가 Critical Section에 접근하기 위해서는 2개의 분산 락을 모두 얻어야 하며, 각 스레드별의 컨텐션을 줄이기 위해 1단계의 락은 소켓 Lock, 두번째 락은 소켓 안의 Core Lock으로 설정한다. 이를 통해 하나의 소켓에서 먼저 1단계 락을 가진다면, 2단계 락은 소켓 내부의 코어 간 기존 Scalable Lock 정책을 사용한다. 기존 Scalable Lock은 다수의 코어들이 하나의 Lock 변수에 대해 경쟁하는 오버헤드가 존재하지만, 해당 기법은 하나의 소켓 안에 존재하는 코어간에만 경쟁 오버헤드가 존재하기 때문에, Lock 컨텐션을 분산할 수 있다는 장점이 있다.
마지막으로 “SmartMD: A High Performance Deduplication Engine with Mixed Pages” 논문은 운영체제의 메모리 관리 단위인 페이지의 사이즈를 변경할 수 있는 대형 페이지 기능을 개선한 논문이다. 해당 논문은 똑같이 대형 페이지에 대한 내용을 작성한 OSDI’16의 나온 “Coordinated and efficient huge page management with ingens” 논문의 내용에서 고려하지 않는 내용들을 추가로 고려하였으며, 특히 대형 페이지의 재 사용률을 고려하여 대형 페이지를 할당/해제 하는 기법을 사용한다. 또한 대형 페이지의 재사용률 및 최근 사용 여부를 고려할 때 대형 페이지 내부의 모든 페이지의 카운트 수를 계산하지 않고 블룸 필터 기반의 해쉬 테이블을 이용하여 대형 페이지의 최근 사용 여부 및 재 사용된 횟수를 기록한다. 이를 통해 기존 방식보다 페이지의 관리가 빨라질 수 있다는 장점이 있게 되었으며, Ingens 기법보다 더욱 좋은 성능을 낼 수 있게 되었다.
Q : 블룸 필터와 해쉬 테이블을 통해 대형 페이지의 카운터를 세는 것은 성능상에서는 매우 이득이라고 생각하지만, 실제로 사용중인 대형 페이지에 대해 할당 해제 등이 일어날 수 있는 문제가 존재하지 않는가?
A : 실제 사용중인 대형 페이지를 할당 해제하더라도 즉시 메모리를 회수하는게 아닌 대형 페이지를 4Kbyte 크기의 기본 페이지로 분산하는 것이므로 메모리의 할당 해제를 통한 메모리의 손실에 대해서는 걱정할 필요가 없다고 본다.
Q : 대신 메모리의 회수 및 해당 대형 페이지의 할당 해제 과정 간에 전체적인 성능이 감소되는 문제가 발생하는 것 아닌가?
A : 대형페이지의 할당 해제는 단순히 하나의 페이지를 다수의 기본 페이지로 분산하는 작업만 진행하므로 그리 큰 작업이 아니며, 이에 대한 오버헤드는 감수할 만하다고 본다. 메모리 회수 과정이 오래 걸리는 것은 기존 Ingens에서도 발생하는 문제이며, 4Kbyte 기본 페이지만 사용할 때보다 메모리 사용량은 클지 모르지만, 기본 대형 페이지 알고리즘을 사용할 때보다 훨씬 적은 메모리 사용량을 보이므로 문제가 없다고 본다.
이번 학회를 통해서 세계 컴퓨터 학회의 동향을 파악할 수 있는 중요한 기회였다고 생각한다. 특히 VMware 등 많은 회사들이 VM에 관련된 논문에 큰 관심을 나타낸 것이 가장 인상 깊었으며, 전체적으로 VM에 관련된 이슈나 그 해결법 등을 소개하는 논문이 많은 것으로 보아, VM에 대한 집중적이 공부가 필요하다고 생각했다.