日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cv::imread导致段错误_网络诊断举例LSO导致的网络性能问题

發布時間:2024/9/15 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cv::imread导致段错误_网络诊断举例LSO导致的网络性能问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
網絡問題導致的性能問題是十分難以診斷的,特別是因為網絡丟包而導致的性能問題,因為甚至你都看不到有任何錯誤產生。在這種案例下,通過netstat -s看到的統計數據中,TCP/UDP均沒有報錯。只是在一些地方看到了網卡存在包丟棄現象,比如:網絡包DRP的問題在NIC物理網卡和網卡驅動層之間發生的,存在dropped包的時候有可能你的網卡并沒有出現任何error,就像上面的那個例子一樣。為什么會這樣呢?借用一張美團的同行畫的圖來說明一下:

DRP最容易發生的位置就在這張圖上,當網絡包到達的時候,首先會在內存中分配sk_buffer(SKB),然后把SKB的句柄寫入RX ring buffer中(RX ring是一個環狀緩沖),然后告知NIC已經準備完畢,NIC可以向驅動發送網絡包了。第四步,NIC通過DMA FETCH描述信息到RX RING,然后接收新包,并把包通過DMA寫入SKB。在這個過程中如果出現RX RING寫不下,就會丟棄一些包,這種情況fifo的計數就會增加。這一點可以從/proc/net/dev文件中看到:如果確實存在這種情況,那么就說明網絡中斷處理網絡包的速度太慢,導致環狀緩沖溢出丟棄部分來不及處理的網絡包。這樣的情況我們就需要分析CPU資源是否足夠處理超大流量的網絡包,或者是不是存在網絡中斷調度不合理,無法充分使用服務器CPU資源(在部分網卡驅動與OS版本兼容性不足,或者OS存在這方面的BUG的時候可能會出現這種情況,如果遇到這種情況,那么打補丁,更新網卡驅動或者調整中斷相關參數等都可以解決問題)。不過我們并不是每次都能在這個文件中存在fifo計數器的數據,這種情況就更令人費解了。老白以前也遇到過類似問題,似乎問題在網絡上,也發現了網絡上大量的DRP包的計數,但是ERROR總是0,應用也沒報錯。直到有一次閱讀了Peer Wisdom的文章《Large Send Offload and Network Performance》,才恍然大悟。這篇文章對這種情況中給出了很好的答案。LSO是Large Segment Offload的簡稱,中文名稱叫大段卸載。當一個系統需要通過網絡發送一大段數據時,計算機需要將這段數據拆分為多個長度較短的數據,以便這些數據能夠通過網絡中所有的網絡設備(例如路由器、交換機),這個過程被稱作分段。通常,這個過程由計算機系統中的協議棧完成,而大段卸載技術將這一過程交給網卡處理,從而減少了CPU使用率。在CPU資源不足的時代,LSO能夠很好的緩解服務器CPU的網絡開銷過大問題,不過在現實的環境中,經常會出現由于LSO而導致的網絡性能下降問題。以下文字翻譯自Peer Wisdon的文章:要了解LSO為什么這會如此嚴重地影響網絡性能,讓我們遵循一條典型的大型TCP消息,它在兩個主機之間穿越網絡。
  • 啟用LSO后,服務器上的TCP / IP網絡堆棧將生成一條大型TCP消息;

  • 服務器將大型TCP消息發送到以太網適配器,并由其LSO引擎對網絡進行分段。因為LSO引擎無法發現交換機支持的MTU,所以它使用標準的默認值;

  • LSO引擎將組成大型TCP消息的每個幀段發送到交換機;

  • 交換機接收幀段,但是因為LSO發送的幀大于MTU,所以它們被默認為DRP;

  • 在等待接收TCP消息的服務器上,如果沒有收到數據,將會超時,并且它將發回重新發送數據的請求;

  • 發送服務器接收重傳請求并重建TCP消息。因為這是重傳請求,所以服務器不會將TCP消息發送到要分段的以太網適配器。相反,它會自行處理細分過程。這似乎是為了克服適配器上卸載硬件引起的故障而設計的;

  • 交換機從服務器接收適當大小的重傳幀,因為服務器能夠發現MTU,然后將其轉發到路由器;

  • 另一個服務器最終完整接收TCP消息。

基本上,這可以總結為卸載數據,分段傳輸數據,丟棄數據,等待超時,請求重傳,段重傳數據,重發數據。下次發送大型TCP消息時,將重復整個過程。因此,這是否會引起嚴重的網絡性能問題也就不足為奇了。從上面的論述可以看出LSO導致的DRP在應用層并不會出現錯誤,也不會體現為網絡真正的包錯誤,但是LSO導致的DRP還是有害的,被DRP的網絡包要等到對端超時重發,這樣會引起相關的網絡性能問題,特別是在高負載的網絡中,問題可能被放大。在一個復雜的網絡環境中,網絡設備數量眾多,MTU的設置也可能存在不同,網卡開啟LSO的缺點有兩種,一是在網絡負載較高的時候處理能力不足,從而導致網絡性能下降;第二種就是類似今天的案例,因為LSO導致DRP引起性能問題。因此我們需要根據實際情況來確定是否啟用LSO功能。我們可以通過tcpdump來驗證是否系統中存在一些大包:tcpdump -v -c 10 -ni enp26s0f0 -ttt greater 1532

從上面那個例子看,系統中也確實是存在一些大包的,于是我們可以嘗試用ethtool -K關閉LSO:

奇跡發生了,關閉LSO后,DRP的數字不再增加了。應用的性能也似乎好了不少。隨著云時代的到來,網絡問題可能會是運維人員遇到的比數據庫問題更為常見,并且更為棘手的問題。DBA們是不是也該學兩招網絡診斷的技巧了呢?

總結

以上是生活随笔為你收集整理的cv::imread导致段错误_网络诊断举例LSO导致的网络性能问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。