自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

提高 Linux上socket 性能的技巧 最小化報(bào)文傳輸延時(shí)

運(yùn)維 系統(tǒng)運(yùn)維
如何提高Linux上socket的性能,從而加速網(wǎng)絡(luò)應(yīng)用程序,你可以通過使用API來開發(fā)客戶機(jī)和服務(wù)器之間的應(yīng)用程序。本文分節(jié)介紹了Linux上提高socket性能的技巧。

  本文內(nèi)容包括Linux下對(duì)于 Sockets API 的使用、兩個(gè)可以提高性能的 socket 選項(xiàng)以及 GNU/Linux 優(yōu)化。為了能夠開發(fā)性能卓越的應(yīng)用程序,請(qǐng)遵循以下技巧:最小化報(bào)文傳輸?shù)难訒r(shí);最小化系統(tǒng)調(diào)用的負(fù)載;為 Bandwidth Delay Product 調(diào)節(jié) TCP 窗口;動(dòng)態(tài)優(yōu)化 GNU/Linux TCP/IP 棧。

最小化報(bào)文傳輸?shù)难訒r(shí):

  在通過 TCP socket 進(jìn)行通信時(shí),數(shù)據(jù)都拆分成了數(shù)據(jù)塊,這樣它們就可以封裝到給定連接的 TCP payload(指 TCP 數(shù)據(jù)包中的有效負(fù)荷)中了。TCP payload 的大小取決于幾個(gè)因素(例如***報(bào)文長(zhǎng)度和路徑),但是這些因素在連接發(fā)起時(shí)都是已知的。為了達(dá)到***的性能,我們的目標(biāo)是使用盡可能多的可用數(shù)據(jù)來填充每個(gè)報(bào)文。當(dāng)沒有足夠的數(shù)據(jù)來填充 payload 時(shí)(也稱為***報(bào)文段長(zhǎng)度(maximum segment size) 或 MSS),TCP 就會(huì)采用 Nagle 算法自動(dòng)將一些小的緩沖區(qū)連接到一個(gè)報(bào)文段中。這樣可以通過最小化所發(fā)送的報(bào)文的數(shù)量來提高應(yīng)用程序的效率,并減輕整體的網(wǎng)絡(luò)擁塞問題。

  盡管 John Nagle 的算法可以通過將這些數(shù)據(jù)連接成更大的報(bào)文來最小化所發(fā)送的報(bào)文的數(shù)量,但是有時(shí)您可能希望只發(fā)送一些較小的報(bào)文。一個(gè)簡(jiǎn)單的例子是 telnet 程序,它讓用戶可以與遠(yuǎn)程系統(tǒng)進(jìn)行交互,這通常都是通過一個(gè) shell 來進(jìn)行的。如果用戶被要求用發(fā)送報(bào)文之前輸入的字符來填充某個(gè)報(bào)文段,那么這種方法就絕對(duì)不能滿足我們的需要。

  另外一個(gè)例子是 HTTP 協(xié)議。通常,客戶機(jī)瀏覽器會(huì)產(chǎn)生一個(gè)小請(qǐng)求(一條 HTTP 請(qǐng)求消息),然后 Web 服務(wù)器就會(huì)返回一個(gè)更大的響應(yīng)(Web 頁面)。

  解決方案

  您應(yīng)該考慮的***件事情是 Nagle 算法滿足一種需求。由于這種算法對(duì)數(shù)據(jù)進(jìn)行合并,試圖構(gòu)成一個(gè)完整的 TCP 報(bào)文段,因此它會(huì)引入一些延時(shí)。但是這種算法可以最小化在線路上發(fā)送的報(bào)文的數(shù)量,因此可以最小化網(wǎng)絡(luò)擁塞的問題。

  但是在需要最小化傳輸延時(shí)的情況中,Sockets API 可以提供一種解決方案。要禁用 Nagle 算法,您可以設(shè)置 TCP_NODELAY socket 選項(xiàng),如清單 1 所示。

  清單 1. 為 TCP socket 禁用 Nagle 算法

  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)\n");

  exit(-1);

  }

  提示:使用 Samba 的實(shí)驗(yàn)表明,在從 Microsoft Windows 服務(wù)器上的 Samba 驅(qū)動(dòng)器上讀取數(shù)據(jù)時(shí),禁用 Nagle 算法幾乎可以加倍提高讀性能。使用 Sockets API,我們可以開發(fā)客戶機(jī)和服務(wù)器應(yīng)用程序,它們可以在本地網(wǎng)絡(luò)上進(jìn)行通信,也可以通過 Internet 在全球范圍內(nèi)進(jìn)行通信。與其他 API 一樣,您可以通過一些方法使用 Sockets API,從而提高 Socket 性能,或者限制 Socket 的性能。

【編輯推薦】

  1. 2.1.3 Socket服務(wù)器
  2. TCP Socket之linux實(shí)現(xiàn)
  3. Linux操作系統(tǒng)下Socket編程地址結(jié)構(gòu)介紹
  4. 16.5.4 socket編程實(shí)例(2)
  5. 16.5.4 socket編程實(shí)例(1)

 

責(zé)任編輯:zhaolei 來源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2011-01-18 11:37:59

Linuxsocket性能

2011-01-18 13:42:18

Linuxsocket性能

2011-01-18 11:50:51

Linuxsocket性能

2021-04-13 16:00:54

加密貨幣數(shù)據(jù)貨幣

2009-08-14 10:35:25

C#最小化編寫

2009-07-02 17:59:51

2013-05-31 09:26:11

云宕機(jī)SLA云應(yīng)用彈性

2009-12-23 17:07:37

WPF性能

2015-09-18 09:23:34

云APIAPI升級(jí)云服務(wù)中斷

2017-11-06 13:25:25

MySQL數(shù)據(jù)庫技巧

2022-06-01 08:00:00

開發(fā)成本功能

2011-01-19 14:40:45

Thunderbird

2015-10-29 10:09:57

混合云影子IT SaaS

2023-04-03 10:20:16

JavaScript前端Alpine.js

2017-02-08 15:13:57

2011-03-07 10:12:02

GNOME SHELL

2010-03-19 16:38:29

Java Socket

2009-06-17 10:13:03

提高EJB性能

2024-10-25 15:48:21

GPUPyTorch編程

2021-07-16 20:41:24

CentOSRHELRocky Linux
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)