青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

再說TCP神奇的40ms

轉載自:https://www.qcloud.com/community/article/186

TCP是一個復雜的協議,每個機制在帶來優勢的同時也會引入其他的問題。 Nagel算法和delay ack機制是減少發送端和接收端包量的兩個機制, 可以有效減少網絡包量,避免擁塞。但是,在特定場景下, Nagel算法要求網絡中只有一個未確認的包, 而delay ack機制需要等待更多的數據包, 再發送ACK回包, 導致發送和接收端等待對方發送數據, 造成死鎖, 只有當delay ack超時后才能解開死鎖,進而導致應用側對外的延時高。 其他文字已經介紹了相關的機制, 已經有一些文章介紹這種時延的場景。本文結合具體的tcpdump包,分析觸發delay ack的場景,相關的內核參數, 以及規避的方案。

背景

給redis加了一個proxy層, 壓測的時候發現, 對寫入命令,數據長度大于2k后, 性能下降非常明顯, 只有直連redis-server的1/10. 而get請求影響并不是那么明顯。

分析

觀察系統的負載和網絡包量情況, 都比較低, 網絡包量也比較小, proxy內部的耗時也比較短。 無賴只能祭出tcpdump神奇, 果然有妖邪。

22號tcp請求包, 42ms后服務端才返回了ack。 初步懷疑是網絡層的延時導致了耗時增加。Google和km上找資料, 大概的解釋是這樣: 由于客戶端打開了Nagel算法, 服務端未關閉延遲ack, 會導致延遲ack超時后,再發送ack,引起超時。

原理

Nagel算法,轉自維基百科

if there is new data to send if the window size >= MSS and available data is >= MSS send complete MSS segment now else if there is unconfirmed data still in the pipe enqueue data in the buffer until an acknowledge is received else send data immediately end if end if end if 

簡單講, Nagel算法的規則是:

  1. 如果發送內容大于1個MSS, 立即發送;
  2. 如果之前沒有包未被確認, 立即發送;
  3. 如果之前有包未被確認, 緩存發送內容;
  4. 如果收到ack, 立即發送緩存的內容。

延遲ACK的源碼如下:net/ipv4/tcp_input.c

基本原理是:

  1. 如果收到的數據內容大于一個MSS, 發送ACK;
  2. 如果收到了接收窗口以為的數據, 發送ACK;
  3. 如果處于quick mode, 發送ACK;
  4. 如果收到亂序的數據, 發送ACK;
  5. 其他, 延遲發送ACK

其他都比較明確, quick mode是怎么判斷的呢? 繼續往下看代碼:

影響quick mode的一個因素是 ping pong的狀態。 Pingpong是一個狀態值, 用來標識當前tcp交互的狀態, 以預測是否是W-R-W-R-W-R這種交互式的通訊模式, 如果處于, 可以用延遲ack, 利用Read的回包, 將Write的回包, 捎帶給發送方。

如上圖所示, 默認pingpong = 0, 表示非交互式的, 服務端收到數據后, 立即返回ACK, 當服務端有數據響應時,服務端將pingpong = 1, 以后的交互中, 服務端不會立即返回ack,而是等待有數據或者ACK超時后響應。

問題

按照前面的的原理分析,應該每次都有ACK延遲的,為什么我們測試小于2K的數據時, 性能并沒有受到影響呢?
繼續分析tcpdump包:

按照Nagel算法和延遲ACK機制, 上面的交互如下圖所示, 由于每次發生的數據都包含了完整的請求, 服務端處理完成后, 向客戶端返回命令響應時, 將請求的ACK捎帶給客戶端,節約一次網絡包。

再分析2K的場景:

如下表所示, 第22個包發送的數據小于MSS, 同時,pingpong = 1, 被認為是交互模式, 期待通過捎帶ACK的方式來減少網絡的包量。 但是, 服務端收到的數據,并不是一個完整的包,不能產生一次應答。服務端只能在等待40ms超時后,發送ACK響應包。
同時,從客戶端來看,如果在發送一個包, 也可以打破已收數據 > MSS的限制。 但是,客戶端受Nagel算法的限制, 一次只能有一個包未被確認,其他的數據只能被緩存起來, 等待發送。

觸發場景

一次tcp請求的數據, 不能在服務端產生一次響應,或者小于一個MSS

規避方案

只有同時客戶端打開Nagel算法, 服務端打開tcp_delay_ack才會導致前面的死鎖狀態。 解決方案可以從TCP的兩端來入手。

服務端:

  1. 關閉tcp_delay_ack, 這樣, 每個tcp請求包都會有一個ack及時響應, 不會出現延遲的情況。 操作方式:
    echo 1 > /proc/sys/net/ipv4/tcp_no_delay_ack
    但是, 每個tcp請求都返回一個ack包, 導致網絡包量的增加,關閉tcp延遲確認后, 網絡包量大概增加了80%,在高峰期影響還是比較明顯。
  2. 設置TCP_QUICKACK屬性。 但是需要每次recv后再設置一次。 對應我們的場景不太適合,需要修改服務端redis源碼。

客戶端:

  1. 關閉nagel算法,即設置socket tcp_no_delay屬性。
    static void _set_tcp_nodelay(int fd) { int enable = 1; setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void*)&enable, sizeof(enable)); } 
  2. 避免多次寫, 再讀取的場景, 合并成一個大包的寫;避免一次請求分成多個包發送, 最開始發送的包小于一個MSS,對我們的場景, 把第22號包的1424個字節緩存起來, 大于一個MSS的時候,再發送出去, 服務端立即返回響應, 客戶端繼續發送后續的數據, 完成交互,避免時延。

參考資料:
http://jerrypeng.me/2013/08/mythical-40ms-delay-and-tcp-nodelay/
http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201231214038740/
http://blog.chinaunix.net/uid-28387257-id-3658980.html
https://github.com/torvalds/linux/blob/master/net/ipv4/tcp_input.c

轉載請注明出處: 騰云閣 https://www.qcloud.com/community

posted on 2016-11-02 10:11 楊粼波 閱讀(923) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美中文在线视频| 欧美91大片| 加勒比av一区二区| 伊人精品成人久久综合软件| 国产欧美日韩| 国语精品中文字幕| 亚洲第一在线综合网站| 亚洲卡通欧美制服中文| 99在线|亚洲一区二区| 亚洲小说区图片区| 欧美一区二区在线免费观看| 久久久久久国产精品一区| 欧美国产成人精品| 一本一本久久| 欧美专区亚洲专区| 欧美精品久久99久久在免费线| 欧美日韩亚洲不卡| 国产真实乱偷精品视频免| 亚洲国产精品毛片| 亚洲欧美成人一区二区三区| 久久久99精品免费观看不卡| 亚洲国产乱码最新视频| 99re6这里只有精品视频在线观看| 亚洲欧洲在线一区| 午夜天堂精品久久久久| 欧美成人按摩| 国产无一区二区| 亚洲精品在线视频| 久久久久成人网| 亚洲免费观看高清在线观看 | 性欧美18~19sex高清播放| 久久精品亚洲一区二区| 亚洲精品国产精品乱码不99| 欧美与欧洲交xxxx免费观看| 欧美激情一区在线观看| 国内精品模特av私拍在线观看| 日韩午夜免费| 另类人畜视频在线| 亚洲免费一区二区| 欧美日韩三级一区二区| 亚洲电影av| 久久久精品欧美丰满| 国产乱码精品一区二区三区不卡| 久久大逼视频| 国产精品v日韩精品v欧美精品网站| 国产日韩欧美在线观看| 亚洲视频欧美在线| 亚洲国内精品在线| 久久尤物视频| 国模私拍一区二区三区| 欧美一区二区三区视频在线观看| 亚洲经典在线看| 免费在线观看精品| 在线日韩中文字幕| 久久亚洲高清| 久久精品国产亚洲精品| 国产欧美一二三区| 欧美在线视频导航| 亚洲欧洲av一区二区三区久久| 欧美三级网址| 亚洲在线免费观看| 亚洲一区二区成人| 国产女主播在线一区二区| 午夜精彩国产免费不卡不顿大片| 一级日韩一区在线观看| 国产精品久久网站| 欧美一区二区三区电影在线观看| 亚洲午夜视频在线观看| 国产精品女人网站| 久久国产精品黑丝| 久久久精品免费视频| 亚洲国产精品传媒在线观看 | 国产精品视频成人| 性娇小13――14欧美| 欧美在线视频日韩| 亚洲国产精品久久91精品| 亚洲激情在线观看| 国产精品扒开腿做爽爽爽视频| 亚洲欧美资源在线| 久久爱www久久做| 91久久夜色精品国产九色| 亚洲人线精品午夜| 国产伦精品一区二区三区照片91| 久久久精品国产99久久精品芒果| 久久男人资源视频| 亚洲视频观看| 久久精品日韩欧美| 99精品99| 欧美一区二区三区精品 | 亚洲欧美激情一区二区| 久久xxxx| 一本色道久久综合亚洲精品不卡 | 麻豆成人小视频| 欧美精品七区| 久久9热精品视频| 国产精品乱子久久久久| 亚洲少妇在线| 亚洲欧美在线免费观看| 亚洲国产一区二区精品专区| 日韩视频免费| 国语自产精品视频在线看一大j8| 亚洲国产精品成人综合| 国产精品xvideos88| 模特精品裸拍一区| 国产精品激情电影| 欧美电影资源| 国产精品一区免费在线观看| 亚洲成人在线网站| 亚洲激情专区| 国产日韩欧美黄色| 日韩一二三区视频| 一区二区亚洲精品国产| 国产精品99久久不卡二区| 亚洲国产另类久久精品| 亚洲欧美日本视频在线观看| 99精品热6080yy久久 | 亚洲激情在线| 在线欧美福利| 亚洲欧美日韩一区二区| 一区二区av在线| 欧美成人官网二区| 欧美成人伊人久久综合网| 国产日产欧美精品| 亚洲影音一区| 午夜久久久久久| 欧美性猛交xxxx乱大交退制版| 欧美 日韩 国产在线| 影音先锋日韩精品| 久久精品一区二区三区中文字幕| 欧美一区二区啪啪| 国产色综合网| 欧美一级日韩一级| 久久久99免费视频| 国产一区二区观看| 午夜影院日韩| 久久久久久久综合日本| 国产午夜一区二区三区| 欧美在线观看视频一区二区三区| 欧美一区精品| 国内免费精品永久在线视频| 午夜精品久久久久久久| 久久国内精品自在自线400部| 国产精品日韩欧美一区| 亚洲女人av| 欧美影片第一页| 国产一区二区日韩| 久久久xxx| 亚洲国产精品激情在线观看| 99热免费精品| 国产精品久久久久一区二区三区共| 中日韩男男gay无套| 欧美一区二区三区四区夜夜大片| 国产麻豆综合| 久久一区二区三区国产精品 | 一区二区三区日韩欧美精品| 亚洲五月六月| 国产欧美日韩视频在线观看| 亚洲欧洲精品一区二区| 欧美电影在线观看| 亚洲精品欧洲精品| 午夜精品视频在线观看| 国产午夜精品美女视频明星a级| 久久av最新网址| 亚洲二区视频在线| 亚洲主播在线| 一区二区在线不卡| 欧美三级黄美女| 欧美在线国产精品| 亚洲国产美女| 欧美在线一区二区| 亚洲人成亚洲人成在线观看图片 | 国产一区二区你懂的| 牛牛影视久久网| 中文在线一区| 美女日韩欧美| 亚洲综合不卡| 亚洲高清不卡一区| 国产精品美女久久久免费| 久热精品视频在线观看| 一区二区三区回区在观看免费视频| 久久激情视频久久| 99国产精品自拍| 亚洲国产精品成人综合| 国产精品一页| 欧美日韩精品久久久| 久久综合色播五月| 午夜精品美女久久久久av福利| 亚洲国产精品毛片| 久久一区二区三区四区| 午夜精品福利一区二区蜜股av| 在线看一区二区| 国产午夜精品全部视频播放| 欧美日韩中国免费专区在线看| 久久久久免费| 欧美一区二区三区日韩视频| 亚洲精品视频二区| 亚洲国产成人午夜在线一区| 麻豆成人综合网| 久久久久综合一区二区三区| 午夜精品av|