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


116

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

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

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


3
로컬 소켓 (UNIX 도메인 소켓)에는 파일 시스템의 파일이 필요합니다. TCP 루프백 주소를 사용하면 모든 것이 메모리에 유지됩니다. 그리고 원격 TCP 소켓을 사용해야하는 경우 새 소켓 및 주소 제품군을 조작하는 대신 다른 TCP 소켓을 통합하는 것이 더 쉬울 수 있습니다.
일부 프로그래머 친구

1
@JoachimPileborg Linux (Android) 전용으로 개발할 때 파일 시스템에 파일이 필요하지 않은 추상 UNIX 도메인 소켓 주소 를 사용하는 옵션이 있습니다 .
thuovila 2013

android 연결 은 stackoverflow.com/questions/14643571/… 을 참조하십시오 .
RDX 2013

8
@Someprogrammerdude 그들은 파일 시스템에 파일이 필요하지만 그것이 모든 것이 디스크로 돌아가는 것을 의미하지는 않습니다.
Marquis of Lorne

3
@Someprogrammerdude 파일 시스템에는 파일 이름, 소유권 및 권한 정보 만 저장됩니다. 모든 실제 데이터 전송은 전적으로 메모리에서 발생합니다.
Jesin

답변:


105

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


12
첫 번째 링크는 2005 년 (이전)의 두 번째 링크를 인용합니다. 그리고 그것은 FreeBSD만을 다룹니다
Janus Troelsen 2014 년

7
현대 리눅스에서 테스트 된 루프백 tcp가 UDS보다 빠르고 때로는 빠르기 때문에이 대답은 잘못된 것입니다. 필요한 경우 벤치 마크를 제공 할 수 있습니다
easytiger

10
이 대답은 절대적으로 정확합니다. 루프백 인터페이스는 여전히 TCP이므로 TCP (혼잡 제어, 흐름 제어, 스트림 관리 (IP 패킷 순서, 재전송 등))의 오버 헤드가 여전히 있음을 의미합니다. Unix 도메인 소켓은 처음부터 로컬에서 실행되도록 설계 되었기 때문에 위의 작업을 수행하지 않습니다. 이는 혼잡 문제가없고 흐름 제어가 필요한 서버 / 클라이언트 간의 속도 차이, 패킷 손실 등이 없음을 의미합니다. , 새로운 것이 아닙니다.
JSON

4
로컬 UDP는 어떻습니까?
CMCDragonkai

2
첫 번째 링크가 죽었 음을 감안할 때 (HTTP 404) ... 이것이 바로 stackoverflow 모범 사례가 답변 작성시 소스 URL에서 짧고 간결한 관련 인용문을 제공하는 이유입니다 (그런 다음 링크가 다운 될 때 짧은 요약은 계속 사용할 수 있습니다.)
Trevor Boyd Smith

80

이 벤치 마크 : 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 사용자 지정 프로토콜이있는 이유를 설명합니다.


7
그들의 제품이 문제에 대한 답인 것처럼 들립니다! 아마도 그것이 그들이 그 질문에 답하는 이유 일 것입니다. 답을 알고 있기 때문입니다.
GreenReaper

몇 가지 숫자가 있기 때문에 이것은 훌륭한 대답입니다. i5에서 TCP에서 UNIX 로의 처리량은 350 %, UNIX에서 PIPE로 40 % 향상되었습니다.
ScalaWilliam

13
@GreenReaper 대답은 실제로 관련이 있지만 Torusware Speedus 제품 라인 에는 두 가지 버전이 있습니다. Speedus Lite와 Speedus Extreme Performance (EP) 는 그렇지 않으며 모든 것이 값싼 광고처럼 들립니다.
Dmitry Grigoryev

3
스팸. 그리고 그의 제품은 TCP와 Unix 소켓 사이의 비교와 관련이 없습니다. 소켓에 대한 많은 상식적인 대안이 있습니다-각각 OP가 요구하는 것 밖에서
JSON

그 도구의 사용법은 충분히 설명되지 않았습니다. 어떻게 든 클라이언트와 서버를 호출하는 방법을 설명하는 페이지가 있습니까?
falkb

40

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

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

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

데이터 크기 당 처리량


8

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.