mpsc 채널의 숨겨진 비용
Tokio의 mpsc 채널이 예상보다 훨씬 큰 메모리를 할당하는 현상이 발견되었습니다.
실제로는 채널 용량과 상관없이 초기 할당 크기가 32개의 메시지 크기 + 544바이트로 고정되어 있었습니다.
이는 Tokio 내부에서 채널이 32개 메시지를 저장하는 고정 크기 배열인 Block 단위로 구현되어 있기 때문입니다.
이 구조 때문에 작은 메시지를 다수 사용하는 환경에서는 메모리 낭비가 심각한 문제로 나타났습니다.
예를 들어, Kubernetes 서비스별로 수천 개의 작은 채널을 생성할 경우, 메모리 사용량이 크게 증가했습니다.
이 문제를 해결하기 위해 futures-channel로 교체하여 메모리 사용량을 절반으로 줄일 수 있었습니다.
또한, Hyper 라이브러리의 HTTP 연결당 16KB 메모리 할당 중 8KB가 이 같은 mpsc 채널 구조에서 기인하는 것으로 밝혀졌습니다.
이 문제는 고성능 네트워크 애플리케이션에서 지연과 메모리 효율성에 중요한 영향을 미치므로 개선이 요구됩니다.
요약하면, Tokio mpsc 채널의 고정된 블록 크기 구조가 메모리 사용에 큰 영향을 미치며, 상황에 따라 대체 채널 사용을 고려해야 합니다.