커널쪽 질문입니다.
리눅스 커널 2.4.x, 2.6.x 를 SMP 옵션을 사용하여 컴파일해서 실행할때 대부분의 NIC interrupt가 하나의 CPU에
할당이 됩니다.
물론 각각의 CPU에 interrupt 를 분산하기 위해서 irq balance를 사용하면 되지만
이런 경우 L2( 단지 예를 든것 뿐입니다. ) cache hit rate가 떨어져서 성능 저하의 원인이 됩니다.
또한 리눅스 커널에서 네트웍 패킷의 처리 과정은 NET_RX_SOFTIRQ 인 softirq 상태에서 처리가 됩니다.
softirq의 특징은 CPU가 여러개여도 softirq handler가 동일한 시간에 하나의 CPU에서만 실행되는 것을 보장하므로
동일한 시간에 네트웍 패킷은 하나의 CPU에서 한개만을 처리하게 됩니다.
이러한 특징은 물리적으로 CPU를 추가해도 네트웍 패킷 처리 성능을 향상 시킬수 없는 문제점을 발생 시킵니다.
이로 인하여 네트웍 패킷 처리시 성능 향상에 있어서 한계점을 드러내고 있습니다.
이에 대한 대안으로 검토 가능한 방법은 커널 스레드를 CPU 갯수만큼 생성해서 네트웍 패킷 처리 과정을 스레드에
의뢰 하는 경우 성능 향상을 볼수 있으나 이 방법은 리눅스 커널의 TCP/IP 스택 코드가 thread-safe 한지 검증이
안되어 있으므로 실현 가능한지 의문입니다.
지식적으로 틀린 부분이 있으면 말씀 주세요^^
아직 공부하고 있는지라!!!
* 해결 해야 할 과제
- 리눅스 커널의 softirq handler를 동시에 여러개의 CPU에서 실행이 가능한지?
- 아니면 이와 유사하게 동시 처리 할 수 있는 방안은 없는지?
- TCP/IP 스택 코드를 커널 스레드에서 실행이 가능한지?
- 리눅스 커널의 라우팅 기능의 성능 향상의 방안 없는지?
그게 불만이라면 irqbalance once를 해버리면 되죠... 그나저
그게 불만이라면 irqbalance once를 해버리면 되죠... 그나저나 softnet이후 L2는 하드웨어 인터럽트이고 L3이후 프로세스는 소프트웨어 인터럽트라 동일한 시간에 cpu2개 이상에서 처리되는데요?
답변에 감사합니다.2가지 질문을 드리겠습니다. 제가 아직 미천해서리^
답변에 감사합니다.
2가지 질문을 드리겠습니다. 제가 아직 미천해서리^^;
1.softnet 일단 구체적으로 무엇인지요?
2. irqbalance를 선택하고 L2 cache hit rate가 떨어진 문제점이
Hardware interrupt라서 생기는 문제라는 말씀이신지요? 그러면
irqbalance를 선택하고 L3cache를 이용하면 문제가 없다는 문제인가요?
음... NIC의 interrupt 처리가 분산되면 L2 Cach
음... NIC의 interrupt 처리가 분산되면
L2 Cache의 hit rate가 떨어진다는게 ...
어떻게 증명되지요? 제가 잘 모르겠어서 ... :?
^^*
실은 저도 어떻게 증명이 되고 있는지 모르고 있습니다.단지 문서에 이
실은 저도 어떻게 증명이 되고 있는지 모르고 있습니다.
단지 문서에 이렇게 적혀 있어서 그렇게 알고 있습니다.
L2 cache hit rate 성능이 떨어지는것을 확인하는 방법을
아시는 분은 알려주세요^^
아직도 해결방안을 못찾고 있습니다.고수님들의 조언 부탁드리겠습니다.
아직도 해결방안을 못찾고 있습니다.
고수님들의 조언 부탁드리겠습니다.
아니면 문서 or 책 or site 추천도 부탁드리겠습니다.
댓글 달기