19장. 인터럽트 및 사용자 프로세스를 격리하여 시스템 대기 시간 최소화
실시간 환경은 다양한 이벤트에 응답할 때 대기 시간을 최소화하거나 제거해야 합니다. 이렇게 하려면 다른 전용 CPU에서 사용자 프로세스에서 인터럽트(IRQ)를 분리할 수 있습니다.
19.1. 인터럽트 및 프로세스 바인딩 링크 복사링크가 클립보드에 복사되었습니다!
다른 전용 CPU의 사용자 프로세스에서 인터럽트(IRQ)를 격리하면 실시간 환경에서 대기 시간을 최소화하거나 제거할 수 있습니다.
인터럽트는 일반적으로 CPU 간에 균등하게 공유됩니다. 이는 CPU가 새 데이터 및 명령 캐시를 작성해야 할 때 인터럽트 처리를 지연할 수 있습니다. 이러한 인터럽트 지연으로 인해 다른 처리와 동일한 CPU에서 충돌이 발생할 수 있습니다.
특정 CPU(또는 다양한 CPU)에 시간 중요한 인터럽트 및 프로세스를 할당할 수 있습니다. 이러한 방식으로 이 인터럽트를 처리하기 위한 코드 및 데이터 구조는 프로세서 및 명령어 캐시에 있을 가능성이 높습니다. 결과적으로 전용 프로세스가 가능한 한 빨리 실행될 수 있지만 다른 모든 시간 외 프로세스는 다른 CPU에서 실행됩니다. 이는 관련된 속도가 메모리의 제한과 사용 가능한 주변 버스 대역폭에 있는 경우 특히 중요할 수 있습니다. 메모리가 프로세서 캐시로 가져올 때까지 대기하면 전체 처리 시간 및 결정성에 상당한 영향을 미칩니다.
실제로 최적의 성능은 전적으로 애플리케이션에 따라 다릅니다. 예를 들어 다른 회사에서 유사한 기능을 사용하여 애플리케이션을 튜닝하려면 완전히 다른 최적의 성능 튜닝이 필요합니다.
- 한 회사는 운영 체제 기능 및 인터럽트 처리를 위해 CPU 2개를 4개에서 분리할 때 최적의 결과를 확인했습니다. 나머지 2개의 CPU는 애플리케이션 처리를 위해 전적으로 전용되었습니다.
- 또 다른 회사는 네트워크 장치 드라이버 인터럽트를 처리하는 단일 CPU에 네트워크 관련 애플리케이션 프로세스를 바인딩할 때 최적의 결정성을 발견했습니다.
프로세스를 CPU에 바인딩하려면 일반적으로 지정된 CPU 또는 CPU 범위의 CPU 마스크를 알아야 합니다. CPU 마스크는 일반적으로 사용 중인 명령에 따라 32비트 비트 마스크, 10진수 또는 16진수로 표시됩니다.
| CPU | 비트 마스크 | 10진수 | Hexadecimal |
| 0 | 00000000000000000000000000000001 | 1 | 0x00000001 |
| 0, 1 | 00000000000000000000000000000011 | 3 | 0x00000011 |