내 동시 프로그램에 대한 성능 테스트를 실행해야 합니다. 내 요구 사항은 이 프로그램이 다음에서 실행되어야 한다는 것입니다.단 하나CPU 코어. (나는 협력 스레드를 원하지 않습니다. 항상 컨텍스트 전환이 있기를 바랍니다).
그래서 두 가지 질문이 있습니다.
최상의 솔루션 - 내 프로그램에 대해 하나의 CPU 코어만 서명하고 예약하는 방법(OS가 해당 CPU 코어를 사용하지 않도록 강제하기 위해) 불가능할 것 같지만 어쩌면 틀렸을 수도 있습니다 ...
하나의 CPU 코어만 사용하도록 Linux(Fedora 24)를 설정하는 방법은 무엇입니까?
답변1
Linux에서 프로세스의 CPU 선호도를 설정하는 시스템 호출은 다음과 같습니다. sched_setaffinity
. 그럼 거기에taskset
도구명령줄에서 이 작업을 수행합니다.
하나의 CPU에서만 단일 프로그램을 실행하려면 다음과 같은 것이 필요하다고 생각합니다.
taskset -c 1 ./myprogram
(CPU 번호를 -c
스위치의 매개변수로 설정합니다.)
다른 프로세스가 측정하려는 프로세스에 비해 너무 많이 실행되지 않거나 다른 CPU에 예약되어 있는 한 이는 단일 프로세서 시스템에 충분히 가까워야 합니다. 해당 단일 프로세스에 CPU를 전용으로 사용하려는 경우오직, 방지다른프로세스가 해당 CPU에서 실행되고 있지 않은 경우 선호도도 설정해야 합니다.
나아니요올바르게 수행하는 방법을 알아 두십시오. init
시스템의 모든 프로세스에 상속되도록 하려면 부팅 프로세스 초기에 프로세서 선호도를 설정 해야 합니다 . 해결 방법으로 taskset -c -p 0 $PID
다른 모든 프로세스를 사용하여 CPU #0에서만 실행되도록 할 수 있습니다.
systemd에도 있습니다CPUAffinity=
유닛 파일의 선호도를 제어하고한 쌍~의질문unix.SE에서 기본 선호도 설정에 대해 설명했지만 좋은 해결책을 찾지 못했습니다.
비록@camillemachorowski 댓글과superuser.com의 다른 질문에 답변했습니다., 설정 isolcpus=1
하다커널 명령줄이는 "이 CPU를 공통 스케줄링 알고리즘에서 분리"해야 하는데, 이는 아마도 여러분이 원하는 것일 것입니다.