본문 바로가기

프로젝트

[KCC2020] 가상화 환경에서의 NUMA 기반 락 성능 분석

프로젝트 개요 

  • KCC 2020
  • 가상화 환경에서의 NUMA 기반 락 성능 분석
  • 2020.03~2020.05.17
  • 고성능 컴퓨팅 
  • 실험 및 논문 작성

 

가상화 환경에서의 NUMA를 활용하는 게스트 운영체제에서 NUMA 기반 락의 성능을  측정 및 분석한 논문을 작성하여 KCC 2020 에서 우수발표논문상을 수상하였습니다.

한국정보과학회 KCC 2020

 

한국정보과학회 - 학술대회 홈페이지

 

kiise.or.kr

이번 KCC2020에서는 “Toward the World’s Leading Software Event”라는 주제로 KCC가 국내를 넘어 세계를 선도하는 소프트웨어 학술대회로의 도약을 추구하기 위하여 학계 뿐만 아니라 산업계가 힘을 합쳐 최신의 소프트웨어 연구 동향을 발표하고, 미래의 비전을 함께 공유하는 기회를 제공합니다. KCC2020에서는 논문발표, 튜토리얼, 특별세션 등의 학회 주관 행사에 더불어 학술 분과 주관 워크샵 및 협력 워크샵 등을 병행하여 진행할 계획입니다. 또한, 이번 학술발표회에서는 채택 논문 중 상위 10% 내외의 우수 논문과 발표 논문 중 상위 10% 내외의 우수발표논문을 선정하여 학회 논문지에 게재를 추천하고, 학부/대학원생들의 참신한 아이디어 및 소프트웨어 개발능력 제고를 위해 산업계와 함께 SW 경진대회를 계획하고 있습니다.

 


가상화 환경에서의 NUMA 기반 락 성능 분석

최근 가상화 시스템에서는 NUMA 기반 시스템에서의 성능 최적화를 위해 virtual NUMA(vNUMA) 기법을 활용하고 있으며, 이를 통해 게스트 운영체제는 가상머신의 가상 CPU(vCPU) 및 메모리에 대한 NUMA 배 치 상태를 기반으로 NUMA 구조를 고려한 성능 최적화 기법들을 적용할 수 있다. 하지만, 기존 NUMA 최 적화 기법들을 가상화 환경을 고려하지 않기 때문에 여러 가상머신이 하드웨어 자원을 공유하는 환경에서 는 NUMA 최적화 기법들의 성능 이점이 크게 줄어들 수 있다. 본 논문에서는 vNUMA를 활용하는 게스트 운영체제에서 NUMA 기반의 락 최적화 기법의 성능을 측정하고 그 이유를 분석하였다. 실험 결과, NUMA 기반 락 최적화 기법은 단일 가상머신 환경에서는 성능 이점을 보였지만, 다중 가상머신 환경에서는 기존 리눅스의 락 기법 대비 성능 이점이 전혀 나타나지 않는 것을 확인하였다.

 

2020년도부터 성균관대학교 분산컴퓨팅 연구실에서 학부연구생을 하며 관련 배경지식을 공부하고, 관심이 생긴 분야를 조금 더 공부하며 멘토님의 도움을 받아 관련 실험을 수행했고, 이를 바탕으로 논문을 작성하여 정보과학회에서 주최한 KCC2020 학회에 논문을 제출했습니다. 

아래는 논문 관련 배경지식을 공부하면서 정리한 내용입니다. 자세한 내용은 <더보기> 를 눌러 확인하실 수 있습니다 :) 

  • NUMA 

더보기

정의

  • Non-Uniform Memory Access / 불균일 기억 장치 접근

특징

  • 프로세서는 자신의 로컬 메모리에 접근할 때 원격 메모리에 접근할 떄보다 더 빠르다.

    i) 로컬 메모리 : 자기 프로세서에 연결되어 있는 메모리

    ii) 원격 메모리 : 다른 프로세서에 연결되어 있는 메모리

  • 각각의 프로세서에 독립적인 별도의 메모리를 제공하여 동일한 메모리에 한 번에 하나의 프로세서만 접근할 수 있는 SMP의 특징으로 인한 많은 대기가 발생하는 문제를 해결한다.

  • 프로세서 수나 메모리 뱅크 수 만큼 성능을 향상시킬 수 있다.

  • 하나 이상의 프로세서가 동일한 데이터를 필요로 하는 경우 메모리 뱅크 사이로 데이터를 이동시키는 경우가 발생한다. (원격 메모리로의 접근) 이러한 동작은 NUMA 성능을 떨어뜨린다.

  • 따라서 로컬메모리에서 얼마나 많은 메모리 접근이 일어나느냐가 성능 향상에 가장 중요한 포인트이다.

리눅스 NUMA

https://12bme.tistory.com/537

  • NUMA 정책

    `numactl --show`

     

    i) default

    별도의 설정 없이 모든 프로세스에 적용되는 정책으로 현재 프로세스가 실행되고 있는 CPU가 포함된 NUMA 노드에서 먼저 메모리를 할당 받아 사용한다.

    ii) bind

    특정 프로세스를 특정 노드에 바인딩시킨다. 예를 들어 0번 노드에 할당하면 해당 프로세스는 0번 노드에서만 메모리를 할당받는다. 이러한 정책은 메모리의 지역성을 높여 메모리 접근 속도를 높일 수 있지만 설정한 노드의 메모리가 부족하면 성능이 급격하게 떨어진다.

    iii) preferred

    가능한한 설정한 노드로부터 메모리를 할당한다.

    iv) interleaved

    다수의 노드에서 거의 동일한 비율로 메모리를 할당 받는다. RR 정책에 따라 다수의 노드로부터 한번씩 돌아가면서 메모리를 할당 받는다.

  • 각 NUMA 노드에 할당된 자원과 접근 시간

    `numactl -H`

     

    • NUMA 노드가 2개소 구성되어 있다.
    • 각 노드 0, 1 에 해당하는 CPU 번호(cpus), 메모리 크기(size)
    • 각 노드의 메모리에 접근하는데 걸리는 상대적인 시간(distance)
  • NUMA 환경에서 현재 시스템에 할당된 메모리 상태

    `numastat -cm`

     

    • 전체 메모리에 free 영역이 많음에도 불구하고 한쪽 노드에서 메모리가 과하게 할당되는 불균형 상태에서 메모리 할당 정책에 따라 swap을 하는 경우가 있다.

    • 프로세스가 어떤 멤리 할당 정책으로 실행되었는지 확인하기 위해 다음과 같은 명령어로 확인해본다.

      cat /proc/<pid>/numa_maps

성능 최적화를 위한 NUMA 메모리 할당 정책과 워크로드

  • 싱글 스레드 + 메모리 < 노드 1개

    거의 없는 경우지만 이런 워크로드를 가진 서버는 2 소켓 이상의 시스템을 사용할 필요가 없다.

    굳이 NUMA를 사용하고자 한다면 bind 정책으로 특정 CPU에 바인딩하는 것이 좋다.

    싱글 스레드이기 때문에 하나 이상의 CPU가 필요하지 않고 특정 CPU에 바인딩시켜 CPU cache를 최대한 활용할 수 있기 때문이다.

  • 싱글 스레드 + 메모리 > 노드 1개

    메모리가 노드 하나의 크기를 넘기 때문에 메모리 지역성을 치고로 올릴 수 있도록 해야 한다.

    싱글 스레드이기 때문에 어쩔 수 없이 원격 메모리 접근이 발생할 수 밖에 없기 때문에 리모트 액세스를 최소화하는 것이 핵심이다.

    cpu cache 사용 최적화를 위해 동일한 CPU를 계속 바인딩하는 것이 좋다.

  • 멀티 스레드 + 메모리 > 노드 1개

    메모리가 노드 하나의 크기를 넘지 않기 때문에 메모리 할당을 한 곳에서만 이루어지게 하면 된다.

    cpunodebind 모드를 통해서 여러 개의 코어에 프로세서를 바인팅 시키고 해당 노드에서만 메모리를 할당 받아 사용하게 하는 것이 가장 좋다.

  • 멀티 스레드 + 메모리 < 노드 1개

    가장 많이 발생하는 경우로 이 경우 역시 원격 메모리 접근이 발생할 수 밖에 없다.

    또한 멀티 스레드이기 때문에 여러 개의 스레드가 여러 개의 CPU에서 동작하게 된다.

    이 경우 interleaved 정책으로 어떤 CPU에 어떤 스레드가 바인딩 될지 모르는 상황에서 가능한 메모리 할당을 여러 영역에 넓게 펼치는 것이 유리하다.

  • vNUMA

더보기

정의

  • virtual NUMA / 가상 누마
  • 가상머신에서 메모리 대역폭 병목 현상을 방지하기 위한 메모리 접근 최적화 기법

특징

  • 게스트 운영체제에 가상머신의 vCPU 및 메모리에 대한 NUMA 배치 상태를 알려준다.
  • NUMA 기반 락 최적화 기법 : CNA (Compact NUMA-Aware) 락

 

Compact NUMA-aware Locks

1. Introduction

www.notion.so

  • vCPU 선점 문제

더보기
  • overcommitment : vCPU의 개수가 pCPU의 개수보다 많은 상태

  • 게스트 운영체제 스케줄러는 프로세스를 vCPU에 할당하고, 하이퍼바이저는 vCPU를 pCPU에 스케줄링한다.

  • 각 vCPU는 time slice가 지나면 선점당한다.

LHP (Lock Holder Preemption)

 

How to Deal with Lock Holder Preemption

1. Introduction

www.notion.so

 

LWP (Lock Waiter Preemption)

lock이 free임에도 lock waiter가 preemption 되어 다른 높은 ticket을 가진 waiter들이 계속 spinning을 하는 현상

  • FxMark : MWRL 워크로드

더보기
  • 각 파일시스템의 특정 컴포넌트에 부하를 가한다.
  • microscopic scalability behavior를 측정하기 위한 세 개의 application benchmark를 포함한다.

실험 결과결론 

  • 단일 가상머신 환경에서의 MWRL 워크로드 성능

Stock 락과 CNA 락 모두 쓰레드의 수 8개를 기준으로 성능이 상승하다가 감소하기 시작한다. 이후, 쓰레드의 수가 단일 소켓의 코어 수를 넘어가면서 Stock 락의 성능은 (쓰레드 수 12~15개 기준) 약 27.05% 정도 감소하는 반면, CNA 락은 약 0.44%의 성능 감소만 을 보인다.

즉, 단일 가상머신 환경에서는 NUMA 기반 락 최적화 기법이 가상머신의 vNUMA 기법과 더불 어 시스템의 성능에 효과적이다.

  • 다중 가상머신 환경에서의 MWRL 워크로드 성능 

Stock 락과 CNA 락 모두 쓰레드의 수 가 증가하면서 각각 20.69% 및 18.78%의 성능 감소를 보인다.

즉, NUMA 기반 락 최적화 기법이 Stock 락 대비 성능 이점이 거의 없다는 것을 확인할 수 있다. 이는 락 에 대한 소유권을 지닌 vCPU 가 선점당해 발생하는 LHP 문제 및 락 획득에 대한 우선권을 지닌 로컬 쓰레드의 vCPU 가 선점 당함으로써 발생하는 LWP 문제가 발생하 기 때문이다.

 


원문 보기

 

가상화 환경에서의 NUMA 기반 락 성능 분석

논문, 학술저널 검색 플랫폼 서비스

www.dbpia.co.kr


프로젝트 리뷰

  • 배운점

이 실험 및 논문 작성 과정에서 처음으로 원격 서버를 통해 실험을 해보았습니다. 또한 관련 배경 지식들을 습득하면서 NUMA가 무엇이고, 이를 시스템에 최적화하기 위한 다양한 연구들이 진행 중임으로 배웠습니다.

NUMA 및 CNA 락 관련 지식 뿐만 아니라 처음으로 논문을 작성해보면서 멘토님의 도움을 받아 논문 프로세스를 자세히 배웠습니다. 그림은 어떻게 삽입해야 하는지, 전문 용어는 어떻게 기입해야 하는지, 표는 어떻게 작성해야 하는지, 논문 접수 전후로 수행해야 하는 사무적인 일들이 사소하지만 생소했기 때문에 조금 어렵게 느껴졌으나 향후 다음 논문을 작성하게 될 때에는 보다 능숙하게 처리할 수 있을 것입니다. 

  • 보완할 점

24코어 환경에서 실험을 했다는 점이 아쉬워 추후 저널 투고 용으로 작성할 때에는 64코어 환경에서 실험을 수행하고 내용을 조금 더 보완하였습니다. 


긴 글 읽어주셔서 감사합니다  :)