鵝的user在NFS client/server間接了台8port dumb switch,沒開jumbo frame等特異功能,可是在client上看到很多NFS server not responding,still trying,但server端loading其實不高,L2也沒看到啥error/dropped/overrun frame,倒是在client端看到不少duplicated ack/TCP window update,鵝發現NFS server端的Ethernet flow control是enabled的,請問一下是不是Ethernet的flow control去干擾到TCP/IP的flow control所至,那關掉Ethernet的flow control會有幫助嗎....
TCP window update 通常來自於: TCP 收到封包之後, 上層的 Application 沒有及時將資料從 RX Buffer 拿走, 導致 TCP 需要通知對方加大 TCP Window buffer, 以容納這個來不及拿走的封包.
duplicate ACK 則是來自於: 封包被 TCP 層收下之後, 因為 Checksum 錯誤被丟棄, 導致上層的 Application 沒有收到封包, 又下令重送一次, 所以會收到兩次同樣封包的 Ack.
至於 Flow control, 根據 Storage 廠商的建議, 使用 NFS 當儲存的時候, 最好是 Enable 的, 效能會比較好.
看起來 Switch 似乎嫌疑比較大, 有可能這台 Switch 的 chipset 來不及處理 packet, 造成封包遺失或是延遲的狀況. 請問這台 switch 的 backplane bandwidth 有到全部 port speed 加起來的 2 倍嗎?(8-port 1GbE = Backplane 需要有 16Gbps 的頻寬) 如果沒有的話, 掉封包的可能性很高.
不好意思,假設server來不及寫入storage,Ethernet flow control又是enabled時,server可能會送出pause frame給switch,但switch並不會送出pause frame給client(BTW,鵝確定client端的Ethernet flow control是disabled的),所以client並不知道L2已經處於congestion狀態了,又根據TCP的slow start,delay stop原則,client端在收到duplicated ack之前並不會減低發送速度,那此時會發生啥狀況啊....
下圖是兩套不同的系統,在早上約略相同時間把netstat的statics清空後,run到剛剛的統計....
雖然說不同的機器不應該放在一起比較(兩套NFS client/server都是標準的server,NIC都是Broadcom的server卡),您猜哪一個switch比較高檔啊(有一個不是dumb switch),又這樣的表現算及格嗎....
cmwang提到:
關掉Ethernet的flow control會有幫助嗎
會有幫助
參考:
When Flow Control is not a Good Thing
http://www.smallnetbuilder.com/lanwan/lanwan-features/30212-when-flow-control-is-not-a-good-thing
問題常見於幾乎所有非管理gigabit交換機(The problem is common to virtually all non-managed gigabit switches.)。
問題是由802.3x流量控制造成的(The problem is caused by 802.3x Flow Control. )。(at least in small networks)
解決方案 - 最好是升級全部網卡(Upgrade to all gigabit NICs - This is a good solution )。
鵝昨天把server的Ethernet flow control disable掉,client出現NFS server isn't responding,still retrying的次數就少很多了,就算出現也很快就recover回來,要再觀察還有沒有其他因素了....
PO文有講,有幾個選項來搞定:
• Disable Flow Control in the NICs
• Disable Flow Control at the switch
• Upgrade to all gigabit NICs
終極解決方案 - 換一個“智能”交換機(moving up to a "smart" switch - managed gigabit switch )