成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

提高 Linux上socket 性能的技巧 為 Bandwidth Delay Product 調節 TCP 窗口

運維 系統運維
如何提高Linux上socket的性能,從而加速網絡應用程序,你可以通過使用API來開發客戶機和服務器之間的應用程序。本文分節介紹了Linux上提高socket性能的技巧。

  本文內容包括Linux下對于 Sockets API 的使用、兩個可以提高性能的 socket 選項以及 GNU/Linux 優化。為了能夠開發性能卓越的應用程序,請遵循以下技巧:最小化報文傳輸的延時;最小化系統調用的負載;為 Bandwidth Delay Product 調節 TCP 窗口;動態優化 GNU/Linux TCP/IP 棧。

  為 Bandwidth Delay Product 調節 TCP 窗口:

  TCP 的性能取決于幾個方面的因素。兩個最重要的因素是鏈接帶寬(link bandwidth)(報文在網絡上傳輸的速率)和 往返時間(round-trip time) 或 RTT(發送報文與接收到另一端的響應之間的延時)。這兩個值確定了稱為 Bandwidth Delay Product(BDP)的內容。

  給定鏈接帶寬和 RTT 之后,您就可以計算出 BDP 的值了,不過這代表什么意義呢?BDP 給出了一種簡單的方法來計算理論上最優的 TCP socket 緩沖區大小(其中保存了排隊等待傳輸和等待應用程序接收的數據)。如果緩沖區太小,那么 TCP 窗口就不能完全打開,這會對性能造成限制。如果緩沖區太大,那么寶貴的內存資源就會造成浪費。如果您設置的緩沖區大小正好合適,那么就可以完全利用可用的帶寬。下面我們來看一個例子:

  BDP = link_bandwidth * RTT

  如果應用程序是通過一個 100Mbps 的局域網進行通信,其 RRT 為 50 ms,那么 BDP 就是:

  100MBps * 0.050 sec / 8 = 0.625MB = 625KB

  注意:此處除以 8 是將位轉換成通信使用的字節。

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

  throughput = window_size / RTT

  110KB / 0.050 = 2.2MBps

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

  625KB / 0.050 = 12.5MBps

  差別的確很大,并且可以為 socket 提供更大的吞吐量。因此現在您就知道如何為您的 socket 計算最優的緩沖區大小了。但是又該如何來改變呢?

  解決方案

  Sockets API 提供了幾個 socket 選項,其中兩個可以用于修改 socket 的發送和接收緩沖區的大小。清單 2 展示了如何使用 SO_SNDBUF 和 SO_RCVBUF 選項來調整發送和接收緩沖區的大小。

  注意:盡管 socket 緩沖區的大小確定了通告 TCP 窗口的大小,但是 TCP 還在通告窗口內維護了一個擁塞窗口。因此,由于這個擁塞窗口的存在,給定的 socket 可能永遠都不會利用最大的通告窗口。

  清單 2. 手動設置發送和接收 socket 緩沖區大小

  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) );

  在 Linux 2.6 內核中,發送緩沖區的大小是由調用用戶來定義的,但是接收緩沖區會自動加倍。您可以進行 getsockopt 調用來驗證每個緩沖區的大小。

  巨幀(jumbo frame)

  我們還可以考慮將包的大小從 1,500 字節修改為 9,000 字節(稱為巨幀)。在本地網絡中可以通過設置最大傳輸單元(Maximum Transmit Unit,MTU)來設置巨幀,這可以極大地提高性能。

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

  提示:Linux 內核還包括了自動對這些 socket 緩沖區進行優化的能力(請參閱下面 表 1 中的 tcp_rmem 和 tcp_wmem),不過這些選項會對整個棧造成影響。如果您只需要為一個連接或一類連接調節窗口的大小,那么這種機制也許不能滿足您的需要了。

  使用 Sockets API,我們可以開發客戶機和服務器應用程序,它們可以在本地網絡上進行通信,也可以通過 Internet 在全球范圍內進行通信。與其他 API 一樣,您可以通過一些方法使用 Sockets API,從而提高 Socket 性能,或者限制 Socket 的性能。

【編輯推薦】

  1. 2.1.3 Socket服務器
  2. TCP Socket之linux實現
  3. Linux操作系統下Socket編程地址結構介紹
  4. 16.5.4 socket編程實例(2)
  5. 16.5.4 socket編程實例(1)

 

責任編輯:zhaolei 來源: 網絡轉載
相關推薦

2011-01-18 13:42:18

Linuxsocket性能

2011-01-18 11:37:59

Linuxsocket性能

2011-01-18 10:35:02

Linuxsocket性能

2009-12-23 17:07:37

WPF性能

2017-11-06 13:25:25

MySQL數據庫技巧

2010-01-21 11:19:44

TCP Socketlinux

2013-05-15 22:30:49

DebianDebian LinuUbuntu

2021-06-10 09:52:33

LinuxTCPAccept

2020-10-10 07:00:16

LinuxSocketTCP

2009-06-17 10:13:03

提高EJB性能

2022-01-09 23:06:39

JavaScript

2023-02-21 14:55:40

React開發技巧

2024-10-25 15:48:21

GPUPyTorch編程

2011-01-13 09:44:19

Linuxsudo技巧

2021-03-18 07:52:42

代碼性能技巧開發

2013-01-08 16:05:23

Android開發布局ViewStub

2017-02-05 17:33:59

前端優化Web性能

2020-09-23 09:20:58

代碼Java字符串

2021-05-12 09:00:00

WebReactJavaScript

2015-05-28 10:34:16

TCPsocket
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91成人小视频 | 久久久久久99 | av在线一区二区三区 | 久久91 | 久久高清| 欧美中文字幕在线观看 | 81精品国产乱码久久久久久 | 精品乱人伦一区二区三区 | av黄色免费在线观看 | 亚洲永久字幕 | 亚洲天堂中文字幕 | 成人精品一区二区三区 | 亚洲一区二区视频 | 久久国产精品一区二区三区 | 国产精品日韩欧美一区二区 | 一级a爱片久久毛片 | 亚洲码欧美码一区二区三区 | hdfreexxxx中国妞 | a级毛片基地 | 国产在线永久免费 | www国产成人免费观看视频,深夜成人网 | 欧美日韩国产在线 | 亚洲精品久久久一区二区三区 | 欧美日韩精品在线免费观看 | 99精品久久| 亚洲激情在线观看 | 欧美成人一区二免费视频软件 | 九九热精品视频在线观看 | 亚洲图片视频一区 | 久久夜视频 | 久久综合一区 | 欧美激情 一区 | 国产丝袜一区二区三区免费视频 | 亚洲精品日韩视频 | 6080亚洲精品一区二区 | www.黄色网 | 九九热这里 | 久久大陆 | 久久久国产一区 | 久久三区 | 毛片一级片 |