Я установил VPN с защитой проводов между двумя узлами. При высокой нагрузке у меня возникают пики отбрасывания отдельных пакетов по 50-1500 пакетов каждый (см. Outbound drops wg0 ). Это происходит только на одном сервере.
# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eno1 1500 2079788141 0 0 1572 3128566305 0 0 0 BMRU
wg0 1420 538066564 46 0 0 810751810 0 26374 0 OPRU
...
# ip a s eno1
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether ab:cd:ef:fe:dc:ba brd ff:ff:ff:ff:ff:ff
...
# ip a s wg0
83: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
...
...
Я использовал dropwatch и perf record , чтобы выяснить, почему ядро отбрасывает эти пакеты.
perf:
kworker/2:2-wg- 32301 [002] 541917.031566: skb:kfree_skb: skbaddr=0xffff9f378059d000 protocol=2048 location=0xffffffffaf
ffffffffaf3fb324 kfree_skb+0x74 ([kernel.kallsyms])
ffffffffaf3fb324 kfree_skb+0x74 ([kernel.kallsyms])
ffffffffaf3fb363 kfree_skb_list+0x13 ([kernel.kallsyms])
ffffffffaf412778 __dev_queue_xmit+0x888 ([kernel.kallsyms])
ffffffffaf489c6f ip_finish_output2+0x2cf ([kernel.kallsyms])
ffffffffaf48b8d9 ip_output+0x69 ([kernel.kallsyms])
ffffffffaf4dcb7d iptunnel_xmit+0x15d ([kernel.kallsyms])
ffffffffc10a3777 send4+0x127 ([kernel.kallsyms])
ffffffffc10a3e15 wg_socket_send_skb_to_peer+0x95 ([kernel.kallsyms])
ffffffffc10a110f wg_packet_tx_worker+0xaf ([kernel.kallsyms])
ffffffffaeea15b7 process_one_work+0x1a7 ([kernel.kallsyms])
ffffffffaeea1c80 worker_thread+0x30 ([kernel.kallsyms])
ffffffffaeea6f02 kthread+0x112 ([kernel.kallsyms])
ffffffffaf600215 ret_from_fork+0x35 ([kernel.kallsyms])
dropwatch:
[2019-12-08 16:29:36.293087] 82 drops at kfree_skb_list+13 (0xffffffffaf3fb363)
Я посмотрел исходный код ядра и у меня есть несколько вопросов
kfree_skb_list
в этом контексте ?