2017-05-19 7 views
1

클라이언트에서 간단한 프로그램을 실행 중이며 계속 UDP 패킷을 서버로 보냅니다. 서버의 인터페이스는 다중 대기열 네트 카드이지만 udp4의 rx-flow-hash를 sd로 설정했습니다. 따라서 모든 패킷은 하나의 CPU에서 생성됩니다.리눅스 softirq cpu 사용법이 이상하게 보입니다.

40Wpackets/s를 수신하면 서버의 CPU가 softirq에서 1 %의 비용이 발생합니다. 60Wpackets/s를 수신하면 서버의 CPU가 softirq에서 8 %가됩니다. 90Wpackets/s를 받으면 서버의 CPU cosr이 softirq에서 100 %가됩니다.

받은 번호는 잠시 동안 sar -n UDP 1 번으로 실행됩니다. CPU 비용은 잠시 동안 mpstat -P ALL 1을 통해 전달됩니다.

그래서 나는 이것에 대해 혼란스러워합니다.

선형이 아닌 이유는 무엇입니까?

답변

0

소프트 인터럽트는 즉시 처리 할 필요가없는 코드의 부분을 차지하는 하드 인터럽트 이후에 실행됩니다.

따라서 하드 인터럽트로 소프트 인터럽트를 점유 할 수 있습니다. 일반 하드 인터럽트가 실행 된 후 소프트 인터럽트가 실행됩니다 (하반부 인터럽트).

하지만 이번에는 하드 인터럽트가 발생하면 소프트 인터럽트가 선점됩니다.

소프트 인터럽트를 처리하기 위해 10 개 이상의 소프트 인터럽트 큐가 발생하면 ksoftirqd 스레드가 깨어납니다. Ksoftirqd 스레드가 CPU로 차지하는 비율은 soft %의 문제에 설명되어 있습니다.

패키지가 짧아서 ksoftirq이 잠에서 깨어나지 않았으며 연약함 %가 매우 낮음. 유휴 프로세스에서 많은 소프트 인터럽트가 하드 인터럽트로 중단되었지만 CPU 소비는 내부의 유휴 %에 기록됩니다.

로드가 높으면 하드 인터럽트로 인해 소프트 인터럽트가 중단되므로 ksoftirqd이 실행 중이므로 소프트 %가 갑자기 증가합니다.