我們有一組服務器應用程序,它們從設備/工具接收測量數據。信息傳遞時間是目前我們的主要瓶頸,所以我們有興趣減少它以改進過程。工具和服務器應用程序之間的通信是通過在Redhat Linux上使用C++編寫的TCP/IP套接字來實現的。減少高容量Intranet應用程序通信中的網絡延遲
是否可以通過更改TCP/IP配置設置或調整tcp內核函數來減少使用硬件的消息傳輸時間? (因爲通信是在一個安全的內聯網上,我們可以犧牲安全性來提高速度)
我們有一組服務器應用程序,它們從設備/工具接收測量數據。信息傳遞時間是目前我們的主要瓶頸,所以我們有興趣減少它以改進過程。工具和服務器應用程序之間的通信是通過在Redhat Linux上使用C++編寫的TCP/IP套接字來實現的。減少高容量Intranet應用程序通信中的網絡延遲
是否可以通過更改TCP/IP配置設置或調整tcp內核函數來減少使用硬件的消息傳輸時間? (因爲通信是在一個安全的內聯網上,我們可以犧牲安全性來提高速度)
如果可以的話,減少延遲的明顯步驟是從TCP切換到UDP。
根據工作負載的不同,在套接字連接上禁用Nagle's Algorithm可以提供很多幫助。
當處理大量的小消息時,我發現這產生了巨大的差異。
從內存中,我相信C++套接字選項被稱爲TCP_NODELAY
Nagle的算法是TCP的重要組成部分,默認情況下通過語言禁用它是完全令人憤慨的。你不記得哪種語言這樣做?但在這種特殊情況下,TCP_NODELAY將完成這項工作,所以+1 – 2011-03-28 23:26:59
@Andy我認爲這是PHP,但我剛回來審查一年前我正在使用的原型代碼,發現該選項正在被我正在使用的第三方課程關閉 - 當時沒有選擇,因爲那時我開始調查爲什麼我的C++套接字比PHP的要慢:) – 2011-03-29 00:09:26
在硬件方面嘗試Intel Server NICs並確保TCP offload Engine(TOE)被啓用。
還有一個重要的決定是在等待時間和goodput之間做出的,如果你希望以犧牲正常運行爲代價獲得更好的延遲,可以考慮減少中斷合併週期。有關詳細信息,請參閱英特爾文檔,因爲它們提供了許多可配置的參數。
實際上可以使性能更糟,因爲TCP經常加速比UDP多。與是否需要可靠性密切相關。 – 2011-03-28 03:57:01
我們可以減少2-3%的數據,因爲它是一個測量數據。 RTP(實時協議)是否也可以使用? – paseena 2011-03-28 05:34:11
@ Steve-o:有關此加速度的任何信息?我無法想象這將如何完成,因爲TCP主要是(忽略次要的東西)對UDP的重量級包裝。 @fruit_trader:關於單獨回答中的RTP – 2011-03-28 20:12:22