LMPTs: Eliminating Storage Bottlenecks
버틀넥(bottleneck)이라는 용어는 여기저기서 많이 사용된다. 컴퓨터 조립을 할 때, cpu와 gpu 사이에서도 병목 현상이 발생하고 이더리움에서도 병목 현상이 발생한다.
MPT의 읽기/쓰기 작업은 트랜잭션의 TPS 속도를 받침하기 에는 느리다. 따라서 이더리움 클라이언트에서는 병목 현상이 발생하는데, 해당 문제는 MPT(머클 패트리샤 트리)에서 고전적으로 발생한다.
MPT에서는 키-값 쌍에 대한 읽기/쓰기가 MPT에서 해당 키의 경로를 따라 모든 노드의 여러 읽기/쓰기 작업으로 확대된다. 쓰기 작업은 MPT에서 경로를 따라 모든 내부 노드의 해시를 다시 계산하고 트랜잭션 실행 스레드가 비용이 많이 드는 읽기/쓰기 작업이 완료될 때 까지 다음 트랜잭션을 진행하기 전 대기를 해야 한다. 이 점은 블록체인 클라이언트가 결정론적 실행 결과를 보장하기 위해 트랜잭션을 단일 스레드에서 순차적으로 실행한다는 사실이다.
이 논문은 고성능 블록체인을 위한 새로운 인증된 저장 구조인 계층화된 머클 패트리샤 트리(LMPT)를 제안한다. LMPT는 이더리움 가상 머신을 구현하는 트랜잭션 실행 엔진과 직접 작동할 수 있고, 제시된 경험적 결과는 트랜잭션 실행 처리량을 최대 6배까지 높일 수 있다는 것을 보여준다. 이는 합의 알고리즘에 대한 기존의 방법과 결합하여, LMPT가 트랜잭션 처리량을 크게 향상시킬 수 있다는 것을 의미한다.
LMPT : 새로운 구조를 제시하여, 이를 통해 읽기/쓰기 작업의 증폭 효과를 감소하고 비용이 많이 드는 디스크 I/O 작업을 트랜잭션 실행 스레드와 분리한다.
문제점

이더리움에서 사용되는 MPT는 각 노드가 자식 노드의 해시를 포함하여 데이터 위조를 방지한다. 트라이의 경로는 한번에 16진수씩 이동하며, 이동 방법은 브랜치 노드에 의해 표현된다.

블록체인 스토리지는 트랜잭션 실행에 대한 주요 성능 병목 지점이다. 따라서 병목 현상 개선은 성능 향상을 위한 필수 관문이라고 볼 수 있다.
MPT에서 주요 성능 병목은 트랜잭션 실행 스레드가 비용이 많이 드는 디스크 I/O 작업을 기다리면서 지연이 발생한다.
실험환경
저자는 해당 실험을 위해서 AWS EC2.i3.xlarge 인스턴스에서 4 vCPU, 30GB 메모리 및 1TB SSD 저장 공간으로 구성하였고, LMPT 구현을 위해 깃허브에서 제공되는 OpenEthereum v3.1.0버전을 사용하였다. 저장소 성능을 순수하게 비교하기 위해 합의 엔진을 비활성화하고 단일 노드를 포함하는 개인 네트워크에서 실험을 실행했다.
이렇게 구성하면 블록이 즉시 채굴되고, 네트워크 효과를 무시할 수 있다는 장점이 있다. 또한 이더리움 네트워크에서 500,00개의 실제 트랜잭션 샘플 추적을 수집하고 트랜잭션 동작을 복제하기 위해 실제 환경을 모방할 필요가 존재하기 때문에 블록을 패킹하고 블록당 150개의 트랜잭션, ERC20을 위해 블록 당 20개의 트랜잭션을 반영하도록 생성한다.
LMPTs 디자인


LMPT는 캐시로 작동하는 3가지 서로 다른 MPT로 구성된다. delta, intermdediate(중간), snapshot 이라는 3가지 MPT로 구성하여서 상태 트리에 대한 모든 읽기 엑세스마다 델타 MPT에서 검색하고, 요쳥된 데이터가 없을 경우 중간 MPT를 검색하고, 스냅샷 MPT를 확인하도록 설계되었다.
스냅샷 트리와 평면형 키-값 저장소는 디스크에 저장된다. 전체 노드 자체에서도 간단한 읽기는 평면형 키-값 저장소에서 읽을 수 있으며, 이는 값에 엑세스할 때, 읽기 증폭을 줄일 수 있다.
델타 MPT의 변경사항이 중간 MPT로 병합되고 중간 MPT가 스냅샷 MPT로 다시 병합되는 과정을 통해 Fig. 5에서 백그라운드 프로세스와 스냅샷 MPT 사이의 변경사항이 델타 MPT 메모리에 저장되는 방법이 표현된다. 이를 통해 주기적으로 일괄 처리하고 트랜잭션 검증의 중요한 경로와 독립적으로 완료된다.
개선

LMPT 기반 OpenEthereum 및 지불 트랜잭션에 대한 TPS는 다음과 같다. 상단 그래프는 이더리움 추적 벤치마크에 해당하고, 하단 그래프는 랜덤 송신자 추적 벤치마크에 해당한다.

LMPT 기반 ERC20 전송 트랜잭션에 대한 TPS이다. 상단은 이더리움 추적 벤치마크에 해당하고, 하단 그래프는 랜덤 송신자 추적 벤치마크에 해당한다.
결론
자료구조 자체가 상당히 복잡함을 보인다. 3개의 MPT를 이용하여서 계층식으로 데이터 읽기/쓰기의 분산과 트리 병합을 통해 속도의 개선을 보였다.
이 논문에서 참고할 점은 실험환경 구축을 참고할 만 하다는 장점이 있다.