본문 바로가기

프로젝트

[KSC2020] 소켓 간 락 전달 비율에 따른 NUMA 기반 락 성능 분석

프로젝트 개요 

  • KSC 2020
  • 2020.09~2020.11
  • 고성능 컴퓨팅
  • 실험 및 논문 작성 

KSC 2020

 

http://ksc2020.kiise.or.kr/wp/Home.asp

로그인 후 서비스 이용이 가능합니다. 로그인 발표자료에 대한 무단 복제를 금합니다.

ksc2020.kiise.or.kr


소켓 간 락 전달 비율에 따른 NUMA 기반 락 성능 분석

최근 시스템의 확장성을 위해 많은 서버 환경에서 활용되는 NUMA(Non-Uniform Memory Access) 구조 는 CPU와 메모리의 상대적인 위치에 따라 서로 다른 접근 속도를 가진다. 따라서 멀티코어 시스템의 성 능에 큰 영향을 끼치는 Lock 기법은 NUMA 구조의 특징을 고려한 형태로 연구되어 왔다. 하지만, NUMA 기반 Lock은 Lock에 대한 소유권을 다른 소켓의 쓰레드에 넘기지 않고 동일한 소켓에 최대한 유지하는 방식으로 동작하기 때문에 쓰레드 간의 불공정성을 유발할 수 있다. 본 논문에서는 NUMA 기반 Lock의 불공정성으로 인한 워크로드의 응답 대기시간 지연현상에 대해 분석하였다. 실험 결과, 다중 소켓 환경에 서 NUMA 기반 Lock은 리눅스의 기본 Lock 대비 연산 처리량은 약 25.8% 증가하였지만, 응답 대기시간 은 최대 17.21배 만큼 증가하는 것을 확인하였다.
  • NUMA 기반 락의 동작 방식

NUMA 기반 Lock 의 기본적인 설계 원리는 Lock 에 대한 소유권을 현재 Lock 을 소유하고 있는 쓰레드와 동일한 소켓에 최대한 유지시키는 것으로, 이를 통해 시스템의 성능을 최적화시킨다. 본 논문에서 실험에 활용한 Lock 은 최신 NUMA 기반 Lock 중 하나인 CNA(Compact NUMA-aware) Lock 으로 2개의 큐를 이용해 로컬 쓰레드에게 Lock 의 소유권에 대한 우선권을 제공한다. 새로운쓰레드가 Lock 을 획득하기 위해 함수를 호출한 경우에는 메인 큐의 꼬리 부분으로 삽입되며, Lock 을 획득한 쓰레드의 임계 구역이 끝나 소유권을 넘겨주는 경우에는 메인 큐의 노드들을 하나씩 확인하면서 동일한 소켓에 속한 쓰레드에게 Lock 의 소유권을 전달하여준다. 이 과정에서 다른 소켓에 속한 노드들은 보조 큐로 이동하게 된다. 

bool probably(unsigned int range) {
	return xor_random() & (range-1);
}

void pass_mcs_lock(mcs_spinlock *node, mcs_spinlock *next){
	...
    if (probably(INTRA_NODE_HANDOFF_PROB_ARG))
    	succ = find_successor(node);
	...
}

한편, 계속 동일 소켓 내의 쓰레드만 Lock의 소유권을 획득하게 되면 다른 소켓에 있는 쓰레드들은 오랜 시간 Lock을 획득하지 못해 기아 상태(Startvation)가 발생하게 된다. 이를 방지하기 위해 CNA 락에서는 동일 소켓의 쓰레드에게 Lock의 소유권을 넘겨주는 과정을 확률적인 방법을 통해 구현하였다. INTRA_NODE_HANDOFF_PROB_ARG 상수 값의 크기에 따라 소켓 간 락의 소유권 전달 확률이 달라지며 이 값이 클수록 probably() 함수 내부에서 임의의 번호와 '&' 연산을 한 결과가 양수가 될 확률이 크기 때문에 동일 소켓의 쓰레드에게 락의 소유권을 전달할 확률이 높아진다. 만약 결과 값으로 0이 나오는 경우에는 메인 큐의 바로 다음 노드 혹은 보조 큐의 노드에게 락의 소유권을 전달한다.


실험 결과결론

실험은 NUMA 기반 Lock 에 대한 성능 및 응답 대기시간 분석을 위해  FxMark 벤치마크의 MWRL 워크로드를 이용하였으며 쓰레드의 수를 전체 CPU 개수와 동일한 24개로 설정하였다.

Lock 에 대한 소유권 유지 확률을 조절하기 위해 기본 값으로 0x10000을 가지는 INTRA_NODE_HANDOFF_PROB_ARG 상수의
값을 0x1000, 0x800, 0x400, 0x200, 0x100으로 변경시키며 실험을 진행하였다.

NUMA 기반 락의 연산 처리량
NUMA 기반 락의 꼬리 응답 대기시간

실험을 수행한 시스템이 2개의 소켓을 가지는 머신이기 때문에 NUMA 기반의 최적화 기법이 적용된 CNA/Default 의 성능이 Stock 의 성능보다 약 25.8% 높게 나타난다. 하지만, 불공정한 Lock 전달로 인해 쓰레드의 기아 상태가 발생하게 되며 이로 인해 워크로드의 꼬리 응답 대기시간이 약 3.56배에서 17.21배까지 증가하는 것을 확인할 수 있다. 이는 배치 워크로드에서는 문제점을 가지지 않지만, 응답 대기시간이 중요한 워크로드에서는 큰 문제점이 될 수 있다. 

한편, Lock 에 대한소유권 유지 확률이 감소하는 경우에는 연산 처리량 역시 3.8%에서 21.1%까지 감소한다. 특히, CNA/0x100의 경우에는 기존 Stock 에 비해 약 0.8% 정도 성능이 감소한다. 이는 NUMA 기반 Lock 을 관리하기 위해 두 개의 큐를 관리하는 오버헤드가 일정 부분 반영되었기 때문이다. 

반대로, 응답 대기시간의 경우 Lock 유지 확률이 감소하는 것에 비례하여 4.4%에서 최대 80.4%까지 감소하는 것을 확인할 수 있다.


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