cv::imread导致段错误_网络诊断举例LSO导致的网络性能问题
生活随笔
收集整理的這篇文章主要介紹了
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消息。
總結
以上是生活随笔為你收集整理的cv::imread导致段错误_网络诊断举例LSO导致的网络性能问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云联会企业认证_今日新鲜事:沉浸式交互购
- 下一篇: camunda 流程执行追踪_九思OA项