Linux

有沒有辦法在例如 eth0 或 tun 設備上獲取目前的 txqueue 使用率?

  • October 23, 2020

我在我的tun0界面上檢測到掉線。

它們似乎是由低txqueuelen設置引起的。現在,隨著我增加txqueuelen網路設備的值並且沒有更多的下降 - 我想知道有沒有辦法獲得網路設備緩衝區的實際目前使用情況?

嘗試使用tc檢查:

# tc -s qdisc show dev tun0
qdisc mq 0: root 
Sent 889257959003266 bytes 478800964 pkt (dropped 162977296, overlimits 0 requeues 1784154649) 
backlog 0b 0p requeues 1784154649 

重要的部分是backlog 0b 0p告訴您 TX 隊列的填充量(以數據包和字節為單位)。

Tc 使用netlink介面從核心獲取此資訊。

對於 TCP 緩衝區,您可以使用

      netstat -nt 

並查找接收和發送緩衝區的第二列和第三列(Recv-Q,Send-Q)

對於 UDP

      netstat -nua

同樣的方式你可以查看 /proc/net/{tcp,udp} 並尋找 tx_queue & rx_queue

同樣的方式你可以使用

         ethtool -S <nic card name>  (driver need to support)


               NIC statistics:
               rx_packets: 445
               tx_packets: 48
               rx_bytes: 56015
               tx_bytes: 5938
               rx_broadcast: 336
               tx_broadcast: 2
               rx_multicast: 89
               tx_multicast: 28
               rx_errors: 0
               tx_errors: 0
               tx_dropped: 0

還只想添加一個預設啟用的網路參數“tcp_moderate_rcvbuf”,執行接收緩衝區自動調整。根據核心文件

    If set, TCP performs receive buffer auto-tuning, attempting to
    automatically size the buffer (no greater than tcp_rmem[2]) to
    match the size required by the path for full throughput

引用自:https://serverfault.com/questions/623377