실행 중인 모든 프로세스를 다양한 CPU 코어로 제한

실행 중인 모든 프로세스를 다양한 CPU 코어로 제한

총 32개의 논리 코어가 있는 AMD 7950X3D CPU가 있으며 그 중 16개(0-15)는 추가 캐시에 액세스할 수 있습니다. 멀티태스킹 시 게임 시스템을 최적화하기 위해 Steam과 Steam이 생성하는 모든 프로세스를 코어 0~15에서 실행하고 나머지 시스템을 코어 16~31로 제한하여 게임을 방해하지 않도록 하고 싶습니다. 나는 게임을 실행하지 않을 때 시스템이 모든 리소스를 가질 수 있도록 런타임에 이 제한을 설정할 수 있기를 원합니다. 분류하면 워크플로는 다음과 같습니다.

  1. 실행 중이거나 새로 생성된 모든 프로세스(Steam 제외)를 코어 16-31에 고정합니다.
  2. 러닝 스팀은 0-15로 고정됩니다.
  3. 게임을 완료한 후 실행 중인 모든 프로세스와 새로 생성된 프로세스가 0-31에서 다시 실행되도록 허용합니다.

2단계는 명확합니다. 그냥 실행하면 taskset -c 0-15 steam작동합니다. 하지만 1단계와 3단계를 수행하는 방법이 명확하지 않습니다.

내가 시도한 것은 다음과 같습니다.

sudo taskset -apc 16-31 1. 플래그를 사용하여 PID 1에 대한 선호도를 설정함으로써 -a이를 생성하는 모든 프로세스에 적용할 것으로 예상했지만(그게 전부입니다), 그렇게 하지 않고 . 이미 실행 중인 하위 프로세스가 아닌 프로세스입니다. 시스템 모니터에서는 여전히 코어 0-15가 가끔 2% 로드로 점프하는 것을 볼 수 있습니다. 테스트를 실행하면 stress -c 3216~31개 코어뿐만 아니라 32개 코어도 모두 100%로 로드됩니다.

다른 유사한 스레드에서 찾은 모든 제안은 런타임에 적용되지 않고 시작 시(시스템 구성 파일 변경) 적용되거나 이미 실행 중인 모든 프로세스를 처리하지 않으므로 이것이 중복이라고 생각하지 않습니다.

어떤 제안이 있으십니까?

답변1

for pid in /proc/[0-9]*;do taskset -apc 16-31 ${pid##*/};done

답변2

또한 보기 https://serverfault.com/questions/625146/difference-Taskset-and-cpuset 사이

Taskset은 프로세스를 하나 이상의 CPU에 바인딩하는 데 사용됩니다. 기본적으로 초기 실행 또는 런타임 중에 실행될 수 있는 위치를 지정합니다. 최신 서버 장비에서 RHEL/CentOS를 사용하는 경우작업 세트 대신 numactl을 사용하는 것이 좋습니다..

중앙 처리 유닛/cset는 CPU 마스킹에 사용되며 Linux cgroup을 기반으로 구축된 프레임워크입니다. 프로세스 관리에 사용할 수 있는 다른 도구가 있기 때문에 Cset은 RHEL과 같은 일부 배포판에서는 인기가 없었습니다.

논평:애플리케이션은 사용 중에 선호도를 재설정할 수 있습니다 taskset. 이것을 사용하면 cpuset, CPUSet이 부여하는 선호도를 변경할 수 없으며 numactltaskset다 동일한 기본 시스템 호출을 호출합니다.sched_setaffinity

반품,

TASKSET 또는 sched_setaffinity()를 사용하여 CPUSET을 사용하여 격리된 프로세서 코어에 대한 프로세스 선호도를 설정합니다.

https://docs.kernel.org/admin-guide/cgroup-v1/cpusets.html

관련 정보