Есть ли способ получить текущее использование txqueue, например, на устройстве eth0 или tun?
Я обнаружил капли на моем tun0
интерфейс.
Они, кажется, были вызваны низким txqueuelen
установка. Теперь, когда я увеличил txqueuelen
значение для сетевого устройства и больше нет падений - мне интересно, есть ли способ получить текущее текущее использование буфера сетевого устройства?
1 ответ
Для TCP Buffer вы можете использовать
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", который включен по умолчанию, выполняет автонастройку приемного буфера. Согласно kernel-doc
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
Попробуйте проверить с помощью 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.