하드웨어가 DMA 전송을 통해 초당 300개의 패킷을 호스트 응용 프로그램으로 보낸 다음 호스트 응용 프로그램의 메시지 대기열로 전달하는 구현이 있습니다.
패킷이 높은 속도로 응용 프로그램에 전송될 때 응용 프로그램이 그러한 패킷을 한두 개 받지 못하는 것을 발견했습니다. 을 사용하면 tcpdump
모든 패킷이 호스트로 전송되는 것을 볼 수 있습니다. 하지만 패킷이 삭제되었는지 어떻게 알 수 있나요? 디버그 인쇄를 사용하면 CPU 사용량이 소모되므로 쉽지 않습니다.
이 메시지 대기열에 수신된 메시지 수를 알 수 있습니까? 나열된 항목을 사용 ipcs -q commmand
하지 마세요.
답변1
내 시스템에 표시된 것처럼 SysV 메시지 대기열은 기본적으로 작습니다 ipcs -l
.
$ ipcs -l
[...]
------ Messages: Limits --------
max queues system wide = 7890
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384
해당 sysctl 항목은 다음과 같습니다.
kernel.msgmni = 7890
kernel.msgmax = 8192
kernel.msgmnb = 16384
메시지 크기에 따라 이러한 제한 사항이 발생할 수 있습니다.