HyperPB: UPB를 능가하는 초고속 Go Protobuf 파서

2025-07-24
HyperPB: UPB를 능가하는 초고속 Go Protobuf 파서

이 글에서는 Go로 작성된 초고속 Protobuf 파서인 HyperPB를 소개합니다. 최고 속도의 Protobuf 런타임 중 하나인 UPB의 장점을 기반으로 Go의 레지스터 ABI와 정의되지 않은 동작이 없는 점을 이용하여 많은 최적화를 수행했습니다. JIT 컴파일과 온라인 PGO를 사용하여 Protobuf Go의 생성 코드와 vtprotobuf을 벤치마크 테스트에서 능가합니다. 핵심은 테이블 기반 인터프리터이며, 제로 카피 기술, 핫/콜드 데이터 분할, 아레나 재사용과 같은 영리한 최적화가 포함되어 있습니다.

더 보기
개발

Go의 GC: 심층 분석과 사용자 지정 아레나 할당자

2025-04-21
Go의 GC: 심층 분석과 사용자 지정 아레나 할당자

이 글에서는 Go의 가비지 컬렉션의 복잡성을 심층적으로 파헤치고, 이 지식을 활용하여 고성능 아레나 할당자를 구축합니다. Go의 GC 동작을 영리하게 활용하여, 특히 대규모 메모리 할당 시 Go의 기본 제공 할당자보다 더 빠른 메모리 할당을 달성합니다. 이 글에서는 사용자 지정 아레나 할당자의 설계 원칙, 구현, 벤치마크 결과를 자세히 설명하고, 고병렬 환경에서의 성능도 분석합니다.

더 보기
개발

타겟 트리플: 컴파일러 혼돈에 대한 가이드

2025-04-15
타겟 트리플: 컴파일러 혼돈에 대한 가이드

이 글에서는 x86_64-unknown-linux-gnu와 같은 컴파일러의 타겟 트리플의 복잡성을 자세히 다룹니다. 트리플의 구성 요소(아키텍처, 벤더, OS, ABI)를 설명하고 GCC와 LLVM이 이를 처리하는 방식의 차이점을 보여줍니다. 다양한 아키텍처(x86, ARM 등)의 명명 규칙, 벤더 및 OS 표현 방식을 자세히 분석하고 혼란을 피하기 위해 일관성을 유지하는 것이 중요함을 강조합니다. 결론적으로 저자는 새로운 툴체인을 구축할 때 새로운 타겟 트리플 규칙을 만들지 말 것을 권장하며, 이는 툴체인 간의 협업을 용이하게 하기 위함입니다.

더 보기