11장. RHEL for Real Time에서 CPU 선호도 설정
시스템의 모든 스레드 및 인터럽트 소스에는 프로세서 선호도 속성이 있습니다. 운영 체제 스케줄러는 이 정보를 사용하여 CPU에서 실행할 스레드 및 인터럽트를 결정합니다. 효율적인 정책 및 우선 순위 설정과 함께 프로세서 선호도를 설정하면 최대한의 성능을 얻을 수 있습니다. 애플리케이션은 항상 리소스, 특히 CPU 시간, 다른 프로세스와 경쟁합니다. 애플리케이션에 따라 관련 스레드는 종종 동일한 코어에서 실행됩니다. 또는 하나의 애플리케이션 스레드를 하나의 코어에 할당할 수 있습니다.
멀티 태스킹을 수행하는 시스템은 의심의 여지없이 결정적이지 않습니다. 우선 순위가 낮은 애플리케이션이 코드의 중요한 섹션에 있는 동안 우선 순위가 높은 애플리케이션도 실행되지 않을 수 있습니다. 낮은 우선 순위 애플리케이션이 중요 섹션을 종료하면 커널은 낮은 우선 순위 애플리케이션을 안전하게 선점하고 프로세서에서 높은 우선 순위 애플리케이션을 예약합니다. 또한 한 CPU에서 다른 CPU로 프로세스를 마이그레이션하는 것은 캐시 무효화로 인해 비용이 많이 들 수 있습니다. RHEL for Real Time에는 이러한 문제 중 일부를 해결하고 대기 시간을 보다 효과적으로 제어할 수 있는 툴이 포함되어 있습니다.
유사성은 비트 마스크로 표시되며 마스크의 각 비트는 CPU 코어를 나타냅니다. 비트가 1로 설정되면 스레드 또는 인터럽트가 해당 코어에서 실행됩니다. 0인 경우 스레드 또는 인터럽트가 코어에서 실행되지 않습니다. 선호도 비트 마스크의 기본값은 모두이므로 스레드 또는 인터럽트는 시스템의 모든 코어에서 실행될 수 있습니다.
기본적으로 프로세스는 모든 CPU에서 실행할 수 있습니다. 그러나 프로세스의 선호도를 변경하면 사전 결정된 CPU 세트에서 실행되도록 프로세스를 정의할 수 있습니다. 하위 프로세스는 상위 프로세스의 CPU 특성을 상속합니다.
다음과 같은 일반적인 선호도 설정을 설정하면 최대한의 성능을 얻을 수 있습니다.
- 모든 시스템 프로세스에 단일 CPU 코어를 사용하고 나머지 코어에서 실행되도록 애플리케이션을 설정합니다.
-
동일한 CPU에서 스레드 애플리케이션 및 네트워크
softirq또는 드라이버 스레드와 같은 특정 커널 스레드 구성. - 각 CPU에서 producer-consumer 스레드를 페어링합니다. 생산자와 소비자는 두 개의 스레드 클래스로, 생산자가 버퍼에 데이터를 삽입하고 사용자가 버퍼에서 데이터를 제거합니다.
실시간 시스템에서 속성을 조정하는 일반적인 방법은 애플리케이션을 실행하는 데 필요한 코어 수를 확인한 다음 해당 코어를 분리하는 것입니다. Tuna 툴 또는 쉘 스크립트를 사용하여 taskset 명령과 같은 비트 마스크 값을 수정할 수 있습니다. taskset 명령은 프로세스의 선호도를 변경하고 /proc/ 파일 시스템 항목을 수정하면 인터럽트의 선호도가 변경됩니다.
11.1. taskset 명령을 사용하여 프로세서 선호도 튜닝 링크 복사링크가 클립보드에 복사되었습니다!
실시간으로 taskset 명령은 실행 중인 프로세스의 CPU 선호도를 설정하거나 검색하는 데 도움이 됩니다. taskset 명령은 -p 및 -c 옵션을 사용합니다. -p 또는 --pid 옵션은 기존 프로세스를 작동하고 새 작업을 시작하지 않습니다. -c 또는 --cpu-list 는 비트마스크 대신 숫자 프로세서 목록을 지정합니다. 목록에는 쉼표로 구분된 두 개 이상의 항목과 프로세서 범위가 포함될 수 있습니다. 예: 0,5,7,9-11.
사전 요구 사항
- 시스템에 대한 root 권한이 있습니다.
프로세스
특정 프로세스의 프로세스 유사성을 확인하려면 다음을 수행합니다.
# taskset -p -c 1000 pid 1000’s current affinity list: 0,1이 명령은 PID 1000을 사용하여 프로세스의 선호도를 출력합니다. CPU 0 또는 CPU 1을 사용하도록 프로세스가 설정됩니다.
선택 사항: 프로세스를 바인딩하도록 특정 CPU를 구성하려면 다음을 수행합니다.
# taskset -p -c 1 1000 pid 1000’s current affinity list: 0,1 pid 1000’s new affinity list: 1선택 사항: 두 개 이상의 CPU 선호도를 정의하려면 다음을 수행합니다.
# taskset -p -c 0,1 1000 pid 1000’s current affinity list: 1 pid 1000’s new affinity list: 0,1선택 사항: 특정 CPU에서 우선순위 수준 및 정책을 구성하려면 다음을 수행합니다.
# taskset -c 5 chrt -f 78 /bin/my-app세분화를 위해 우선순위와 정책을 지정할 수도 있습니다. 이 예에서 명령은 Cryostat
_FIFO정책 및 우선 순위 값 78을 사용하여 CPU 5에서/bin/my-app애플리케이션을 실행합니다.