Go 1.26, GC, Cgo, 메모리 할당 성능 UP!

by DD
5개월 전
조회수 5

Go 1.26은 Green Tea GC 도입, Cgo/Syscall 성능 향상, 메모리 할당 최적화 등 다양한 개선 사항을 포함함.

new(expr) 지원, Type-safe error checking 기능 추가, Goroutine leak profile 제공 등 개발 편의성을 높이는 기능들이 추가됨.

커뮤니티에서는 성능 향상에 대한 기대와 함께, Green Tea GC의 안정성 및 SIMD 지원에 대한 추가적인 벤치마크 결과를 요구함.

Green Tea GC: 메모리 관리 혁신

Green Tea GC는 CPU 코어 활용도를 높이기 위해 메모리 접근 방식을 개선했다. 구체적으로, 기존의 객체 단위 스캔 대신 8KB 블록(span) 단위로 메모리를 스캔하여 캐시 미스를 줄인다. 따라서, GC 오버헤드를 10~40%까지 줄일 수 있으며, AMD64 아키텍처에서는 SIMD를 활용하여 추가적인 성능 향상을 기대할 수 있다.

Cgo 및 Syscall 성능 개선: 내부 구조 변화

Go 1.26은 CgoSyscall 호출 시 발생하는 오버헤드를 줄이기 위해 내부 구조를 변경했다. 구체적으로, Psyscall 상태를 제거하고, Goroutine의 상태를 직접 확인하는 방식으로 변경하여 Cgo 런타임 오버헤드를 최대 30%까지 감소시켰다. 따라서, 시스템 콜을 빈번하게 사용하는 애플리케이션의 성능이 향상될 것으로 예상된다. 반면, 기존 코드와의 호환성 검토가 필요하다.

Goroutine Leak Profile: 런타임 디버깅 도구

Go 1.26은 Goroutine Leak Profile을 도입하여 런타임에서 Goroutine 누수를 탐지할 수 있도록 지원한다. 구체적으로, GC의 마킹 단계를 활용하여 도달 불가능한 Goroutine을 식별하고, 누수된 Goroutine의 스택 트레이스를 제공한다. 따라서, 개발자는 동시성 버그를 보다 쉽게 찾아내고, 안정적인 서비스 운영을 보장할 수 있다. 결과적으로, pprof를 통해 누수 정보를 확인할 수 있다.

Go 1.26 interactive tour