鵝有user反映mail server連不到後端的Exchange,連過去一看小封包是Ok的,但大封包會看到一坨Ethernet frame check sequence incorrect(L2都過不了了,那L3/L4不work也是天經地義的)....
鵝直覺的反應是把NIC(BCM5719)的offloading關掉,關掉後狀況的確是消失了(未使用到的bge1 RXCSUM/TXCSUM/TSO4 default是on的,bge0的RXCSUM/TXCSUM/TSO4是被鵝關掉的)....
可是仔細一想,現代的Ethernet MAC/switch在遇到bad frame時應該會直接drop掉才對(i.e. Wireshark理論上是看不到L2的bad frame的),那為啥鵝會看到那些Ethernet frame check sequence incorrect,而且offloading關掉之後,問題也消失了(誤打誤撞??)
後來鵝試著在lab重建現場,最方便而且還算精確的方式是在ESXi上透過DirectPath I/O讓VM直接控制Ethernet MAC,然後產生大量traffic,看能不能重現一樣的狀況,如果看到一樣的狀況就推測是OS/driver相容性之類的問題,沒有的話就是user site的問題,建了兩個Linux VM測了半天,傳了上TB的garbage,就是沒看到一樣的狀況,問題是鵝家的產品是based on BSD的,BSD VM卻無法透過DirectPath I/O直接控制NIC(VM的kernel boot起來時有看到BCM5719,但要initial PHY時失敗,所以不work),換插另一張I社的I340-T4時Linux和BSD就都可以work,不過這樣就失去重建現場的意義了,請問一下有邦友搞過類似的lab嗎....
只是連不到 Server, 竟然挖出 Offload 缺陷, 請受小弟一拜...
好說好說,因為不想辦法排除狀況就會有接不完的電話,而且以BCM5719這麼常見的Ethernet MAC而言,不想辦法排除相容性的問題的話,接下來就等著有擦不完的屁股了....
剛在Mobile01有網友提供了一點看法,鵝順便轉貼一下了,那些Ethernet frame check sequence incorrect看來是本機發出的封包(48.53->48.169),不是收到的封包,而且鵝確定Wireshark中Validate Ethernet checksum if possible是enable的(不然不會顯示那些錯誤),就算driver層有bug造成TSO/TXCSUM不work,MAC層產生的Ethernet checksum通常還是對的,而不會有看到checksum error的機會(libpcap capture的點不同的話,是有可能看到checksum還是0x0的封包,但在此checksum是已經填了,只是填錯了),不過事隔這一段期間,鵝已經從那個職位畢業了,所以也看不到現場了....