Soru Neden anketler epoll ile değiştirilmiyor?


Seviye tetiklemeli epoll çok benzer poll. Neden olmasın poll sadece bir sarıcı için epoll ikincisini destekleyen sistemlerde?

DÜZENLEME: Yani, böyle bir karara karşı herhangi bir teknik engel var mı? Uygulama poll gibi epoll Birçok ağ uygulamasının performansını önemli ölçüde artıracaktır. Fark edemediğim bazı teknik sorunlar olmalı.


7
2018-01-03 19:13


Menşei


Bunlar sistem çağrılarıdır. Ne hakkında konuştuğunu bilmiyorsan belki de bakmalısın, ama sorusu tamamen geçerli. - drrlvn
Her ikisi de bir dosya tanıtıcıları kümesindeki herhangi bir aktiviteyi beklemek için syscalls. Epoll, Linux 2.6+ 'ya özeldir. İnsan sayfalarına bağlantılar ekledim.
Ne olduklarını biliyorum. Ancak, anketi olan birçok linux / unix benzeri sistem var ve soru, neyin hangi sürümleri ile ilgili detaylar olmadan cevaplanamaz. - bmargulies
Uygulama poll bir sarıcı olarak epoll inanılmaz derecede karmaşık ve verimsiz olurdu. Ya yeni bir epoll tanımlayıcısı oluşturmalı ve her seferinde yapılandırmalı ya da mevcut anketin epoll tanımlayıcısı ile ilişkilendirilmiş olana göre acı bir karşılaştırma yapması gerekiyor. Yuck! - David Schwartz


Cevaplar:


anket, kolay durumlar için çok daha basittir; Muhtemelen az sayıda dosya tanıtıcısı için etkilidir. Arayanın, anket FD'lerini sürdürme ve FD'leri ekleme / kaldırma hakkında endişelenmesi gerekmez, her aramayı istedikleri sıraya ekleyebilirler.

Duygularım, ücretsiz olmasına rağmen, anketin epoll için bir sarıcı olarak uygulanmasına rağmen, muhtemelen olmamalı.

epoll (neredeyse) anket için bir sarıcı olarak uygulanabilirdi, ancak bu onun verimlilik argümanlarını yenebilirdi.


2
2018-01-03 22:20



Bu en olası cevaptır. Bunu test ettim ve epoll, yerel bir dosyanın 1 dosya tanıtıcısı için anketten 10 kat daha yavaş (1000 anket başına 550 kişi ve 1000 epolls başına 5420 kişi (+ ctl + wait + close)). epoll_wait sadece anketten 2 kat daha yavaştı.


Semantiği poll() ve epoll farklıdır. Eğer poll() bir tanımlayıcının okunabilir olduğunu bildirir, sonra biraz okuma yaparsınız ancak mevcut tüm baytları okumaz ve sonra bu tanıtıcıyı poll() tekrar, hemen uyanacak. AFAIK aynı değildir epoll.

Ayrıca dikkat edin epoll tanımlayıcılar sınırlı bir kaynaktır. Manpage hakkında konuşur epoll_create() AFAIK'ın ortaya çıkmadığı başarısızlık koşulları poll().

Tüm uygulama detaylarından emin değilim, bundan yapmanın mantıklı olmadığını söyleyebiliriz. poll() için bir sarıcı epoll. Programcı bu noktaların farkında olmalı ve var olan kodlar varsayımlarla yazılmalıdır. poll() izin verir.


1
2018-01-03 20:34



1. Epoll'un varsayılan seviyesi (Seviye-tetiklemeli) anket gibi davranır (bkz. Epoll için manpage'in açıklama bölümü (7)). 2. Anket aslında epoll_create + epoll_ctl + epoll + wait + close. Dolayısıyla, bu hayali ankette kullanılan epoll tanımlayıcılarının sayısı, eş zamanlı olarak anket yapan iş parçacıklarının sayısıyla sınırlanır. Bu yüzden maksimum iş parçacığı sayısını yansıtmak için max_user_instances ayarlamak için bazı teknikler olabilir. 3. Bu varsayımı, bu varsayımların ne olduğuyla ilgili meraktan dolayı yayınladım.


Tamam, 7 yıl sonra daha ikna edici bir cevabım var Bu makale Evan Klitzke tarafından.

İlk olarak, soruyu ilk sırada sormamın nedeni, sıkça bahsedilen performans avantajıdır. epoll nazaran poll/select. Kelime o gider epoll asimptotik olarak daha verimli (O (1)) poll (O(N-)).

Yaygın olarak bilinen olmayan şey sadece Kenar tetikli  epoll gerçekten O (1) iken seviye-trggered  epoll O'nun aynı asimptotiklerine sahiptirN-). Aslında, seviye tetiklemeli Lezzet, potansiyel olarak hala daha fazla veri beklemede olanları bulmak için çağrıldığında, izlenen fds listesinin üzerinden geçmelidir. Kenar tetikli çeşitlilik, bir fd'de görünen yeni baytlara yanıt olarak sinyallere güvenebilir.

Bulmak ilginizi çeker, ne kadar devam eden bir iş parçacığının hangi fd'yi uyandırdığını öğrenir, fakat bu veriyi epoll-tetiklemeli uyandırma sırasında geçmesi kesinlikle mümkündür.

Açıkçası, poll/select kullanılamaz Kenar tetikli  epoll semantikler farklıdır. Gördüğümüz gibi seviye tetiklemeli  epoll Asimptotik performans avantajları getirmez. Ve muhtemelen, sabit faktörler ya da sabit terimler yüksekse (başka bir yorumda yaptığım ve alıntıladığım kaba ölçütlere dayanıyor gibi), onu da olumsuz yönde etkiler.

Daha fazla bilgi için lütfen okuyun G / Ç, Engellemesiz G / Ç ve Epoll Engelleme.


1
2018-01-18 23:02