簡體   English   中英

Linux 網絡堆棧何時丟棄接收到的 RTP 數據包?

[英]When does the Linux network stack drop received RTP packets?

我正在調試接收 RTP 的 C++ 程序的丟包問題。 在我的程序運行很長時間接收大量 RTP 數據后,它開始丟失數據包。

使用 Wireshark 進行跟蹤顯示丟失的數據包,但我的應用程序從未收到它們。 網絡堆棧似乎在將它們交付給應用程序之前丟棄它們。 重新啟動我的應用程序后,一切都恢復正常。

為了產生錯誤條件,我使用 RTP 使機器過載,並且當時發生了數據包丟失並且有充分的理由。 但即使在我停止過載並開始以中等速率發送后,數據包丟失仍然發生,我必須重新啟動我的應用程序以再次接收所有數據。

這是 Linux 接收緩沖區處理的問題嗎? 我可以檢查哪些 Linux 統計信息來查看丟失的數據包去哪兒了?

您使用 UDP 輸入的速度不夠快。 以下是一些通常可以采取的措施來緩解這種情況:

  • 如果您的內核支持它以減少系統調用開銷,請切換到recvmmsg(2)
  • 預先分配輸入處理期間使用的所有內存,
  • 分析您的應用程序,找到熱點並進行優化,
  • 或許可以將處理分攤到單獨的線程中,但要保持鎖的范圍盡可能小,
  • 增加您的套接字接收緩沖區setsockopt(2) ),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM