其行爲如下:例如一個帶200個插座的服務器工人每秒處理100K個回波。在同一端口上啓動另一個服務器工作人員(具有相同數量的套接字或每個工作人員少兩倍,這並不重要),立即將第一個工作人員的性能降低到大約50%,並略微提高每臺計算機的整體性能(每個工作人員服務每秒大約5萬回波)。Windows網絡IOCP在多個核心上的可伸縮性
因此,6核心機器的性能與1核心機器的性能大致相同。
我試過不同的方法,例如,每個工作者有一個獨立的IOCP端口(在CreateIoCompletionPort中指定NumberOfConcurrentThreads爲1),或者爲所有工作者嘗試一個共享IOCP端口(NumberOfConcurrentThreads等於工作人員數),則性能相同。我的工作人員共享零數據,所以沒有鎖等。
我希望我缺少一些東西,而不是Windows內核網絡可伸縮性問題。 我正在使用Windows 7 Enterprise x64。
當然,期望是大致線性縮放性能。
有人知道IOCP在一臺機器上的多核心的實際可伸縮性嗎? 當活動套接字的數量增加時,會出現什麼情況?
謝謝!
感謝您的回覆。既然你正在處理你的項目,你能否提供一些關於你的框架如何在一臺機器上的核心/工作者數量之間進行擴展的數字?並在插座數量?非常感謝你。 – 2012-04-11 08:43:43
我沒有這方面的數字。我們通常只進行性能測試來比較一個版本與另一個版本以及針對客戶的特定自定義服務器開發。 – 2012-04-11 12:00:30