成人在线你懂的-成人在线免费小视频-成人在线免费网站-成人在线免费视频观看-日韩精品国产一区二区-日韩精品国产一区

掃一掃
關(guān)注微信公眾號(hào)

提高Linux系統(tǒng)性能加速網(wǎng)絡(luò)應(yīng)用程序 中
2007-02-28   中國(guó)IT實(shí)驗(yàn)室

技巧 3. 為 Bandwidth Delay Product 調(diào)節(jié) TCP 窗口

  TCP 的性能取決于幾個(gè)方面的因素。兩個(gè)最重要的因素是鏈接帶寬(link bandwidth)(報(bào)文在網(wǎng)絡(luò)上傳輸?shù)乃俾剩┖?往返時(shí)間(round-trip time) 或 RTT(發(fā)送報(bào)文與接收到另一端的響應(yīng)之間的延時(shí))。這兩個(gè)值確定了稱為 Bandwidth Delay Product(BDP)的內(nèi)容。

  給定鏈接帶寬和 RTT 之后,您就可以計(jì)算出 BDP 的值了,不過(guò)這代表什么意義呢?BDP 給出了一種簡(jiǎn)單的方法來(lái)計(jì)算理論上最優(yōu)的 TCP socket 緩沖區(qū)大小(其中保存了排隊(duì)等待傳輸和等待應(yīng)用程序接收的數(shù)據(jù))。如果緩沖區(qū)太小,那么 TCP 窗口就不能完全打開(kāi),這會(huì)對(duì)性能造成限制。如果緩沖區(qū)太大,那么寶貴的內(nèi)存資源就會(huì)造成浪費(fèi)。如果您設(shè)置的緩沖區(qū)大小正好合適,那么就可以完全利用可用的 帶寬。下面我們來(lái)看一個(gè)例子:BDP = link_bandwidth * RTT如果應(yīng)用程序是通過(guò)一個(gè) 100Mbps 的局域網(wǎng)進(jìn)行通信,其 RRT 為 50 ms,那么 BDP 就是:100MBps * 0.050 sec / 8 = 0.625MB = 625KB注意:此處除以 8 是將位轉(zhuǎn)換成通信使用的字節(jié)。

  因此,我們可以將 TCP 窗口設(shè)置為 BDP 或 1.25MB。但是在 Linux 2.6 上默認(rèn)的 TCP 窗口大小是 110KB,這會(huì)將連接的帶寬限制為 2.2MBps,計(jì)算方法如下:

    throughput = window_size / RTT

    110KB / 0.050 = 2.2MBps

    如果使用上面計(jì)算的窗口大小,我們得到的帶寬就是 12.5MBps,計(jì)算方法如下:

    625KB / 0.050 = 12.5MBps

  差別的確很大,并且可以為 socket 提供更大的吞吐量。因此現(xiàn)在您就知道如何為您的 socket 計(jì)算最優(yōu)的緩沖區(qū)大小了。但是又該如何來(lái)改變呢?

  解決方案

  Sockets API 提供了幾個(gè) socket 選項(xiàng),其中兩個(gè)可以用于修改 socket 的發(fā)送和接收緩沖區(qū)的大小。清單 2 展示了如何使用 SO_SNDBUF 和 SO_RCVBUF 選項(xiàng)來(lái)調(diào)整發(fā)送和接收緩沖區(qū)的大小。

  注意:盡管 socket 緩沖區(qū)的大小確定了通告 TCP 窗口的大小,但是 TCP 還在通告窗口內(nèi)維護(hù)了一個(gè)擁塞窗口。因此,由于這個(gè)擁塞窗口的存在,給定的 socket 可能永遠(yuǎn)都不會(huì)利用最大的通告窗口。

  int ret, sock, sock_buf_size; sock = socket( AF_INET, SOCK_STREAM, 0 ); sock_buf_size = BDP; ret = setsockopt( sock, SOL_SOCKET, SO_SNDBUF, (char *)&sock_buf_size, sizeof(sock_buf_size) ); ret = setsockopt( sock, SOL_SOCKET, SO_RCVBUF, (char *)&sock_buf_size, sizeof(sock_buf_size) );

  清單 2. 手動(dòng)設(shè)置發(fā)送和接收 socket 緩沖區(qū)大小

  在 Linux 2.6 內(nèi)核中,發(fā)送緩沖區(qū)的大小是由調(diào)用用戶來(lái)定義的,但是接收緩沖區(qū)會(huì)自動(dòng)加倍。您可以進(jìn)行 getsockopt 調(diào)用來(lái)驗(yàn)證每個(gè)緩沖區(qū)的大小。

  就 window scaling 來(lái)說(shuō),TCP 最初可以支持最大為 64KB 的窗口(使用 16 位的值來(lái)定義窗口的大小)。采用 window scaling(RFC 1323)擴(kuò)展之后,您就可以使用 32 位的值來(lái)表示窗口的大小了。GNU/Linux 中提供的 TCP/IP 棧可以支持這個(gè)選項(xiàng)(以及其他一些選項(xiàng))。

  提示:Linux 內(nèi)核還包括了自動(dòng)對(duì)這些 socket 緩沖區(qū)進(jìn)行優(yōu)化的能力(請(qǐng)參閱下面 表 1 中的 tcp_rmem 和 tcp_wmem),不過(guò)這些選項(xiàng)會(huì)對(duì)整個(gè)棧造成影響。如果您只需要為一個(gè)連接或一類連接調(diào)節(jié)窗口的大小,那么這種機(jī)制也許不能滿足您的需要了。

  技巧 4. 動(dòng)態(tài)優(yōu)化 GNU/Linux TCP/IP 棧

  標(biāo)準(zhǔn)的 GNU/Linux 發(fā)行版試圖對(duì)各種部署情況都進(jìn)行優(yōu)化。這意味著標(biāo)準(zhǔn)的發(fā)行版可能并沒(méi)有對(duì)您的環(huán)境進(jìn)行特殊的優(yōu)化。

  解決方案

  GNU/Linux 提供了很多可調(diào)節(jié)的內(nèi)核參數(shù),您可以使用這些參數(shù)為您自己的用途對(duì)操作系統(tǒng)進(jìn)行動(dòng)態(tài)配置。下面我們來(lái)了解一下影響 socket 性能的一些更重要的選項(xiàng)。

  在 /proc 虛擬文件系統(tǒng)中存在一些可調(diào)節(jié)的內(nèi)核參數(shù)。這個(gè)文件系統(tǒng)中的每個(gè)文件都表示一個(gè)或多個(gè)參數(shù),它們可以通過(guò) cat 工具進(jìn)行讀取,或使用 echo 命令進(jìn)行修改。清單 3 展示了如何查詢或啟用一個(gè)可調(diào)節(jié)的參數(shù)(在這種情況中,可以在 TCP/IP 棧中啟用 IP 轉(zhuǎn)發(fā))。

  [root@camus]# cat /proc/sys/net/ipv4/ip_forward 0 [root@camus]# echo "1" > /poc/sys/net/ipv4/ip_forward [root@camus]# cat /proc/sys/net/ipv4/ip_forward 1 [root@camus]#

  清單 3. 調(diào)優(yōu):在 TCP/IP 棧中啟用 IP 轉(zhuǎn)發(fā)

  與任何調(diào)優(yōu)努力一樣,最好的方法實(shí)際上就是不斷進(jìn)行實(shí)驗(yàn)。您的應(yīng)用程序的行為、處理器的速度以及可用內(nèi)存的多少都會(huì)影響到這些參數(shù)影響性能的方 式。在某些情況中,您認(rèn)為有益的操作可能恰恰是有害的(反之亦然)。因此,我們需要逐一試驗(yàn)各個(gè)選項(xiàng),然后檢查每個(gè)選項(xiàng)的結(jié)果。換而言之,我們需要相信自 己的經(jīng)驗(yàn),但是對(duì)每次修改都要進(jìn)行驗(yàn)證。

  提示:下面介紹一個(gè)有關(guān)永久性配置的問(wèn)題。注意,如果您重新啟動(dòng)了 GNU/Linux 系統(tǒng),那么您所需要的任何可調(diào)節(jié)的內(nèi)核參數(shù)都會(huì)恢復(fù)成默認(rèn)值。為了將您所設(shè)置的值作為這些參數(shù)的默認(rèn)值,可以使用 /etc/sysctl.conf 在系統(tǒng)啟動(dòng)時(shí)將這些參數(shù)配置成您所設(shè)置的值。

熱詞搜索:

上一篇:巧施妙手,排除IIS特殊管理困惑 下
下一篇:Linux操作系統(tǒng)中的七件超厲害的武器 上

分享到: 收藏
主站蜘蛛池模板: 亚洲电影在线观看| 抖音pc端| 少年赌圣| 无耻之徒豆瓣| 娟子个人资料 简历| 仁爱版九年级英语上册教案| 寡妇电影| 体现汉字的歇后语| 93夜之女| 飞龙猛将演员表| 2018年党课主题及内容| 杨幂的视频| 别,有人,会有人看见的| 《魔》| 《杨贵妃淫史》三级| 天气预报电影| 王心凌照片| 今天cctv6节目表| 姐妹7完整版| 姐妹五| 大国医 电视剧| 遥远的天熊山电影完整版在线观看| 青春无季演员表| 一级片黄色毛片| 廖凡演的电影| 凤凰卫视资讯台直播| 全家福演员表| 成毅壁纸| 王子奇个人资料| 一元二次方程计算题 | 屁屁视频| 牵着妈妈的手广场舞| 甄子琦短剧全部作品| 男人不可以穷演员表| 叶问3演员表| 抖音充值链接| 电影喜剧明星演员表| jamie dornan| 陈文娟| 食戟之灵第二季| 在线免费污视频|