내 네트워크 인터페이스가 너무 많은 패킷을 수신하고 단일 코어 프로세서가 있다고 가정해 보겠습니다.
계속해서 코어를 중단하고 기본적으로 CPU를 독점하는 것을 막는 것은 무엇입니까(반, 반, 반)?
답변1
업무량이 너무 많으면맨 아래절반은 Softirqd: ksoftirqd 형태로, 커널 스레드로 실행되므로 다른 프로세스에 비해 "공정한" CPU 할당만 받습니다. 이 문제는 특히 당신이 언급한 네트워크 사례로 인해 2016년경에 수정되었습니다.
https://lwn.net/Articles/687617/
나는 Softirq가 알려진 모든 패킷을 처리할 때까지 상위 절반을 다시 활성화할 필요가 없다고 생각합니다. 그러나 이는 NAPI에만 해당될 수 있습니다. LWN.net에서 NAPI에 대한 이전 기사를 확인할 수 있습니다.
https://lwn.net/Articles/30107/
https://lwn.net/Articles/214457/
https://lwn.net/Articles/244640/
드라이버는 이전 2.4 기술을 계속 사용하여 네트워크 스택에 연결할 수 있으며 NAPI 변경의 이점을 누릴 수 없습니다. 커널에 NAPI를 추가해도 이전 버전과의 호환성이 손상되지 않습니다. 그러나 NAPI를 사용하려면 다음 기능을 사용할 수 있어야 합니다.
A) DMA 링 또는 소프트웨어 장치에 패킷을 저장하기에 충분한 RAM.
B) 패킷을 스택으로 보낼 수 있는 인터럽트나 이벤트를 끄는 기능.