디지털 라이브러리[ 검색결과 ]
인-메모리 키-값 데이터베이스를 위한 비 휘발성 메모리 기반 영속적 로그 버퍼 기법
http://doi.org/10.5626/JOK.2018.45.11.1193
Redis는 인-메모리 키-값 데이터베이스로, 실시간 데이터 처리 및 저장이 필요한 서비스에서 많이 사용되고 있다. 하지만 DRAM의 특징인 휘발성으로 인하여, 시스템이 비정상적으로 종료되면 Redis에 저장된 데이터들이 손실되는 문제가 발생한다. 이를 방지하기 위해 Redis는 로그를 디스크에 저장하고, 로그를 이용하여 데이터를 복구함으로써 데이터 손실을 방지한다. 요청된 명령을 로그 형태로 디스크에 저장하는 방식인 AOF 복구 메커니즘은 1초마다 주기적으로 로그를 기록하는 everysec 정책과 명령이 요청될 때마다 로그를 기록하는 always 정책으로 동작한다. everysec 정책은 Redis의 성능을 저하시키지 않지만, 시스템이 1초내에 비정상적으로 종료되면 데이터 손실이 발생할 수 있다. 반면 always 정책은 데이터 손실은 발생하지 않지만, 명령이 요청될 때마다, 디스크 연산을 수행하기 때문에 성능 저하의 원인이 된다. 본 논문에서는 everysec 정책에서 아직 디스크에 동기화되지 않고 AOF 버퍼에 저장되어 있는 AOF 로그들을 비 휘발성 메모리에 저장함으로써, 데이터 손실이 발생하는 단점을 극복하고 always 정책에 비해 약 100배 더 향상된 성능을 가진 시스템 모델을 제시한다.
비 휘발성 메모리 기반 로그 구조 버퍼의 설계 및 구현
http://doi.org/10.5626/JOK.2018.45.11.1117
PCM, STT-MRAM과 같은 차세대 비 휘발성 메모리(NVM) 기술은 낮은 지연시간, 높은 대역폭, 비 휘발성 및 높은 용량을 제공한다. 이러한 NVM은 고성능 컴퓨팅을 위해 컴퓨터 시스템 및 데이터베이스 분야에서 널리 사용 및 연구되고 있다. 예를 들어, 최근 연구자들은 NVM을 파일시스템의 저널링 버퍼 및 데이터베이스의 로깅을 위해 사용하며 이에 따른 최적화 연구들을 많이 진행하고 있다. 기존연구들을 보완하는 연구로 본 논문에서는 응용의 원자성 페이지(page) 업데이트에 대해 초점을 맞춘다. 예를 들어, 데이터베이스 시스템과 같은 데이터 관리 응용에서는 여러 페이지들을 원자적으로 업데이트하기 위해, 임시 버퍼를 두고 중복적인 쓰기 연산을 수행함으로써 그 페이지들의 원자성을 보장한다. 하지만, 이러한 중복적인 쓰기 연산은 성능을 크게 감소시킬 수 있다. 따라서 본 논문에서는 일관성을 보장하면서 성능을 향상시키기 위해, 하나의 로그 구조 버퍼 관리자(Log-structured buffer manager(LSBM))를 소개한다. LSBM은 원자적 업데이트를 위해 로그 기반으로 페이지를 NVM에 업데이트하고 버퍼링 기능을 제공한다. 또한 해당 버퍼에 중복 페이지가 있을 경우, 이전 버전의 페이지를 제거하여 최신의 페이지만 반영하도록 함으로써 입출력과 쓰기량을 최소화시킨다. 실험결과는 LSBM이 응용의 성능을 개선시키고 총 쓰기량을 감소시킴을 보여준다.
트리 자료구조를 이용한 비 휘발성 메모리의 가비지 수집 기법
비 휘발성 메모리를 할당받아 사용하기 위해서는 비 휘발성 메모리 전용의 가비지 수집 기법이 필수적이다. 본 논문에서는 이를 위해 비 휘발성 메모리 할당 정보 관리용 메타데이터를 설계하였고 이를 Allocation Tree라고 명명하였다. 이 메타데이터는 검색 속도의 향상을 위해 트리 자료구조를 이용하여 구성되었고, 하나의 노드 안에는 할당 메모리 시작 주소와 저장소 ID 정보가 키-밸류 형태로 저장된다. 비 휘발성 메모리 공간이 부족하여 가용 공간이 70% 이하로 떨어지면 가비지 수집기가 작동되어 가비지 수집을 수행하게 되고 Allocation Tree와 사용자 데이터를 비교하여 가비지를 판정한다. 본 연구에서는 이 알고리즘을 Persistent Heap기반의 메모리 할당 플랫폼인 ‘HEAPO’에서 구현하여 정상적으로 동작함을 증명하였다.