하나의 CPU 코어 만 사용


9

동시 프로그램에 대한 성능 테스트를 실행해야하며 하나의 CPU 코어 에서만 실행해야합니다 . (협업 스레드를 원하지 않습니다-항상 컨텍스트 전환을 원합니다).

그래서 두 가지 질문이 있습니다.

  1. 가장 좋은 해결책-내 프로그램에 대해서만 하나의 CPU 코어에만 서명하고 예약하는 방법 (OS 가이 CPU 코어를 사용하지 않도록). 나는 그것이 불가능하다고 생각하지만 어쩌면 내가 틀렸다 ...

  2. 하나의 CPU 코어 만 사용하도록 Linux (Fedora 24)를 설정하는 방법은 무엇입니까?



1
최신 CPU는 사용중인 코어 수에 따라 속도가 변경 될 수 있습니다. 프로세스가 단일 코어 만 사용하고 다른 프로세스는 사용하지 않는지 확인하더라도 운영 체제가 다른 코어를 사용하는 방법에 따라 해당 코어의 속도가 달라집니다. 테스트를 실행할 때 이것을 고려하십시오.
liori

BIOS에서 CPU 코어를 비활성화 할 수 있어야합니다. @liori가 위에서 언급 한 것처럼 OS가 코어 속도를 변경할 수 있다는 테스트에서 더 안정적 일 수 있습니다.
Marcs

VM을 생성하고 하나의 코어 만 할당하는 것은 어떻습니까? 오, 난 그냥 "이 CPU 코어를 사용하지 않기 위해"읽었으므로 신경 쓰지 마십시오.
sakisk

답변:


26

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= 단위 파일의 선호도를 제어해야 하며 유닉스 SE에서 기본 선호도를 설정하는 방법 에 대한 가지 질문이 있지만 좋은 해결책을 찾지 못했습니다.

로 비록 @Kamil Maciorowski가 주석 및 superuser.com에 대한 또 다른 질문에 대답 설정 isolcpus=1 상의 커널 명령 줄 당신이 할 수 있습니다 무언가이다, "일반 스케줄링 알고리즘에서 해당 CPU를 분리"해야한다.


이것은 질문에 대한 답이 아닙니다. 작업 세트 (또는 작업 선호도를 설정하는 다른 방법)는 프로세스가 지정된 코어 세트 에서만 실행되도록 보장하지만 해당 프로세스 해당 코어에서 실행되도록 보장하지는 않습니다 . 즉, 운영 체제는 프로세스 선호도를 설정 한 코어에 다른 프로세스를 예약 할 수 있습니다. 실제로 이것은 가장 유용한 답변이지만 제한 사항을 알고 특히 1)에서 요청한 내용을 제공하지 않는다는 점에 유의하십시오. "내 프로그램에 대해서만 하나의 CPU 코어 만 예약하십시오 (OS를 이 CPU 코어를 사용하지 마십시오) "
James Greenhalgh

@JamesGreenhalgh, 그러나 모든 프로세스에 대해 CPU 선호도를 설정하는 방법을 찾으면 질문에 대답 할 것입니다. 새로운 프로세스에 대한 기본 CPU 선호도를 커널 (cmd line) 옵션으로 설정할 수 있습니까? 부팅 프로세스 초기에 적용되며 모든 프로세스에 영향을 미칩니다.
jpaugh

실제로 다른 프로세스가 해당 CPU에서 실행되지 못하게하는 괄호 안의 절을 놓쳤습니다. 또는 아마도 가장 큰 문제는 문제의 프로그램이 4가 아닌 하나의 코어에서만 실행되도록하고 다른 프로세스는 일종의 성가신 것으로 간주 될 수 있다는 것입니다. 그것에 비해. 그러나 나는 카밀이 지금 언급 한 것과는 별도로 질문의 그 부분에 대한 적절한 대답을 얻지 못했다는 것을 인정할 것이다.
ilkkachu

@jpaugh, 그때조차도 "귀하의"코어에서 실행되는 다른 프로세스의 가능성으로부터 자신을 완전히 분리시킬 수 없을 것이라고 생각합니다. 예를 들어 자체 선호도를 재설정하거나 커널 코드 자체가 프로세스 관리와 관련이없는 시간을 소비하는 경우도 있습니다. 다시 한 번,이 답변이 대부분의 문제를 해결하기 위해 가장 많이 할 일이지만, 괄호 안의 마지막 부분에 대한 답변을 읽는 데 정말로 관심이 있습니다!
James Greenhalgh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.