캐시 친화적인 AVX-512 IPv6 LPM (linearized B+-tree, real BGP benchmarks)
·2026.04.20 12:24
PlanB IPv6 LPM을 portable C++17 라이브러리로 재구현하고 벤치마크를 공개했다.
planb-lpm은 PlanB 논문의 IPv6 longest-prefix-match(LPM) 알고리즘을 portable, MIT-licensed C++17 library로 다시 구현한 프로젝트다.
핵심 구성은 다음과 같다.
- header-only core
include/lpm6.hpp: AVX-512가 없어도 빌드되며 scalar path로 자동 fallback - Dynamic FIB
lpm6::Dynamic: rebuild-and-swap 방식과std::atomic<std::shared_ptr>를 사용해 lookup을 wait-free로 처리 - Python bindings:
pybind11기반,pip install -e .로 사용 가능 - Correctness tests: brute-force LPM reference와 synthetic FIB를 비교
- Sample generator:
examples/generate_sample.py
벤치마크는 warmup 1회 + timed 20회로 측정하고, min/q1/median/q3/max와 IQR을 함께 공개해 변동성을 드러낸다. 테스트 환경은 Intel i5-1035G7 Ice Lake, Ubuntu 24.04 on WSL, GCC 13.3, -O3이며, 단일 코어에 고정해 측정했다.
결과적으로:
single과batch<1>은 거의 동일해 dispatch overhead가 사실상 없다.- **batch<8>**에서 약 1.5배 수준의 처리량 향상이 나타났다.
batch<16>은 register pressure 영향으로 일시적인 하락이 있었고,batch<32>는 다시 비슷한 수준으로 회복했다.- conventional baseline인 Patricia trie 대비 median 기준 약 20배 빠른 결과를 보였다.
메모리 footprint도 비교했다.
- 100K prefixes 기준으로 tree는 4.82 MB, Patricia trie는 6.04 MB 수준
- RSS delta 기준으로도 tree가 더 작았지만, 250K 이상에서는 linearized B+-tree의 depth transition 때문에 footprint가 크게 뛰어 Patricia보다 커질 수 있다.
FIB-size sweep에서는:
- FIB가 커질수록 throughput이 L3 cache를 넘으면서 크게 하락
- 작은 FIB에서는
batch<8>가 유리하지만, 큰 FIB에서는batch<32>가 더 나은 결과 - rebuild time은 10K에서 1.5 ms, 1M에서 213.4 ms로 대체로 선형적으로 증가
전체적으로, 이 글은 PlanB 계열 IPv6 LPM을 실제로 쓸 수 있는 형태로 정리하고, 속도·메모리·rebuild 비용을 수치로 검증한 기술 공유다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.