SOCKMAP - TCP splicing of the future
The Cloudflare Blog
2019년도에 작성된 글이기에 현재의 상태와는 상이할 수 있습니다. 리눅스 커널 4.14 기준
TCP 스플라이싱은 TCP 연결을 가로채고 리디렉션하는 작업으로 로드 밸런싱 시나리오에서 유용하게 적용할 수 있는 방법입니다.
일반적인 방법은 어플리케이션에서 읽기와 쓰기를 통하여 트래픽을 전달하는 방법이 있습니다. 이 방법은 사용자 공간에 카피가 일어나기 때문에 비효율적인 측면이 있습니다. 이 비효율성을 줄이기 위해서 리눅스에서는 sendfile, splice, vmsplice 와 같은 방법을 제공합니다. 다만, 사용자 공간에 데이터가 복사되지 않지만, 여전히 사용자 공간의 프로그램을 깨워서 작업을 해주어야 하는 비용이 존재합니다.
커널 4.14 에서 BPF_MAP_TYPE_SOCKMAP 소개 되었는데, 프로그램의 도움으로 소켓 간에 소켓버퍼를 리디렉션하거나 소켓 수준에서 정책을 적용하는 데 사용할 수 있게 되었습니다. 즉, 이를 통하여 로드밸런싱 혹은 네트워크 최적화를 위한 로직을 수행하기 위해서 사용자 공간에서 수행할 수 밖에 없었던 비용을 전적으로 커널 공간으로 위임할 수 있는 방법이 생긴 것입니다.
하지만, 2019년 당시 벤치마킹으로 SOCKMAP 은 버그가 존재하였고 결과 또한 만족스럽지 못하였습니다. 벤치마크에 따르면 성능 저하, 높은 지터(깨우기) 및 몇 가지 버그로 인해 아직 적용할 수 있는 상태는 아닌 듯 합니다. 하지만, 비동기식, 커널 전용, 불필요한 데이터 복사를 완전히 방지하는 등의 모든 조건을 선택하여 다른 접근 방식보다 훨씬 더 나은 성능을 발휘할 가능성이 있습니다. SOCKMAP은 여러 소켓에 걸쳐 데이터를 파이프할 수 있고 서로 데이터를 보낼 수 있는 완전한 연결 메시까지 구현 가능하게 될 수도 있습니다.
이 글의 시점이 2019년이었는데, 2023년인 지금은 eBPF/SocketMap 이 어떻게 변화되었는지 궁금해지는 아티클입니다.
https://blog.cloudflare.com/sockmap-tcp-splicing-of-the-future
다음 내용이 궁금하다면?
이미 회원이신가요?
2023년 12월 16일 오전 4:12