SOSP ’19는 최신 운영체제 기술에 관한 모든 연구 주제를 소개하는 가장 큰 콘퍼런스 중 하나다. 이번 콘퍼런스는 우리 같은 대학원생뿐만 아니라 Google, Facebook 같은 회사의 개발자들도 참가했다. 총 38개의 연구 주제가 11개의 세션으로 나뉘어 3일에 걸쳐 발표되었으며, 둘째 날에는 포스터 세션이 있어서 개인적으로 궁금했던 사항들을 연구자에게 직접 물어볼 수 있었다. 운영체제를 다루는 콘퍼런스의 가장 첫 세션으로 머신 러닝이 소개되었다는 점과 세션이 끝날 때마다 약속이라도 한 듯 다들 복도로 나가서 네트워킹을 하는 장면이 이번 출장에서 가장 인상깊은 점이었다.

 

이번 SOSP에서 가장 인상깊었던 논문은 총 3개가 있다. 첫번째 연구는 Georgia Tech에서 발표한 “Scalable and Practical Locking with Shuffling”이다[1]. 이 연구는 Shuffling이라는 이름의 락 메커니즘을 소개하고, 그에 기반하여 SHFLLOCK을 개발했다. Shuffling의 핵심은 락의 획득을 대기하는 스레드가 대기 큐를 재조정한다는 것이다. Critical section 바깥에서 락 메커니즘이 동작하기 때문에 다양한 하드웨어 또는 애플리케이션의 요구 사항에 따라 락 디자이너가 정책을 최적화할 수 있다. 논문에서는 non-blocking, blocking, blocking readers-writer lock 총 세가지를 소개했다. 이번 연구가 제시한 모델은 기존 락 모델과 비교했을 때 스레드의 개수와는 관계없이 높은 성능을 보여주는 것과 기존 최적의 NUMA-aware lock과 비교했을 때 메모리 부하가 적은 것이 장점이다.

이 연구가 가장 인상깊었던 이유는 모델의 우수성을 입증하기 위해 성능 평가 요소를 4가지로 나눠서 구체적으로 분석했기 때문이다. 논문은 좋은 락 디자인이 1) Avoid data movement 2) Adapt to different levels of thread contention 3) Adapt to over- or under- subscribed cores 4) Decrease memory footprint의 특성을 만족해야 한다고 말한다. 특히 Critical section 안에서 락이 다시 획득될 경우 반납할 때까지 메모리를 점유하기 때문에 memory footprint에 대해서도 유의해야 한다는 지적은 평소 공부하는 OSTEP에는 없던 내용이어서 좋은 배움이 되었다. 포스터 세션에서는 연구자에게 Shuffling이 언제 일어나는지, 그리고 Shuffling 때문에 scheduling overhead가 생기지 않는지에 대해 질문했다. 연구자는 waiting queue에 스레드가 추가될 때마다 Shuffling이 일어나며, CPU overhead는 미미하다고 답변했다.

두번째 연구는 University of Toronto에서 발표한 “An Analysis of Performance Evolution of Linux’s Core Operations”이다[2]. 이 연구는 근 7년간 리눅스 버전의 성능을 분석하여 어느 버전의 패치가 성능을 낮췄는지 발견하고, 그 원인을 해결했다. 성능 평가는 리눅스 v3.0부터 v4.20 총 41버전을 가지고 진행했으며 LEBench를 10000번 실행하여 그 중에 제일 좋은 K개를 골라서 비교 분석했다. 논문은 성능 저하를 가져다 준 원인 11개를 찾고 이를 1) Security, 2) Functionality, 3) Misconfiguration 총 3가지 범주로 나누었다. 그 다음 각 기능이 최적화가 가능한지, 또는 환경설정을 개선할 수 있는지 분석했다. 결론적으로 그중 3개 기능을 선별하여 기능을 개선해 Latency를 낮췄다.

이 연구가 인상깊었던 까닭은 연구를 접근하는 근본적인 방식 때문이다. 커널의 여러 버전을 비교해서 어떤 기능이 성능 저하에 기여했는지 분석하는 방식이 여러 모델을 비교해 그 단점을 해결하던 많은 연구들과는 달라서 좋았다. 개인적으로는 운영체제가 시간에 따라 항상 좋아지기만 할 줄 알았는데, 다양한 운영체제의 평가 요소 때문에 가장 중요하다고 생각되는 Latency가 오히려 나빠졌다는 것이 신기했다. 또한 실제로 우리가 사용하는 리눅스 커널을 개선하는 연구였다는 점도 새로웠다.

세번째로 인상깊었던 연구는 University of Texas at Austin에서 발표한 “SplitFS: Reducing Software Overhead in File Systems for Persistent Memory”이다. 이 논문은 현재 유일하게 널리 쓰이는 PM File system인 ext4-DAX을 개선해 해당 시스템의 최대 단점인 Software overhead를 크게 개선했다. 기존 ext4-DAX가 data 연산(read, write 등)과 metadata 연산(fsync, open 등)을 모두 kernel에서 했던 것과는 다르게 SplitFS는 data 연산을 user space에서 수행하고, metadata 연산만 ext4-DAX에서 수행한다. 따라서 파일을 읽을 때나 덧붙일 때 커널을 거치지 않고 User에서 메모리로 직접 접근할 수 있다. 결론적으로 SplitFS는 ext4-DAX 대비 software overhead가 17배 낮출 수 있었고 또다른 file system인 NOVA와 비교했을 때 throughput이 2배 좋아졌다.

이 연구가 인상깊었던 까닭은 이 연구를 계기로 Persistent Memory를 처음으로 접했기 때문이다. 논문이 어려워서 내용을 전부 이해하지는 못했지만, Persistent memory에 대한 배경지식을 공부하는 것만으로도 충분히 도움이 되었다. 그러나 Persistent Memory를 위한 파일 시스템이 기존의 파일 시스템과 비교했을 때 어떻게 달라져야 하는지에 대한 공부가 더 필요하다고 생각했다. 한편, 포스터 세션에서는 데이터 연산을 User space에서 수행하는 것이 운영체제의 Security 측면에서 단점이 될 수 있다고 생각했고 이에 대해 질문했다. 연구자는 각 프로세스마다 독립적이므로 그런 일은 일어날 수 없다고 대답했다. 나중에 논문을 찾아보니 SplitFS는 User가 미리 허가를 받지 못한 파일은 접근할 수 없으며, 각 프로세스마다 각각의 U-Split Instance를 갖기 때문에 서로 접근이 불가능하다고 설명하고 있었다.

1.  결론

이번 SOSP를 통해 처음으로 콘퍼런스를 참석했기 때문에 모든 것이 새로웠고 좋은 경험이었다. 특히 발표자가 발표를 어떻게 하는지 중점적으로 지켜봤다. 생각보다 배경지식에 많은 시간을 할당해 청중으로 하여금 주의를 끌게 했던 부분과, 누군가가 질문하면 막힘 없이 대답하는 것이 인상깊었다.

포스터 세션은 발표와는 달리 연구 내용보다는 질의응답 위주로 진행되었다. 발표 시간 때 간혹 어떤 질문자들이 발표자의 답변에 대해 날을 세워서 공격하 듯이 반박을 하거나 대답을 하는 경우가 있어서 의아했는데, 포스터 세션에서 발표자들이 방어적으로 대답을 하는 것을 보고 그 이유를 알 수 있었다. 내가 아는 것이 많지 않아서 발표 내용 외적으로 알아낸 것이 많지 않아 아쉬웠다. 좀 더 공부를 많이 해야 연구자와의 대화에서 많은 것을 얻어갈 수 있을 것이라는 생각이 들었다.

이번 콘퍼런스는 최신 연구 동향을 파악할 수 있었고, 전에 알지 못하던 분야에 대해서도 공부할 수 있는 좋은 기회였다. 이번 경험은 앞으로의 석사 생활에 좋은 밑거름이 될 것이라고 생각하며, 나도 연구를 열심히 해서 이런 큰 학회에서 논문을 내고 싶다는 생각이 들었다.