Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.4.2. 소켓 큐

NIC 하드웨어 큐처럼 소켓 큐는 softirq 컨텍스트에서 네트워크 스택으로 채워집니다. 그러면 애플리케이션은 read, recvfrom 등의 호출을 통해 해당 소켓의 큐를 배출합니다.
이 큐의 상태를 모니터링하려면 netstat 유틸리티를 사용합니다. Recv-Q 칼럼은 큐의 크기를 표시합니다. 일반적으로 소켓 큐에서 오버런은 NIC 하드웨어 버퍼 오버런과 같은 방법으로 관리됩니다 (예: 8.4.1절. “NIC 하드웨어 버퍼 ”).
입력 트래픽
첫 번째 옵션은 큐가 채워지는 비율을 설정하여 입력 트래픽을 느려지게 합니다. 이렇게 하려면 프레임을 필터링하거나 미리 드롭합니다. NIC의 장치 무게를 낮추어 입력 트래픽을 느려지게할 수 있습니다 [6].
큐 깊이
큐 깊이를 증가시켜 소켓 큐 오버런을 방지할 수 있습니다. 이렇게 하려면 rmem_default 커널 매개 변수 또는 SO_RCVBUF 소켓 옵션의 값 중 하나를 늘립니다. 이에 대한 자세한 내용은 8.2절. “네트워크 설정 최적화 ”에서 참조하십시오.
애플리케이션 호출 빈도
가능하면 자주 호출을 수행하는 애플리케이션을 최적화합니다. 이에는 보다 자주 POSIX 호출 (recv, read)을 수행하기 위해 네트워크 애플리케이션을 수정 또는 재설정하는 것이 포함됩니다. 이렇게하면 애플리케이션이 더 빠르게 큐를 배출할 수 있습니다.
대부분의 관리자에게는 큐의 깊이를 증가하는 것이 바람직한 해결 방법입니다. 이는 가장 간단한 해결 방법이지만 항상 장기적으로 작동하지 않을 수 있습니다. 네트워킹 기술의 속도가 높아지면서 소켓 큐는 더 빠르게 채워질 것입니다. 이는 시간이 지남에 따라 해당 큐의 깊이를 다시 조정하는 것을 의미합니다.
가장 좋은 해결 방법은 애플리케이션 공간에 데이터를 추가하더라도 커널에서 데이터를 더 빠르게 배출하도록 애플리케이션을 강화하거나 설정하는 것입니다. 이렇게 하면 데이터를 필요에 따라 스왑하거나 다시 페이징할 수 있게 되므로 데이터를 보다 유연하게 저장할 수 있습니다.


[6] 장치 무게는 /proc/sys/net/core/dev_weight를 통해 제어됩니다. 장치 무게와 조정의 의미에 대한 자세한 내용은 8.4.1절. “NIC 하드웨어 버퍼 ”에서 참조하십시오.