프로세서 선호도

Processor affinity

프로세서 선호도, 즉 CPU 핀딩 또는 "캐시 선호도"는 CPU 또는 CPU 범위프로세스스레드를 바인딩 및 바인딩 해제하여 프로세스나 스레드가 CPU가 아닌 지정된 CPU나 CPU에서만 실행되도록 한다.이는 대칭 다중 처리 운영 체제에서 네이티브 중앙 대기열 스케줄링 알고리즘의 수정으로 볼 수 있다.큐의 각 항목에는 킨 프로세서를 나타내는 태그가 있다.리소스 할당 시 각 태스크는 다른 태스크보다 우선하여 킨 프로세서에 할당된다.

프로세서 선호도는 주어진 프로세서에서 실행된 프로세스의 나머지 부분이 해당 프로세서에서 다른 프로세스가 실행된 후에도 해당 프로세서의 상태(예: 캐시 메모리의 데이터)로 유지될 수 있다는 사실을 이용한다.동일한 프로세서에서 실행할 인터럽트가 거의 없는 CPU 집약적 프로세스를 스케줄링하면 캐시 누락과 같은 저하 이벤트를 줄여 성능을 향상시킬 수 있지만 CPU가 다시 사용 가능해지기를 기다려야 하기 때문에 일반 프로그램이 느려질 수 있다.[1]프로세서 선호도의 실제 예는 일부 그래픽 렌더링 소프트웨어와 같이 스레딩되지 않은 응용 프로그램의 여러 인스턴스를 실행하는 것이다.[citation needed]

스케줄링 알고리즘 구현은 프로세서 선호도에 따라 다양하다.특정 상황에서 일부 구현에서는 작업이 더 높은 효율성으로 이어질 경우 다른 프로세서로 변경될 수 있다.예를 들어, 두 개의 프로세서 집약적 작업(A와 B)이 한 프로세서에 친화력을 갖는 반면 다른 프로세서는 사용되지 않은 상태로 남아 있는 경우, 많은 스케줄러는 프로세서 사용을 극대화하기 위해 작업 B를 두 번째 프로세서로 이동시킬 것이다.그러면 작업 B는 두 번째 프로세서와 친화력을 획득하고 작업 A는 원래 프로세서와 친화력을 계속 갖게 된다.[citation needed]

사용법

프로세서 선호도는 캐시 문제를 효과적으로 줄일 수 있지만, 지속적인 로드 밸런싱 문제를 줄이지 않는다.[2]또한 프로세서 선호도가 불균일 아키텍처가 있는 시스템에서는 더욱 복잡해진다는 점에 유의하십시오.예를 들어, 2개의 듀얼 코어 하이퍼스레드 CPU가 있는 시스템은 스케줄링 알고리즘에 대한 난제를 제시한다.

하이퍼스레딩을 통해 동일한 코어에 구현된 두 가상 CPU 간에는 완전한 선호도가 존재하며, 동일한 물리적 프로세서에 있는 두 코어 간에는 부분 선호도가 존재하며(코어가 전부는 아니지만 일부 캐시를 공유하므로), 개별 물리적 프로세서 간에는 선호도가 없다.다른 리소스도 공유되기 때문에 프로세서 선호도만 CPU 배급의 기준으로 사용할 수 없다.프로세스가 지정된 코어의 가상 하이퍼스레드 CPU 1개에서 최근에 실행되었으며 가상 CPU가 현재 사용 중이지만 해당 파트너 CPU가 아닌 경우 캐시 선호도는 프로세스를 유휴 파트너 CPU로 디스패치해야 함을 시사한다.그러나 두 가상 CPU는 본질적으로 모든 컴퓨팅, 캐시, 메모리 자원을 놓고 경쟁한다.이러한 상황에서는 일반적으로 다른 코어 또는 CPU로 프로세스를 전송하는 것이 더 효율적일 것이다.이것은 프로세스가 캐시를 재채집할 때 위약금을 발생시킬 수 있지만, CPU 내의 자원을 경쟁할 필요가 없기 때문에 전반적인 성능이 더 높아질 수 있다.[citation needed]

특정 운영 체제

Linux에서 프로세스의 CPU 선호도는 taskset[3](1) 프로그램과 sched_setaffinity(2) 시스템 호출로 변경할 수 있다.스레드의 선호도는 라이브러리 함수 중 하나인 pthread_setaffinity_np(3) 또는 pthread_attr_setaffinity_np(3)를 사용하여 변경할 수 있다.

SGI 시스템에서 dplace는 CPU 집합에 프로세스를 바인딩한다.[4]

DragonFly BSD 1.9(2007) 이후 버전에서는 usched_set 시스템 호출을 사용하여 프로세스의 친화력을 제어할 수 있다.[5][6]NetBSD 5.0에서 FreeBSD 7.2, DragonFly BSD 4.7 이상 버전에서는 pthread_setaffinity_np 및 pthread_getaffinity_np를 사용할 수 있다.[7]NetBSD에서 특정 CPU 세트에 스레드의 선호도를 설정하는 psrset 유틸리티[8].FreeBSD에서는 CPU[9] 세트를 생성하고 이러한 세트에 프로세스를 할당하는 데 CPUet 유틸리티가 사용된다.DragonFly BSD 3.1(2012) 이상에서는 특정 CPU 세트에 프로세스를 할당하는 데 usched 유틸리티를 사용할 수 있다.[10]

Windows NT와 그 후계자에서는 SetThreadAffinityMask[11] 및 SetProcessAffinityMask[12] API 호출을 사용하거나 (프로세스 선호도 전용) 작업 관리자 인터페이스를 통해 스레드 및 프로세스 CPU 친화성을 별도로 설정할 수 있다.

MacOS는 선호도 집합에 따라 스레드를 예약하는 방법을 커널에 힌트를 제공하는 선호도 API를[13] 노출한다.

Solaris에서는 Pbind(1) 프로그램을 사용하여 프로세서에 대한 프로세스 바인딩과 LWP를 제어할 수 있다.[14]선호도를 프로그래밍 방식으로 제어하려면 processor_bind(2)[15]를 사용할 수 있다.프로세서 세트 및 인접성 그룹 개념을 사용하는 pset_bind(2)[16] 또는 lgrp_affinity_get(3LGRP)[17]과 같은 일반 인터페이스가 더 많다.

AIX에서는 bindprocessor 명령과[18][19] bindprocessor API를 사용하여 프로세스의 바인딩을 제어할 수 있다.[18][20]

참고 항목

참조

  1. ^ "Processor affinity and binding". Retrieved 2021-06-08.
  2. ^ "백서 - 프로세서 선호도" - tmurgent.com에서.2007-07-06 접속.
  3. ^ taskset(1)Linux 사용 설명서 – 사용자 명령
  4. ^ dplace.1Wayback Machine보관된 2007-07-01 - sgi.com.2007-07-06 접속.
  5. ^ "usched_set(2) — setting up a proc's usched". DragonFly System Calls Manual. DragonFly BSD. Retrieved 2019-07-28.
  6. ^ "kern/kern_usched.c § sys_usched_set". BSD Cross Reference. DragonFly BSD. Retrieved 2019-07-28.
  7. ^ pthread_setaffinity_np(3)NetBSD, FreeBSDDragonFly BSD 라이브러리 기능 설명서
  8. ^ psrset(8)NetBSD 시스템 관리자 설명서
  9. ^ cpuset(1)FreeBSD 일반 명령 설명서
  10. ^ "usched(8) — run a program with a specified userland scheduler and cpumask". DragonFly System Manager's Manual. DragonFly BSD. Retrieved 2019-07-28.
  11. ^ SetThreadAffinityMask - MSDN 라이브러리
  12. ^ SetProcessAffinityMask - MSDN 라이브러리
  13. ^ "Thread Affinity API Release Notes". Developer.apple.com.
  14. ^ PBind(1M) - Solaris man 페이지
  15. ^ processor_bind(2) - Solaris man 페이지
  16. ^ pset_bind(2) - Oracle Solaris 11.1 정보 라이브러리 - man 페이지 섹션 2
  17. ^ lgrp_affinity_get(3LGRP) - 메모리 및 스레드 배치 최적화 개발자 가이드
  18. ^ a b Umesh Prabhakar Gaikwad; Kailas S. Zadbuke (November 16, 2006). "Processor affinity on AIX".
  19. ^ "bindprocessor Command". IBM.
  20. ^ "bindprocessor Subroutine". IBM.