The 27th ACM Symposium on Operating Systems Principles (이하 SOSP ’19)는 computer system 분야의 세계 최고 학회이다. 2년에 한번 열리는 학회이고, 세계적인 computer system 분야의 연구자, 프로그래머, 교수님들이 한 자리에 모이는 학술 대회인 만큼, 신입생인 내가 입학하고 한학기가 채 지나지 않았는데 이 학회에 참석할 수 있는 기회가 주어졌다는 것에 감사했고 영광이었다. 그리고 한국이 아닌 캐나다에서 열린 학회에 참석할 수 있다는 것이 너무 좋았다. 연구를 열심히 해서 나중에 세계적인 학회에 논문을 기재하고 세계 무대에 서 보는 것이 연구 목표였는데, SOSP ‘19에 논문을 실은 연구자들의 발표를 직접 들어보고 그들과 얘기해볼 수 있는 기회를 가지게 되어서 좋았다. SOSP ‘19에 참가하면, 이미 세계적으로 인정받는 연구를 하고 논문을 쓰고 있는 연구자들의 마음가짐은 어떤지, 어떤 연구들이 CS분야에서 인정받고 있는지를 연구자들의 발표 세션에 적극적으로 참여하고 그들과 적극적으로 대화하면서 파악해 앞으로 많이 남은 석사, 박사 기간을 어떤 마음가짐으로 임해야 하는지 배우는 것을 목표로 정하고 캐나다로 떠났다. 캐나다로 향하는 비행기를 타기 전, 1주 동안 SOSP ’19 program의 논문들의 abstract를 읽어보았고 그 중 관심이 생긴 3편의 논문을 선정하여 읽고, 논문 저자에게 물어볼 질문을 정했다.
SOSP ‘19가 개최된 Deerhurst 리조트는 Huntsville이라는 캐나다 Ontario의 외곽에 위치한 시골에 있었다. 리조트 이름처럼 사슴이 나올 것 같은 외지였다. Hunsville은 날씨가 매우 좋았고 근처 호수와 단풍나무들이 아름다웠다. 학회장 근처에 잡은 숙소는2층 나무 집이었는데, 주변 경관과 집의 풍경이 한국에서는 볼 수 없는 것이어서, 학회에 온 것이 아니라 동화책 속으로 들어온 게 아닌가라는 생각이 들 정도로 좋았다.
SOSP ‘19는 3일 동안 총 11개의 Session 으로 나누어 진행되었다. 그리고 첫 날 모든 발표session이 끝난 후, Conference Papers Poster Session 에서 SOSP ‘19에 등록된 모든 논문의 발표 저자들이 포스터를 발표하는 시간이 있었다. 그 session에서 포스터를 하나씩 살펴보며 논문 저자들에게 논문에 대한 전반적인 설명을 들을 수 있었고, 미리 선정해두었던 논문 저자들에게 질문을 할 수 있었다.
관심 있었던 논문 중 첫번 째는 Texas at Austin 대학교의 Recipe: Converting Concurrent DRAM Indexes to Persistent-Memory Indexes 이다. 이는 concurrent DRAM index를 Persistent memory(PM)의crash-consistent index로 변환하는 RECIPE approach 를 제안하는 논문이다. 논문에 따르면, RECIPE의 시작점은 DRAM index의 isolation이 persistent index의 crash consistency와 밀접한 관련이 있다는 발견이라고 한다. DRAM index의 isolation은 다른 활성화된 읽기 및 쓰기와는 관계없이 읽기가 올바른 값을 반환하고 쓰기가 일관된 상태를 유지하는 것을 보장한다. 이 것이 PM의 crash consistency와, 즉 crash가 올바른 값을 반환한 후 읽기가 수행되고, crash가 일관된 상태를 유지한 후 쓰기가 수행되는 것과 유사하다고 보는 것이 RECIPE의 시작이다. 따라서 DRAM index를 PM으로 변환하면, PM index에 crash recovery 알고리즘을 따로 추가하지 않아도 된다. 게다가 PM과 DRAM이 모두 같은 load, store instruction을 통해 접근되기 때문에 PM index를 처음부터 디자인 하는 것 보다는 DRAM index를 PM index로 변환하는 것이 일맥상통하다고 한다. 논문에서는 DRAM index를 PM으로 변환할 수 있는지 식별하는3가지 조건을 제시한다. DRAM indexes는 이 세 가지 조건들 중 하나를 만족할 때만 PM 으로 변환될 수 있다. 이 논문에서는 5개의 자주 사용되는 DRAM index( CLHT, HOT, Bw Tree, ART, Masstree)를 PM index로 변환했고 200 개보다 적은 코드만 고쳐 이를 구현했다고 한다. 논문에 따르면, 워크로드로는 YCSB를 사용했고, RECIPE로 DRAM à PM 으로 변환한 결과와 최신 PM B+ tree, FAST & FAIR를 비교했고 그 결과 RECIPE-converted index가 multi-thread 워크로드에서 최대 5.2배 성능향상이 있다고 한다. 다음은 포스터 session에서 논문 저자와 나누었던 질의응답 내용이다.
Q: 왜 DRAM index 가 PM 으로 변환될 때 만족시켜야 할 3가지 조건을 정해놓으신건가요?
A: 연구 중, DRAM index 중, non-blocking reads를 사용하는 index가 있다는 것을 발견했다. Non-blocking read는 read 할 때 write가 진행중일 수도 있기 때문에 inconsistent state를 관찰할 수 있고 읽기 작업은 이러한 inconsistency를 견딜 수 있기 때문에 사용자에게 consistent한 결과를 반환할 수 있다. 따라서 이처럼 read가 불일치를 견딜 수 있는 경우에 carsh-recovery 알고리즘을 추가할 필요가 없다. RECIPE는 이러한 상황을 분석하여 3가지 조건으로 나누어, 조건을 충족시켜야 변환을 가능하게 하므로써 RECIPE을 이용하는 개발자에게 편의성을 제공한다.
두 번째 논문은 CrashTuner: Detecting Crash-Recovery Bugs in Cloud Systems via Meta-info Analysis 이다. 이 논문은 cloud system에서 가장 심각한 bug 중 하나인 crash-recovery bug를 찾아내는 CrashTuner를 제안한다. Crash-recovery bug는 특정 timing 조건에 node가 crash할 때만 노출되기 때문에 찾기가 어렵고 쉽게 system failure를 발생시키므로 cloud system에서 악명이 높다. CrashTuner는 오류를 발생시킬 가능성이 높은 fault-injection point를 새롭게 정의한다. 저자는 meta-info 변수들(상위 시스템 상태 정보를 참조하는 변수. node 또는 task의 instance)에 접근할 때 node crash가 발생한다면 이 경우 crash-recovery bug가 높은 확률로 발생한다는 것을 관찰하였다고 한다. Destibuted system이 제공하는 nodeID와 taskID를 포함하는 runtime logs로부터 node를 참조하는 모든 변수들을 찾아 meta-info 변수로 지정한다. CrashTuner는 이 과정을 로그 기반 정적 프로그램 분석을 통해 meta-info 변수를 자동으로 추론하여 crash point를 식별한다. 그리고 자동 사양을 제공하며, 수동으로 프로그래머가 해줄 일은 없다고 한다. 논문에서 CrashTuner를 5개의 대표적인 distributed system (Hadoop2/Yarn, HDFS, HBase, ZooKeeper)에 적용하여 각 시스템을 17.39 시간동안 테스트하여 적용하기 전보다 21개의 새로운 bug를 찾아낼 수 있었다고 한다. 다음은 포스터 session에서 논문 저자와 나누었던 질의응답 내용이다.
Q: 구현 환경과 코드 라인 수가 궁금합니다.
A: Java bytecode 로 static analysis 가 가능한 T. J. Watson Libraries for Analysis (WALA)를 사용하였고 WALA를 이용하기 위해 Javassist 로 구현하였다. Java code는10,000 줄 정도이고, Shell code는 500줄 정도이다.
Q: 정말 훌륭한 연구를 하신 것 같은데, SOSP에 paper를 낼 정도면 얼만큼의 노력이 필요한지 궁금하고 저도 나중에 SOSP 같은 세계적인 학회에 논문을 제출하고 싶은데 시간이 어느정도 걸릴지 궁금합니다. 그리고 논문 주제는 어떻게 정하게 되는 건지 과정이 궁금합니다.
A: 좋은 논문을 쓰려면 만약 네가 학생이라면, 지도교수와의 의사소통과 관계가 중요하고 동료들과 연구에 대해 대화하는 것이 중요한 것 같다. 그리고 논문을 많이 읽어라. 논문을 많이 읽고 동료들과 많이 대화하다보면 좋은 논문 주제가 얻어지는 것 같다.
마지막 논문은 KnightKing: A Fast Distributed Graph Random Walk Engine이다. 이 논문은 기존 random walk 의 정교한 walk 전략의 dynamic 특성에 의한 performance와 scalability 문제를 rejection-based sampling 매커니즘을 통해 해결한 KnightKing 을 제시한다. Random walk는 최근 graph data 분석과 머신 러닝 분야에서 각광받고 있는 tool이기 때문에 이 논문에 관심이 갔다. 기존 random walk 가 step 마다 out edge를 선택하는 과정에서 transition 확률을 계산하는 등, 복잡하고 정교한 walk 전략 때문에 생기는 overhead를 rejection sampling을 통해 빠르게 다음 edge를 정하도록 하여 해결하는 것이 인상적이었다.
Q: Random walk engine 이름을 KnightKing 이라고 붙인 이유가 궁금합니다. 혹시 왕좌의 게임과 관련이 있는지 궁금합니다.
A: 정확히 관련이 있다 (웃으면서). 왕좌의 게임에 등장하는 KnightKing이 죽은 자들을 빠르게 자신의 군단으로 만드는 장면에 영감을 받아서, random walk의 다음 edge를 매우 빠르게 정해 graph를 확장시키는 모습을 그에 대응하여 KnightKing이라는 이름을 붙였다.
1. 결론
대학원에 입학하자 마자 세계적인 탑티어 학회인 SOSP ‘19에 참석하여 큰 영광이었다. 특히 탑티어 학회에 논문을 제출한 연구자들에게 연구에 관해 질문을 해보고 답변을 받을 수 있는 기회가 있었다는 것이 너무 좋았고 꼭 SOSP와 같은 국제 학회에 논문을 내 보고 싶다는 열정과 의지가 생겼다. 그리고 filesystem, privacy, persistent memory 등 computer system의 여러 분야를 짧은 시간에 접할 수 있어 좋았다. 그리고 MIT, Texas at Austin, MIT 등 이름으로만 듣던 유명 공대 사람들을 직접 보고 발표도 듣고 대화를 나눴다는 사실이 신기했다. 입학하기 전에 석박사를 졸업하면 외국에서 포스트 닥터를 해보고 싶다는 생각이 있었는데, SOSP ‘19에 참석한 후로 그 의지가 더 확고해 졌다. 포스터 세션에서 받은 조언대로 시간을 더 아껴서 논문을 더 많이 읽고 교수님과 선배님들, 동기들과 연구에 대해 많은 대화를 하고 조언을 얻어 좋은 논문을 써 보고 싶고 세계적인 학회에서 발표해, computer science 분야에서 한국의 위상을 높이는데 도움이 되고 싶다.