TCP geridöngü bağlantısı ve Unix Etki Alanı Soketi performansı


116

Aynı cihazda çalışan bir sunucu ile iletişim gerektiren Android ve iOS tabanlı bir uygulama üzerinde çalışmak. Şu anda Uygulama ve Sunucu ile iletişim kurmak için TCP geri döngü bağlantısı kullanılıyor (Kullanıcı katmanında yazılmış uygulama, Android NDK kullanılarak C ++ ile yazılmış sunucu)

Inter iletişimi Unix Domain soketiyle değiştirmenin performansı artırıp artırmayacağını merak ediyordum.

Veya genel olarak, Unix Domain soketinin TCP geridöngü bağlantısından daha iyi performans vereceğini kanıtlayan herhangi bir kanıt / teori var mı?


3
Yerel soketlerin (UNIX etki alanı soketleri) dosya sisteminde bir dosyaya ihtiyacı olduğunu unutmayın. TCP geri döngü adresini kullanmak hepsini bellekte tutar. Uzak TCP soketlerini kullanmanız gerekiyorsa, yeni bir soket ve adres ailesiyle uğraşmak yerine başka bir TCP soketini entegre etmek daha kolay olabilir.
programcı dostum

1
@JoachimPileborg Yalnızca Linux (Android) için geliştirme yaparken , dosya sisteminde bir dosyaya ihtiyaç duymayan soyut UNIX etki alanı soket adreslerini kullanma seçeneği vardır .
thuovila

android bağlantısı için stackoverflow.com/questions/14643571/… bakın .
Rohit

8
@Someprogrammerdude Dosya sisteminde bir dosyaya ihtiyaçları var ama bu her şeyin diske gidip geri döneceği anlamına gelmez.
Lorne Markisi

3
@Someprogrammerdude Yalnızca dosya adı, sahiplik ve izin bilgileri dosya sisteminde saklanır. Tüm gerçek veri aktarımı tamamen bellekte gerçekleşir.
Jesin

Yanıtlar:


105

Evet, unix etki alanı soketleriyle yerel işlemler arası iletişim, daha az TCP ek yükünüz olduğundan, geri döngü yerel ana bilgisayar bağlantılarıyla iletişimden daha hızlı olmalıdır, buraya bakın .


12
ilk bağlantı 2005'ten (eski) olan ikinci bağlantıya atıfta bulunuyor. ve sadece FreeBSD'yi kapsar
Janus Troelsen

7
Modern linux üzerinde geridöngü tcp test edildiğinde bu cevap yanlıştır ve bazen UDS'den daha hızlıdır. gerekirse karşılaştırma ölçütü sağlayabilir
easytiger

10
Bu cevap kesinlikle doğrudur. Geri döngü arabirimi hala TCP'dir, yani hala TCP ek yüküne sahip olursunuz (tıkanıklık denetimi, akış denetimi, akış yönetimi (IP paket sıralaması, yeniden iletim, vb.)). Unix alan soketleri, sıfırdan yerel olarak çalıştırılmak üzere tasarlandığından yukarıdakilerin hiçbirini yapmaz, bu da tıkanıklık sorunu olmadığı, akış kontrolü gerektiren sunucu / istemci arasında hız farkı olmadığı, paketlerin düşürülmediği vb. Anlamına gelir. , yeni bir şey değil.
JSON

4
Yerel UDP ne olacak?
CMCDragonkai

2
ilk bağlantının ölü olduğu göz önüne alındığında (HTTP 404) ... bu nedenle en iyi stackoverflow uygulaması, yanıt yazılırken (daha sonra bağlantı düştüğünde) kaynak URL'den kısa / öz ve ilgili bir alıntı sağlamaktır. kısa özet hala mevcuttur).
Trevor Boyd Smith

80

Bu kıyaslama: https://github.com/rigtorp/ipc-bench , TCP soketleri, Unix Etki Alanı Soketleri (UDS) ve PIPE'ler için gecikme ve aktarım hızı testleri sağlar.

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 gecikme azaltma ve neredeyse 7 kat daha fazla iş hacmi, performans açısından kritik öneme sahip çoğu yazılımın neden kendi IPC özel protokolüne sahip olduğunu açıklar.


7
Bana, ürünleri soruna bir cevap gibi geliyor! Belki de bu yüzden bu sorulara cevap veriyorlar; çünkü bir cevap biliyorlar.
GreenReaper

Bu harika bir cevap çünkü bazı rakamları var. TCP'den UNIX'e aktarım, bir i5'te% 350, UNIX'ten PIPE'ye% 40 daha iyidir.
ScalaWilliam

13
@GreenReaper Cevap gerçekten alakalı, ancak Torusware Speedus ürünümüzün ... serisi 2 sürümle geliyor, Speedus Lite ve Speedus Extreme Performance (EP) değil ve her şeyi ucuz bir reklam gibi gösteriyor.
Dmitry Grigoryev

3
İstenmeyen e. Ve hayır, onun ürünü TCP ve Unix soketleri arasındaki karşılaştırmada alakalı değil. Soketlere birçok sağduyu alternatifi var - her biri OP'nin sorduğu şeyin dışında
JSON

Bu aracın kullanımı yeterince açıklanmamıştır. İstemci ve sunucuyu nasıl arayacağınızı açıklayan bir sayfa var mı?
falkb

40

Redis karşılaştırması , unix alan soketinin TCP geri döngüden çok daha hızlı olabileceğini göstermektedir.

Sunucu ve istemci kıyaslama programları aynı kutu üzerinde çalıştığında, hem TCP / IP geri döngü hem de unix etki alanı soketleri kullanılabilir. Platforma bağlı olarak, unix etki alanı soketleri, TCP / IP geri döngüden (örneğin Linux'ta) yaklaşık% 50 daha fazla verim sağlayabilir. Redis-benchmark'ın varsayılan davranışı, TCP / IP geridöngü kullanmaktır.

Bununla birlikte, bu fark yalnızca verim yüksek olduğunda önemlidir.

Veri boyutu başına iş hacmi


8

Unix etki alanı soketleri, her iki eş aynı ana bilgisayardayken genellikle bir TCP soketinden iki kat daha hızlıdır. Unix etki alanı protokolleri gerçek bir protokol paketi değil, farklı ana bilgisayarlardaki istemciler ve sunucular için kullanılan aynı API'yi kullanarak tek bir ana bilgisayarda istemci / sunucu iletişimi gerçekleştirmenin bir yoludur. Unix etki alanı protokolleri, işlemler arası iletişim (IPC) yöntemlerine bir alternatiftir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.