[sockets] TCP 루프백 연결과 Unix 도메인 소켓 성능

동일한 장치에서 실행되는 서버와 통신해야하는 Android 및 iOS 기반 응용 프로그램에서 작업합니다. 현재 App 및 Server와 통신하기 위해 TCP 루프백 연결을 사용하고 있습니다 (앱은 사용자 계층으로 작성, 서버는 Android NDK를 사용하여 C ++로 작성).

상호 통신을 Unix Domain 소켓으로 대체하면 성능이 향상되는지 궁금합니다.

또는 일반적으로 Unix 도메인 소켓이 TCP 루프백 연결보다 더 나은 성능을 제공한다는 증거 / 이론이 있습니까?



답변

예, 유닉스 도메인 소켓에 의한 로컬 프로세스 간 통신은 TCP 오버 헤드가 적기 때문에 루프백 로컬 호스트 연결에 의한 통신보다 빠릅니다 . 여기를 참조 하십시오 .


답변

이 벤치 마크 : https://github.com/rigtorp/ipc-bench
는 TCP 소켓, UDS (Unix Domain Sockets) 및 PIPE에 대한 지연 시간 및 처리량 테스트를 제공합니다.

Here you have the results on a single CPU 3.3GHz Linux machine :

TCP average latency: 6 us

UDS average latency: 2 us

PIPE average latency: 2 us

TCP average throughput: 0.253702 million msg/s

UDS average throughput: 1.733874 million msg/s

PIPE average throughput: 1.682796 million msg/s

66 % 지연 감소 및 거의 7 배 더 많은 처리량은 대부분의 성능에 중요한 소프트웨어에 자체 IPC 사용자 지정 프로토콜이있는 이유를 설명합니다.


답변

Redis 벤치 마크 는 유닉스 도메인 소켓이 TCP 루프백보다 훨씬 빠를 수 있음을 보여줍니다.

서버 및 클라이언트 벤치 마크 프로그램이 동일한 상자에서 실행되는 경우 TCP / IP 루프백 및 유닉스 도메인 소켓을 모두 사용할 수 있습니다. 플랫폼에 따라 유닉스 도메인 소켓은 TCP / IP 루프백 (예 : Linux)보다 약 50 % 더 많은 처리량을 달성 할 수 있습니다. redis-benchmark의 기본 동작은 TCP / IP 루프백을 사용하는 것입니다.

그러나이 차이는 처리량이 높은 경우에만 중요합니다.

데이터 크기 당 처리량


답변

Unix 도메인 소켓은 두 피어가 동일한 호스트에있을 때 TCP 소켓보다 두 배 빠른 경우가 많습니다. Unix 도메인 프로토콜은 실제 프로토콜 제품군이 아니라 다른 호스트의 클라이언트와 서버에 사용되는 동일한 API를 사용하여 단일 호스트에서 클라이언트 / 서버 통신을 수행하는 방법입니다. Unix 도메인 프로토콜은 IPC (프로세스 간 통신) 방법의 대안입니다.


답변