2011-11-24 38 views
3

我一直在使用select來處理連接,最近我們的套接字庫發生了變化,select被epoll for linux平臺所取代。epoll vs選擇極少數的連接

我的應用程序體系結構是這樣的,我做只有一個或最多2套接字連接和epoll的/在一個單獨的線程選擇他們。

現已與最近交換機EPOLL我注意到應用的是性能diminshed,我其實感到驚訝和期待性能上還是reamin相同。我試着尋找各種其他部分,這是改變了的唯一代碼。

如果用於極少數插座(如1或2),epoll在速度方面會有性能損失。

另外還有一件事要注意,我在同一個盒子上運行了125個這樣的進程(8個CPU核心)。 可能是這種情況,太多的進程在同一臺機器上做epoll_wait,這個設置與我使用select時類似。

我注意到框,平均負載要高得多,但CPU使用率是這讓我覺得更多的時間花費在I/O,並從epoll的相關變化probaly未來不太一樣。

任何想法/指示什麼我應該看看更多以確定問題。

雖然絕對延遲時間增加是相當小的,如平均1毫秒,但是這是一個實時的系統,而這種等待時間一般都unaccpetable。

感謝

嗨,

更新的最新findinds這個問題,除了從選擇到EPOLL切換我發現了另一個相關的變化,早期的超時時間選擇在10個米利斯但epoll的超時的方式是這樣比以前更小(比如1微米..),可以設置太低的select或epoll超時結果導致性能下降?

感謝

+0

相關問題在http://stackoverflow.com/questions/4093185/whats-the-difference-between-epoll-poll-threadpool –

+0

可能的重複[是否有任何益處使用epoll與少量的文件描述符?](http://stackoverflow.com/questions/8597452/is-there-any-benefit-to-using-epoll-with-a-very-small-number-of-file-descriptors) – gavv

回答

3

從它的聲音,吞吐量可能受到影響與epoll() VS select(),但是你發現的,這似乎是與使用的epoll()個別要求額外的延遲。

我認爲在只看一個或兩個插座的情況下,epoll()應該表現得很像select()。當您觀看更多描述符時,epoll()應該按比例線性縮放,而select()縮放很差(&甚至可能對#/描述符有嚴格的限制)。所以這並不是說epoll()對一小部分描述符有一定的懲罰,但是在這種情況下,它的性能優勢超過select()

您可以更改代碼,以便您可以輕鬆地回去&來回兩個事件通知機制之間?獲取有關性能差異的更多數據。如果您確鑿發現select()具有更短的延遲&相同的吞吐量在您的情況,然後我只是切換回「老&棄用」 API毫不猶豫:)對我來說,這是相當確鑿的,如果你測量從這個特定代碼的性能差異更改。也許之前對epoll()select()的測試關注於吞吐量與個別請求的延遲?