Kết nối lặp lại TCP so với hiệu suất của Unix Domain Socket


116

Làm việc trên ứng dụng dựa trên Android và iOS yêu cầu giao tiếp với máy chủ chạy trên cùng một thiết bị. Hiện đang sử dụng kết nối lặp lại TCP để giao tiếp với Ứng dụng và Máy chủ (Ứng dụng được viết ở lớp người dùng, máy chủ được viết bằng C ++ sử dụng Android NDK)

Tôi đã tự hỏi liệu việc thay thế giao tiếp liên kết bằng Unix Domain socket có cải thiện hiệu suất không?

Hay nói chung là có bằng chứng / lý thuyết nào chứng minh rằng Unix Domain socket sẽ cho hiệu suất tốt hơn sau đó kết nối lặp lại TCP không?


3
Hãy nhớ rằng các ổ cắm cục bộ (ổ cắm miền UNIX) cần một tệp trong hệ thống tệp. Sử dụng địa chỉ lặp lại TCP giữ tất cả trong bộ nhớ. Và nếu bạn phải sử dụng các ổ cắm TCP từ xa, có thể dễ dàng tích hợp một ổ cắm TCP khác thay vì loay hoay với một họ địa chỉ và ổ cắm mới.
Một số lập trình viên dude

1
@JoachimPileborg Khi chỉ phát triển cho Linux (Android), có tùy chọn sử dụng các bổ trợ ổ cắm miền UNIX trừu tượng , không cần tệp trong hệ thống tệp.
thuovila

tham khảo stackoverflow.com/questions/14643571/… cho kết nối Android.
RDX

8
@Someprogrammerdude Họ cần một tệp trong hệ thống tệp, nhưng điều đó không có nghĩa là mọi thứ sẽ được chuyển vào đĩa và quay lại.
Marquis of Lorne,

3
@Someprogrammerdude Chỉ thông tin tên tệp, quyền sở hữu và quyền mới được lưu trữ trong hệ thống tệp. Tất cả việc truyền dữ liệu thực tế diễn ra hoàn toàn trong bộ nhớ.
Jesin

Câu trả lời:


105

Có, giao tiếp nội bộ cục bộ bằng ổ cắm miền unix sẽ nhanh hơn giao tiếp bằng kết nối máy chủ cục bộ vòng lặp vì bạn có ít chi phí TCP hơn, xem tại đây .


12
liên kết đầu tiên là trích dẫn liên kết thứ hai, là từ năm 2005 (cũ). và nó chỉ bao gồm FreeBSD
Janus Troelsen

7
Câu trả lời này là sai, khi thử nghiệm loopback tcp trên linux hiện đại nhanh hơn và đôi khi nhanh hơn UDS. có thể cung cấp điểm chuẩn nếu cần
easytiger

10
Câu trả lời này là hoàn toàn chính xác. Giao diện vòng lặp vẫn là TCP, có nghĩa là bạn vẫn có chi phí của TCP (kiểm soát tắc nghẽn, kiểm soát luồng, quản lý luồng (đặt hàng gói IP, truyền lại, v.v.)). Các ổ cắm miền Unix không thực hiện bất kỳ điều nào ở trên vì nó được thiết kế từ đầu để chạy cục bộ, có nghĩa là không có vấn đề tắc nghẽn, không có sự khác biệt về tốc độ giữa máy chủ / máy khách yêu cầu kiểm soát luồng, không bị rớt gói, v.v. Hãy Google điều này nếu nghi ngờ , không phải là một điều mới.
JSON

4
Còn UDP cục bộ thì sao?
CMCDragonkai

2
cho rằng liên kết đầu tiên đã chết (HTTP 404) ... đây là lý do tại sao phương pháp hay nhất của stackoverflow là ít nhất cung cấp một trích dẫn có liên quan ngắn gọn / súc tích từ URL nguồn tại thời điểm viết câu trả lời (sau đó khi liên kết bị ngắt bản tóm tắt ngắn vẫn có sẵn).
Trevor Boyd Smith

80

Điểm chuẩn này: https://github.com/rigtorp/ipc-bench cung cấp các bài kiểm tra độ trễ và thông lượng cho các socket TCP, Unix Domain Sockets (UDS) và 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

Giảm độ trễ 66%thông lượng tăng gần gấp 7 lần giải thích tại sao hầu hết các phần mềm quan trọng về hiệu suất đều có giao thức tùy chỉnh IPC của riêng chúng.


7
Tôi nghe có vẻ như sản phẩm của họ là một câu trả lời cho vấn đề! Có lẽ đó là lý do tại sao họ trả lời những câu hỏi đó; bởi vì họ biết một câu trả lời.
GreenReaper

Đây là một câu trả lời tuyệt vời vì nó có một số con số. Thông lượng từ TCP sang UNIX tốt hơn 350%, UNIX đến PIPE 40% trên i5.
ScalaWilliam

13
@GreenReaper Câu trả lời thực sự có liên quan, nhưng dòng sản phẩm Torusware Speedus của chúng tôi ... đi kèm với 2 phiên bản, Speedus Lite và Speedus Extreme Performance (EP) thì không, và nó khiến toàn bộ thứ nghe giống như một quảng cáo rẻ tiền.
Dmitry Grigoryev

3
Thư rác. Và không, sản phẩm của anh ấy không phù hợp khi so sánh giữa các ổ cắm TCP và Unix. Có rất nhiều lựa chọn thay thế thông thường cho các ổ cắm - mỗi bên ngoài những gì OP đang yêu cầu
JSON

Việc sử dụng công cụ đó không được giải thích đầy đủ. Có một trang nào đó giải thích cách gọi máy khách và máy chủ không?
falkb

40

Điểm chuẩn của Redis cho thấy ổ cắm miền unix có thể nhanh hơn đáng kể so với vòng lặp TCP.

Khi chương trình điểm chuẩn máy chủ và máy khách chạy trên cùng một hộp, cả hai ổ cắm miền ngược TCP / IP và miền unix đều có thể được sử dụng. Tùy thuộc vào nền tảng, các ổ cắm miền unix có thể đạt được thông lượng cao hơn khoảng 50% so với vòng lặp TCP / IP (ví dụ: trên Linux). Hành vi mặc định của redis-benchmark là sử dụng vòng lặp TCP / IP.

Tuy nhiên, sự khác biệt này chỉ quan trọng khi thông lượng cao.

Thông lượng trên mỗi kích thước dữ liệu


8

Các ổ cắm miền Unix thường nhanh gấp đôi so với ổ cắm TCP khi cả hai đồng đẳng trên cùng một máy chủ. Các giao thức miền Unix không phải là một bộ giao thức thực tế, mà là một cách thực hiện giao tiếp máy khách / máy chủ trên một máy chủ duy nhất bằng cách sử dụng cùng một API được sử dụng cho máy khách và máy chủ trên các máy chủ khác nhau. Các giao thức miền Unix là một giải pháp thay thế cho các phương thức truyền thông liên quá trình (IPC).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.