ksoftirqd / 0 프로세스가 모든 CPU를 사용하는 이유는 무엇입니까?


67

우분투가 약간 느리게 실행되고 있다고 느꼈다가 프로세스가 실행되는 것을 보았고 50 %의 CPU를 사용하는 것을 발견했습니다 ksoftirqd/0.

누구 든지이 프로세스가 무엇인지, 왜 그렇게 많은 CPU를 사용하는지 그리고 덜 CPU 집약적 인 방법을 알고 있습니까?

답변:


77

컴퓨터는 IRQ (인터럽트 요청)를 통해 연결된 장치와 통신합니다. 장치에서 인터럽트가 발생하면 운영 체제가 수행중인 작업을 일시 중지하고 해당 인터럽트 주소 지정을 시작합니다.

어떤 상황에서는 IRQ가 차례로 매우 빠르게 나오며 운영 체제는 다른 서비스가 도착하기 전에 서비스를 마칠 수 없습니다. 이는 고속 네트워크 카드가 짧은 시간 동안 많은 수의 패킷을 수신 할 때 발생할 수 있습니다.

운영 체제는 IRQ가 도착하면 처리 할 수 ​​없기 때문에 (너무 빨리 도착하기 때문에) 운영 체제는라는 특수 내부 프로세스에 의해 나중에 처리하기 위해 대기합니다 ksoftirqd.

경우 ksoftirqdCPU 시간의 작은 비율 이상을 취하고,이 기계가 무거운 인터럽트가 발생하고 있다는 뜻이다.


22

매뉴얼 페이지 ksoftirqd에는 머신이 소프트 인터럽트로드가 심한 경우 실행되는 CPU 별 커널 스레드가 있습니다.

어떤 CPU가 특정 인터럽트를 선택하는지 정의하여 설정을 약간 조정할 수 있습니다. 의 내용을 변경하면 /proc/irq/$interrupt_number/smp_affinity됩니다. 다음을 수행하여 인터럽트 목록과 의미를 얻을 수 있습니다.

cat /proc/interrupts

의 숫자는 smp_affinity16 진수 코드로 표시되는 cpus의 비트 맵입니다. 가장 오른쪽 비트가 가장 중요하지 않습니다. 예를 들어, 내 시스템에는 8 개의 코어가 있습니다. 코어 1, 3 및 4 만 사용하려면 smp_affinity를 1a다음 과 같이 설정하십시오 .

cpu_7 cpu_6 cpu_5 cpu_4 cpu_3 cpu_2 cpu_1 cpu_0
  0     0     0     1     1     0     1     0    = 0001 1010 = 1a (in hex)

개인적으로 다음과 같이 인터럽트 29 (8 코어 시스템의 eth0)를 선택할 수 있도록 모든 CPU를 설정했습니다.

sudo echo ff > /proc/irq/29/smp_affinity

4

ksoftirqd는 머신에 소프트 인터럽트 인터럽트가 가해질 때 실행되는 CPU 당 커널 스레드이므로 CPU를 소비하지 않고 IRQ로드를 줄입니다.


1
나는 그것이 askubuntu.com이라는 것을 알고 있지만 Raspberry Pi는 그 반대입니다. ksoftirqd는 집중적 인 IRQ로드에서 모든 CPU를 먹고 있습니다.
machineaddict

내가 이해하는 것처럼 ksoftirqd는 연기 된 softirq를 처리합니다 (빠르게 처리 할 수없는 경우). 많은 softirq가 있거나 CPU가 처리하는 데 많은 CPU 시간을 소비하면 ksoftirqd는 많은 CPU 시간을 소비합니다.
pabouk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.