基于Linux的Socket網(wǎng)絡(luò)編程的性能優(yōu)化
4.3 為Bandwidth Delay Product調(diào)節(jié)TCP窗口
TCP的性能取決于幾方面因素,最重要的是鏈接帶寬(link bandwidth)(報文在網(wǎng)絡(luò)上傳輸?shù)乃俾?和往返時間(round-trip time)或RTT(發(fā)送報文與接收到另一端的響應(yīng)之間的延時)。這兩個值確定稱為BDP(Bandwidth Delay Prod-uct)的內(nèi)容。BDP給出一種簡單的方法計算理論上最優(yōu)的TCP Socket緩沖區(qū)大小(其中保存排隊等待傳輸和等待應(yīng)用程序接收的數(shù)據(jù))。緩沖區(qū)太小,TCP窗口就不能完全打開,這會限制性能;緩沖區(qū)太大,則會浪費寶貴的內(nèi)存資源;設(shè)置的緩沖區(qū)大小合適,就可完全利用可用帶寬。
BDP計算公式:
BDP=link bandwidth×RTT
若應(yīng)用程序通過一個100MB/s的局域網(wǎng)通信,其RRT為500ms,則BDP為:50MB/sx0.050/ 8625M=625KB。Linux2.6默認(rèn)的TCP窗口大小是110KB,這將連接的帶寬限制為22M/S,計算方法如下:
throughput=window_size/RTT
110 KB/0.050=2.2 MB/s
使用上面計算的窗口大小,得到帶寬為12.5 MB/s,即:
625 KB/0 050=12.5 MB/s
差別很大,并且可以為Socket提供更大的吞吐量。可以根據(jù)自己的Socket計算最優(yōu)的緩沖區(qū)大小。Socket提供幾個Socket選項,其中兩個可以用于修改Socket的發(fā)送和接收緩沖區(qū)的大小。使用SO_SNDBUF和SO_RCVBUF選項來調(diào)整發(fā)送和接收緩沖區(qū)的大小。本文引用地址:http://butianyuan.cn/article/157808.htm
在Linux 2.6內(nèi)核中.發(fā)送緩沖區(qū)的大小由調(diào)用用戶定義,而接收緩沖區(qū)會自動加倍。通過計算合理設(shè)置緩沖區(qū)的大小,Socket網(wǎng)絡(luò)傳輸帶寬的資源將得到充分利用,從而提高了傳輸性能。
5 結(jié)束語
設(shè)計和實現(xiàn)一個基于Linux的Socket網(wǎng)絡(luò)編程,通過在服務(wù)器端運行預(yù)先編譯的可執(zhí)行文件serv,和在客戶端運行預(yù)先編譯的可執(zhí)行文件clt,服務(wù)器端和客戶端建立通信連接。加入select()函數(shù)以后,服務(wù)器端可以允許多個客戶端接入服務(wù)器端,解決了I/O多路復(fù)用問題,更加接近實際應(yīng)用。利用TCP socket禁用Nagle算法實現(xiàn)了最小化報文傳輸?shù)难訒r,提高了Socket的性能。在網(wǎng)絡(luò)帶寬非常珍貴的現(xiàn)實中。提出了為Bandwidth Delay Product調(diào)節(jié)TCP窗口,修改socket的發(fā)送和接收緩沖區(qū)的大小,完全利用可用的帶寬。達(dá)到較好的網(wǎng)絡(luò)傳輸效果。實際網(wǎng)絡(luò)傳輸環(huán)境復(fù)雜多變,如何達(dá)到最理想的網(wǎng)絡(luò)傳輸,還需進(jìn)一步的分析和研究。
p2p機(jī)相關(guān)文章:p2p原理
評論