작업 집합이 카드 안에 들어가면 SmartNIC 가속은 비교적 단순합니다. 순서형 키·값 저장소의 B-tree는 이 전제와 맞지 않습니다. 트리는 호스트 DRAM에서 수백 GB가 될 수 있지만 FPGA의 SRAM과 온보드 메모리는 제한적입니다. FPGA가 트리 포인터를 따라갈 때마다 PCIe를 건너면 비교 연산보다 호스트 응답을 기다리는 시간이 길어질 수 있습니다.
Honeycomb은 이 어려운 분할을 의도적으로 선택합니다[1]. GET과 SCAN은 FPGA SmartNIC에서 실행해 호스트 CPU를 우회하고, PUT, UPDATE, DELETE는 CPU 코어에 남깁니다. 전체 B-tree는 호스트 DRAM에 두어 서버 메모리만큼 용량을 늘리고 FPGA 이미지는 관리 가능한 범위로 유지합니다. PCIe는 제거할 경계가 아니라 캐시, 병렬화, 동기화가 필요한 메모리 계층이 됩니다.
평가 FPGA는 PCIe Gen3 ×8 링크 두 개로 연결됩니다. 측정한 최대 처리량은 13GB/s이고 부하에 따라 접근 지연은 1마이크로초 이상입니다. CPU와 DRAM 사이는 최대 64GB/s이고 지연은 약 한 자릿수 배 낮습니다. Honeycomb은 PCIe 자체를 빠르게 만들지 않습니다. 대부분의 요청이 직렬화된 PCIe 트리 탐색을 기다리지 않도록 설계합니다.
용량이 아닌 연산으로 나눈 B-tree
읽기 요청은 GET과 SCAN을 지원하는 사용자 정의 RDMA 명령으로 네트워크 계층에 직접 들어옵니다. FPGA의 B-tree 가속기가 명령을 해석하고, 캐시 또는 호스트의 노드를 탐색한 뒤, 서버 스레드를 예약하지 않고 응답합니다. 쓰기는 일반 서비스 경로를 통해 CPU에서 트리를 바꿉니다. 읽기 비중이 높은 작업에 맞고, 복잡한 메모리 할당과 트리 구조 변경은 소프트웨어에 남기는 분할입니다.
루트는 온칩 SRAM에 저장합니다. 자주 쓰는 내부 노드는 온보드 DRAM에 캐시하고, 리프와 전체 기준 트리는 호스트 메모리에 둡니다. FPGA의 페이지 표는 안정적인 논리 노드 식별자를 실제 호스트 주소에 연결합니다. CPU가 노드를 교체하거나 합칠 때 FPGA가 갱신 중인 포인터를 따라가지 않도록 매핑을 원자적으로 바꿀 수 있습니다.
큰 B-tree 노드는 분기 수를 늘리고 트리 깊이를 줄이지만, 키 하나를 찾으려고 전체 노드를 PCIe로 가져오면 대역폭을 낭비합니다. Honeycomb은 정렬된 키와 오프셋으로 검색 대상이 있는 구간을 찾는 지름길을 추가합니다. FPGA는 해당 부분만 가져옵니다. 큰 노드의 얕은 트리를 유지하면서 작은 노드에 가까운 전송량을 사용합니다.

캐시는 두 메모리 경로도 함께 사용합니다. SRAM 미스가 나면 온보드 DRAM을 사용할 수 있지만 그 채널이 포화되고 PCIe에 여유가 있다면 동적 부하 분산기가 캐시된 노드를 호스트 메모리에서 가져옵니다. 가장 빠른 위치는 고정되어 있지 않고 메모리 계층의 현재 큐 상태에 따라 달라집니다.
1마이크로초 경로를 숨기는 동시성
트리를 직렬로 탐색하면 PCIe 지연이 요청 시간에 그대로 더해집니다. Honeycomb은 독립된 요청을 많이 발행하고 비순차로 실행해 하나가 기다리는 동안 다른 요청을 진행합니다. FPGA에는 탐색, DMA, 비교, 응답을 위한 별도 단계가 있습니다. PCIe 대역폭을 채우려면 충분한 미완료 작업이 필요하므로 깊은 큐가 유리합니다.
이 선택은 지연 특성을 바꿉니다. 요청 하나가 빨라지지 않아도 독립된 미스가 겹치면서 전체 처리량이 높아집니다. 충분한 요청 동시성이 있는 서비스에 적합합니다. 직렬 의존성이 있는 낮은 빈도의 제어 연산은 여전히 PCIe 지연을 모두 부담합니다.
범위 스캔은 FPGA가 인접 리프를 따라 결과를 스트리밍하므로 특히 이점이 큽니다. 단방향 RDMA 클라이언트는 가변 길이 키와 값을 지원할 때 노드 위치를 찾고 데이터를 가져오기 위해 적어도 두 번 읽을 수 있고, 반복 탐색을 피하려면 클라이언트 캐시가 필요합니다. Honeycomb은 서버 네트워크 인터페이스 가까이에서 탐색하면서 큰 호스트 메모리 저장소를 유지합니다.
CPU 쓰기와 FPGA 읽기의 대기 없는 동기화
더 어려운 문제는 정확성입니다. CPU가 노드를 바꾸는 동안 FPGA가 PCIe로 읽습니다. 읽을 때마다 잠그면 가속기가 직렬화되고 장치 간 동기화가 필요합니다. Honeycomb은 GET과 SCAN을 대기 없이 실행합니다. 리프는 정렬 블록과 최근 변경을 기록하는 작은 로그 블록으로 나뉩니다. 읽기는 안정된 버전을 확인하고 결과를 채택하기 전에 메타데이터를 검증합니다. 동시에 변경됐다면 쓰기를 막지 않고 다시 시도합니다.
CPU는 구조 동기화를 일괄 처리합니다. 변경을 로그에 모으고 병합할 때 새로운 정렬 노드를 만듭니다. 새 상태가 준비된 뒤 페이지 표 매핑을 바꿉니다. 하나의 매핑 갱신이 여러 쓰기를 대표해 PCIe 제어 트래픽을 줄입니다. 안정된 논리 식별자를 사용하므로 실제 호스트 주소가 바뀌어도 FPGA가 노드를 참조할 수 있습니다.
선형화 가능한 스캔에는 키 하나의 일관성보다 강한 조건이 필요합니다. 여러 리프를 건너는 스캔이 전체 연산 순서에서 하나의 합법적인 시점을 나타내야 합니다. Honeycomb은 버전과 갱신 프로토콜로 호환되는 노드 집합을 보거나 다시 시도하게 합니다. 때때로 오래된 값을 반환하는 조회를 오프로딩하는 것보다 어렵지만 순서형 저장 서비스에 필요한 기여입니다.

읽기 중심 작업의 처리량과 비용
Honeycomb은 YCSB 계열 작업과 클라우드 스토리지에서 가져온 스캔 중심 구성으로 기존 순서형 키·값 저장소와 비교됐습니다. 읽기 중심 YCSB 처리량은 최소 1.8× 개선됐고, 스캔 중심은 2×를 넘었습니다. 삽입과 짧은 스캔이 섞인 균일 분포 작업에서는 읽기 50%일 때 1.2×, 읽기 80% 이상일 때 2.3×를 넘었습니다.
결과는 연산 분할과 일치합니다. 쓰기 비중이 커지면 CPU에 남은 작업과 동기화가 늘어 이점이 작아집니다. 읽기와 스캔은 CPU를 우회하고 FPGA 병렬성을 사용하므로 읽기 비율이 높을수록 투자 효과가 커집니다. 모든 키·값 작업에 적용할 수 있는 공통 가속 비율은 아닙니다.
주요 읽기·스캔 작업에서 비용 대비 성능은 최소 1.5× 개선됐습니다. FPGA SmartNIC는 구매 비용과 전력을 더하므로 이 분모가 중요합니다. 같은 처리량을 CPU 서버로 제공하는 편이 싸다면 순수 처리량 개선만으로 부족합니다. 논문의 비용 모델은 평가 플랫폼을 지지하지만 현재 가격과 최신 CPU 또는 DPU 대안으로 다시 계산해야 합니다.
저자들은 PCIe Gen5와 더 큰 FPGA 캐시에서 이점이 커질 것으로 예상합니다. Gen5의 명목 대역폭은 프로토타입의 Gen3보다 네 배 높습니다. 대역폭 병목인 미스에는 타당한 전망이지만, 고정 탐색 의존성, 동기화, 비용은 사라지지 않습니다. 빠른 링크는 병목을 온보드 DRAM, FPGA 파이프라인, 네트워크로 옮길 수도 있습니다.
읽기 비율과 서비스 안정성의 적용 범위
Honeycomb은 순서형이며 읽기가 많은 인메모리 서비스를 전제로 합니다. 쓰기 중심 작업은 CPU 실행과 게시가 지배해 이점이 적습니다. FPGA에 전체가 들어가는 작은 저장소는 더 단순한 완전 오프로딩을 쓸 수 있습니다. 매우 큰 스캔은 탐색을 가속해도 PCIe와 네트워크 출력에 제한될 수 있습니다.
FPGA 이미지는 특정 B-tree 배치와 사용자 정의 네트워크 명령을 구현합니다. 키 형식, 값 의미, 압축, 트랜잭션 규칙을 바꾸면 하드웨어와 소프트웨어를 함께 수정해야 합니다. CPU-FPGA 프로토콜도 업그레이드 동안 유지해야 합니다. CPU 전용 서비스보다 프로그래밍 유연성이 낮으므로 안정된 연산과 충분한 요청량이 개발 비용을 상쇄해야 합니다.
장애 복구도 별도 범위입니다. 기준 트리는 호스트 DRAM에 있지만 실행 중인 FPGA 요청, 캐시, 페이지 표 매핑, 네트워크 응답의 리셋 동작을 함께 정의해야 합니다. FPGA가 재시작하거나 PCIe 링크가 끊기고, CPU 프로세스가 병합 중에 실패할 때의 처리도 필요합니다. 논문의 성능 평가는 정상 동작에 집중합니다.
제거가 아닌 공동 설계 대상으로서의 PCIe
Honeycomb은 SmartNIC 설계에 유용한 원칙을 제공합니다. PCIe를 피하려고 데이터 구조 전체를 옮길 필요는 없습니다. 용량은 확장하기 좋은 위치에 두고, 병렬성과 CPU 절감 효과가 큰 연산만 이동하며, 경계를 계층으로 설계합니다. 캐시는 경계 통과 횟수, 구간 전송은 통과 바이트, 동시성은 노출 지연, 버전 게시 방식은 동기화 횟수를 줄입니다.
가속기 평가는 PCIe 미스 트래픽, 대역폭을 채우는 데 필요한 미완료 요청 수, 갱신당 동기화 바이트, 작업의 읽기·스캔 비율을 함께 보고해야 합니다. 기준 데이터가 다른 곳에 있다면 FPGA 논리의 최대 처리 속도만으로 실제 성능을 알 수 없습니다.
느린 경계도 의미를 통제할 수 있다면 사용할 수 있습니다. Honeycomb은 PCIe가 낮은 지연이라고 주장하지 않습니다. 고정 지연을 피하거나, 큰 작업에 나누거나, 다른 요청과 겹치도록 데이터 구조를 배치합니다. CPU는 안전하게 하드웨어로 옮기기 어려운 변경 작업을 계속 담당합니다.
출처와 저작권 안내
이 글은 Silicon & Systems가 작성한 편집 분석입니다. 원문의 구조, 평가, 적용 한계를 우리 표현으로 다시 썼습니다. 원문의 문장, 표, 도판은 재수록하지 않았고 이 페이지의 도판은 모두 새로 만들었습니다. 검토한 저자본은 arXiv, 저널 기록은 IEEE DOI에서 확인할 수 있습니다. (c) IEEE 2024.