提高Linux系統效能加速網路應用程式(轉)
提高Linux系統效能加速網路應用程式(轉)[@more@] 在開發 socket 應用程式時,首要任務通常是確保可靠性並滿足一些特定的需求。利用本文中給出的 4 個提示,您就可以從頭開始為實現最佳效能來設計並開發 socket 程式。本文內容包括對於 Sockets API 的使用、兩個可以提高效能的 socket 選項以及 GNU/Linux 最佳化。
為了能夠開發效能卓越的應用程式,請遵循以下技巧:
最小化報文傳輸的延時。
最小化系統呼叫的負載。
為 Bandwidth Delay Product 調節 TCP 視窗。
動態最佳化 GNU/Linux TCP/IP 棧。
技巧 1. 最小化報文傳輸的延時
在透過 TCP socket 進行通訊時,資料都拆分成了資料塊,這樣它們就可以封裝到給定連線的 TCP payload(指 TCP 資料包中的有效負荷)中了。TCP payload 的大小取決於幾個因素(例如最大報文長度和路徑),但是這些因素在連線發起時都是已知的。為了達到最好的效能,我們的目標是使用盡可能多的可用資料來填充每個報文。當沒有足夠的資料來填充 payload 時(也稱為最大報文段長度(maximum segment size) 或 MSS),TCP 就會採用 Nagle 演算法自動將一些小的緩衝區連線到一個報文段中。這樣可以透過最小化所傳送的報文的數量來提高應用程式的效率,並減輕整體的網路擁塞問題。
儘管 John Nagle 的演算法可以透過將這些資料連線成更大的報文來最小化所傳送的報文的數量,但是有時您可能希望只傳送一些較小的報文。一個簡單的例子是 telnet 程式,它讓使用者可以與遠端系統進行互動,這通常都是透過一個 shell 來進行的。如果使用者被要求用傳送報文之前輸入的字元來填充某個報文段,那麼這種方法就絕對不能滿足我們的需要。
另外一個例子是 HTTP 協議。通常,客戶機瀏覽器會產生一個小請求(一條 HTTP 請求訊息),然後 Web 伺服器就會返回一個更大的響應(Web 頁面)。
解決方案
您應該考慮的第一件事情是 Nagle 演算法滿足一種需求。由於這種演算法對資料進行合併,試圖構成一個完整的 TCP 報文段,因此它會引入一些延時。但是這種演算法可以最小化線上路上傳送的報文的數量,因此可以最小化網路擁塞的問題。
但是在需要最小化傳輸延時的情況中,Sockets API 可以提供一種解決方案。要禁用 Nagle 演算法,您可以設定 TCP_NODELAY socket 選項,如清單 1 所示。
為了能夠開發效能卓越的應用程式,請遵循以下技巧:
最小化報文傳輸的延時。
最小化系統呼叫的負載。
為 Bandwidth Delay Product 調節 TCP 視窗。
動態最佳化 GNU/Linux TCP/IP 棧。
技巧 1. 最小化報文傳輸的延時
在透過 TCP socket 進行通訊時,資料都拆分成了資料塊,這樣它們就可以封裝到給定連線的 TCP payload(指 TCP 資料包中的有效負荷)中了。TCP payload 的大小取決於幾個因素(例如最大報文長度和路徑),但是這些因素在連線發起時都是已知的。為了達到最好的效能,我們的目標是使用盡可能多的可用資料來填充每個報文。當沒有足夠的資料來填充 payload 時(也稱為最大報文段長度(maximum segment size) 或 MSS),TCP 就會採用 Nagle 演算法自動將一些小的緩衝區連線到一個報文段中。這樣可以透過最小化所傳送的報文的數量來提高應用程式的效率,並減輕整體的網路擁塞問題。
儘管 John Nagle 的演算法可以透過將這些資料連線成更大的報文來最小化所傳送的報文的數量,但是有時您可能希望只傳送一些較小的報文。一個簡單的例子是 telnet 程式,它讓使用者可以與遠端系統進行互動,這通常都是透過一個 shell 來進行的。如果使用者被要求用傳送報文之前輸入的字元來填充某個報文段,那麼這種方法就絕對不能滿足我們的需要。
另外一個例子是 HTTP 協議。通常,客戶機瀏覽器會產生一個小請求(一條 HTTP 請求訊息),然後 Web 伺服器就會返回一個更大的響應(Web 頁面)。
解決方案
您應該考慮的第一件事情是 Nagle 演算法滿足一種需求。由於這種演算法對資料進行合併,試圖構成一個完整的 TCP 報文段,因此它會引入一些延時。但是這種演算法可以最小化線上路上傳送的報文的數量,因此可以最小化網路擁塞的問題。
但是在需要最小化傳輸延時的情況中,Sockets API 可以提供一種解決方案。要禁用 Nagle 演算法,您可以設定 TCP_NODELAY socket 選項,如清單 1 所示。
CODE:
int sock, flag, ret;
/* Create new stream socket */ sock = socket( AF_INET, SOCK_STREAM, 0 ); /* Disable the Nagle (TCP No Delay) algorithm */ flag = 1; ret = setsockopt( sock, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag) ); if (ret == -1) { printf("Couldn't setsockopt(TCP_NODELAY) "); exit(-1); } 來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-961260/,如需轉載,請註明出處,否則將追究法律責任。
請登入後發表評論
登入
全部評論
|
相關文章
- Linux作業系統網路應用解疑(轉)Linux作業系統
- 使用 libevent 和 libev 提高網路應用效能
- AIX系統網路效能分析(轉)AI
- Linux網路應用問答(轉)Linux
- Linux系統網路詳解(轉)Linux
- 提高Spring Data JPA應用程式的效能Spring
- 急速狂飈:提高Linux系統網速的方法(轉)Linux
- 怎麼提高網路應用效能?讓DPDK GRO和GSO來幫你!
- Linux系統應用程式和核心模組的區別(轉)Linux
- 提高 Linux 上 socket 效能(轉)Linux
- 提高Linux上socket效能(轉)Linux
- [轉載]使用非同步 I/O 大大提高應用程式的效能非同步
- IBM與Red Hat擴大合作 加速Linux應用程式(轉)IBMLinux
- 紅旗Linux作業系統加速(轉)Linux作業系統
- 使用 Traefik 提高 WebSocket 應用效能Web
- 在Linux作業系統上執行Windows應用程式(轉)Linux作業系統Windows
- LINUX系統效能調諧(轉)Linux
- 教你一招 提高Linux作業系統網速方法(轉)Linux作業系統
- Linux檔案系統的桌面應用(轉)Linux
- Linux網路的IPv6應用(2)(轉)Linux
- Linux網路的IPv6應用(1)(轉)Linux
- JavaScript 中的調節器:提高應用程式的效能JavaScript
- 透過交換機系統提高網路效率
- AIX使用非同步I/O(aio)提高系統效能(轉)AI非同步
- Linux作業系統檔案系統的桌面應用(轉)Linux作業系統
- 9 個提高系統執行速度的輕量級 Linux 應用Linux
- Solaris 網路應用配置(轉)
- linux系統備份方案--ghost網路篇(轉)Linux
- 【edobnet】利用.Net 執行緒池提高應用程式效能.執行緒
- ERP系統應用的鞏固與提高四原則(轉)
- 提高java程式效能之垃圾收集 (轉)Java
- 如何提高你的 React 應用的效能React
- 如何藉助 NoSQL 提高 JPA 應用效能SQL
- 榕基網路入侵檢測系統在電力行業的應用案例(轉)行業
- Linux核心網路引數的意義及應用(轉)Linux
- 在Linux系統下FTP的配置與應用(轉)LinuxFTP
- Linux系統下應用知識大薈萃(轉)Linux
- 改善網路視訊直播系統的效能和程式碼質量,應該怎麼做?