서두를 위해 AMD64 칩셋에서 커널 3.2와 함께 Debian Wheezy를 사용하고 있습니다. 내 컴퓨터에는 두 개의 Xeon E5-2690 코어가 있습니다. 하나의 CPU에있는 모든 코어가 단일 프로세스에 전용되도록 부트 매개 변수를 설정했습니다. 이를 위해 grub에서 isolcpus = 8,9,10,11,12,13,14,15를 설정했습니다.
여태까지는 그런대로 잘됐다. 이제 주어진 명령에 대해 격리 된 CPU를 사용하고 싶다고 가정 해 봅시다. 단순한 무한 루프를 사용합니다.
$ taskset -c 8-15 bash -c '동안 true; echo hello> / dev / null을 수행하십시오. 완료 &
지금까지 최고는 코어 8이 최대 100 % 활용률로 회전 함을 보여줍니다. 이제 해당 명령을 다시 시작한다고 가정 해 보겠습니다.
$ taskset -c 8-15 bash -c '동안 true; echo hello> / dev / null을 수행하십시오. 완료 &
위의 내용은 코어 9-15가 유휴 상태이고 두 프로세스가 코어 8을 공유하고 있음을 보여줍니다.
$ taskset -c 8 bash -c '진실한; echo hello> / dev / null을 수행하십시오. 완료 &
$ taskset -c 9 bash -c '진실한; echo hello> / dev / null을 수행하십시오. 완료 &
코어 8과 9는 각각 100 % 활용도를 얻습니다. 코어 1-7을 가진 동일한 작업 세트가 관련 코어에 프로세스를 올바르게 분산시키기 때문에 이는 isolcpus에만 적용됩니다. 또한 "taskset -p"는 8-15 프로세스에 대한 선호도 마스크가 올바르게 설정되었음을 보여줍니다. 커널 스케줄러가 isolcpus 선호도 마스크에 지정된 최저 코어 이외의 것을 사용하지 않는 것 같습니다.
일반적으로 이것은 위의 예제와 크게 다르지 않으며 각 프로세스마다 개별 코어를 지정하십시오. 그러나 전용 CPU에서 매우 다중 스레드 응용 프로그램을 실행하고 싶습니다. 생성 된 각 개별 스레드에 대해 프로세서 선호도를 개별적으로 재설정하지 않고도 코어 세트를 지정하고 스레드 풀이 자동으로 사용되도록하고 싶습니다.
누구든지 스케줄러가 isolcpu 세트에서 둘 이상의 코어를 제공하도록하는 방법을 알고 있습니까?