![패킷이 삭제되는 이유(kfree_skb)](https://linux55.com/image/205513/%ED%8C%A8%ED%82%B7%EC%9D%B4%20%EC%82%AD%EC%A0%9C%EB%90%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0(kfree_skb).png)
현재 ~9mpps를 보내고 있습니다. 각 패킷의 크기는 72바이트이며 UDP DNS 요청입니다. 이 패킷은 Intel i40e 인터페이스를 사용하여 Dell 서버로 전송됩니다. 서버는 대기열 크기가 4096인 32개의 대기열을 모두 사용하고 있습니다. 모든 클라이언트 소스 패킷에는 약 150개의 풀에 임의의 소스 MAC 주소와 임의의 IP 주소가 있습니다. 네트워크 카드에는 삭제/삭제된 패킷이 표시되지 않습니다.
ethtool -S
~9mpps로 인터페이스에 도착하는 모든 유니캐스트 트래픽을 볼 수 있습니다 . rx_unicast
하지만 rx_packets
1.7mpps를 보여줍니다. 송신 인터페이스는 내가 전달한 다른 인터페이스와 동일한 수의 패킷을 처리하고 전송하고 있음을 보여줍니다. 생성된 트래픽이 도착하는 원격 IP는 L3 인터페이스일 뿐이며 이를 수신하는 DNS 서비스가 없으므로 패킷은 원격 끝에서 삭제됩니다(이는 정상입니다).
사용하면 dropwatch
다음 메시지가 표시됩니다.
224021 drops at kfree_skb+1e (0xffffffffa33f5cbe) [software]
235277 drops at kfree_skb+1e (0xffffffffa33f5cbe) [software]
232467 drops at kfree_skb+1e (0xffffffffa33f5cbe) [software]
227083 drops at kfree_skb+1e (0xffffffffa33f5cbe) [software]
228235 drops at kfree_skb+1e (0xffffffffa33f5cbe) [software]
227216 drops at kfree_skb+1e (0xffffffffa33f5cbe) [software]
221967 drops at kfree_skb+1e (0xffffffffa33f5cbe) [software]
225418 drops at kfree_skb+1e (0xffffffffa33f5cbe) [software]
0xffffffffa33f5cbe
그 안에 무엇이 있는지 찾아보았지만 /boot/System.map-$(uname -r)
아무것도 나열되어 있지 않습니다. kfree_skb가 하는 일을 찾아보았으나이것sk_buff 메모리를 해제합니다. (별로 도움이 되지 않음)
나는 이것이 커널(전달, 넷필터 등)의 제한이나 너무 많은 트래픽을 처리하는 CPU 능력의 한계일 수 있다고 생각합니다. 그러나 패킷이 커널에서 삭제되는 이유를 알고 싶습니다.
모든 트래픽이 전송되지 않는 이유를 어떻게 확인할 수 있습니까?
고쳐 쓰다 다음 모듈을 제거할 수 있었습니다
nf_conntrack
ip_tables
iptables_filter
x_tables
이로 인해 처리 속도가 향상되었으며 이제 ~4.5mpps를 보낼 수 있다는 것을 알 수 있습니다. 넷필터가 병목 현상인 것 같습니다. 다른 모듈을 제거하는 것이 더 효율적입니다. 왜 이런 일이 일어나는지 다른 사람이 자세히 알고 있는지 궁금하십니까?