로드가 적은 시스템의 pfmalloc 페이지로 인한 UDP RecvBufError

로드가 적은 시스템의 pfmalloc 페이지로 인한 UDP RecvBufError

내 리눅스 박스가 UDP 패킷을 삭제하고 있습니다. 드라이버 가 포함된 10GbeE 82599ES NIC가 있습니다 ixgbe.

다음과 같은 패킷을 수신하기 위해 실행 중입니다 nc.

$ nc -I 100000000 -l 2004 -u > /dev/null 

다음을 사용하여 다른 시스템에서 패킷을 보냅니다.

$ cat /dev/zero | nc 10.5.10.248 2004 -u 

수신 컴퓨터의 RcvbufErrors가 /proc/net/snmp미친 듯이 증가하고 있습니다. 흥미롭게도 /proc/net/udp손실된 패킷이 표시되지 않습니다. 내 커널 버전은 다음과 같습니다

$ uname -a
Linux titan 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 GNU/Linux

내가 알 수 있는 한, UDP 삭제 없이 RcvbufError를 얻는 유일한 방법은 다음과 같습니다.sk_filter-ENOMEM에 반환sock_queue_recv_skb, 이는 소켓 버퍼 페이지가 pfmemalloced일 때 발생하며, 이는 머신이 메모리 부족 상태에 있을 때 발생합니다.

이상한 점은 free공간이 너무 많다는 것입니다.

$ free -m
total       used       free     shared    buffers     cached
Mem:         32210      32016        194        178        352      29948
-/+ buffers/cache:       1715      30495
Swap:        65467        162      65305

돕다?! (미리 감사드립니다)

케이

관련 정보