Linux ARM 환경의 멀티코어 다중 프로세스 성능 문제

Linux ARM 환경의 멀티코어 다중 프로세스 성능 문제

저는 4코어 ARM CPU에서 Linux 애플리케이션을 개발 중입니다. 애플리케이션에는 두 개의 프로세스가 있으며 아래와 같이 각 프로세스를 CPU에 할당했습니다.

  • core1 : 프로세스1(GUI)
  • core2-4 : precess2 (실시간 적용)

process1이 없으면 process2는 해당 프로세스를 쉽게 처리하므로 걱정할 필요가 없습니다. 그런데 문제는 process1을 실행하게 되면 process2의 성능에 큰 영향을 미치고 process2가 전혀 제대로 작동하지 않는다는 점입니다.

그 이유는 무엇입니까?

추가 정보:

  • CPU2-4는 isolcpus=1-3으로 격리됩니다.

  • 전체 시스템의 스레드를 추적해 보니 process1이 있을 때만 process2가 core1에서 rcu_preempt라는 많은 작업을 깨우는 것을 발견했습니다. 하지만 이 두 프로세스는 메모리를 공유하지 않습니다.

  • process1을 다른 프로세스로 교체했는데 할당된 메모리에 많은 양의 데이터를 빠르게 쓰는 프로세스가 process2에 영향을 미치는 것을 발견했습니다. 간단한 CPU 작업(예: while 루프)을 수행하는 프로세스에는 영향을 미치지 않습니다.

답변1

모든 CPU를 점유하여 Linux 커널이 자체 스레드를 실행하기 위해 실행 중인 프로세스를 선점하도록 했습니다. 그러면 커널은 CPU를 구별하지 않고 다른 CPU와 마찬가지로 CPU1을 선점할 수 있습니다. 컴퓨터에서 더 많은 활동이 발생할수록 커널은 CPU를 구별하지 않고 더 많은 것을 선점해야 합니다.

또한 CPU가 전부는 아니며 컴퓨터 아키텍처에는 더 많은 암묵적인 병목 현상이 있을 수 있습니다. 그 중 일부는 메모리 뱅크이며, 뱅크에 대한 동시 액세스는 해당 뱅크에 대한 채널 수에 따라 달라집니다. 그 다음에는 컴퓨터의 메모리 버스, 디스크 캐시, 디스크 자체 등이 있습니다.

기사에서 실제 실시간 프로세스 실행에 대한 추가 힌트를 찾을 수 있습니다. Linux에서 실시간 애플리케이션을 실행하는 방법은 무엇입니까? 그러나 무엇이 더 잘 작동할지 또는 더 나쁘게 작동할지 결정하는 것은 실제 하드웨어입니다.

관련 정보