2013-03-10 3 views
6

주로 작동하는 Linux에서 CPU 격리라는 기술을 사용하여 프로세스를 프로세서에 효과적으로 잠그고 프로세서가 다른 것을 실행하지 못하게합니다. 우리의 커널 친구들은 인터럽트를 처리 할 마술을했습니다.Windows에서 핀 프로세서 CPU 격리

윈도우에서 가장 가까운 것은 프로세스/스레드를 프로세서에 바인드하는 것으로 보이는 친 화성 개념입니다. 그러나 프로세서가 해당 프로세스/스레드만을 실행한다는 보장이 없기 때문에 컨텍스트 스위치 및 기타 지터가 여전히 존재할 수 있습니다.

CPU가 반 결정적 실행 시간 동안 윈도우에서 분리되도록하는 방법이 있습니까?

+1

아니요. 필요하면 Linux를 계속 사용하는 것이 좋습니다. –

답변

3

사용자 모드에서 정확한 방법이 없습니다. 그리고 Windows는 대부분 응용 프로그램이 모든 시스템 리소스를 소모하지 못하도록 막으려합니다. 그러나 다른 프로세스의 대부분을 다른 코어/프로세서로 분리하여 코드가 주로 코어 전용으로 실행될 수 있습니다.

시작 프로세스를 열거하는 것으로부터 시작하여 at this code here on MSDN으로 시작하십시오. 열거 코드를 제외하고는 OpenProcess에 대한 플래그로 PROCESS_SET_INFORMATION을 지정합니다. NT cred를 실행하지 않는 프로세스의 경우이 작업을 수행하려면 관리자 권한으로 코드를 실행해야합니다. 획득 한 각 프로세스 핸들에 대해 SetProcessAffinityMask으로 호출하여 프로세스를 모든 코어에서 실행하도록 설정합니다. 그런 다음 다른 프로세스 핸들에서 모두 제거한 예약 된 코어에서 다른 프로세스를 실행하도록 프로세스를 설정하십시오.

이렇게하면 코드를 실행하려는 코어에 대한 시작 및로드 균형 조정에서 다른 프로세스를 처리하지 않습니다.

귀하의 마일리지는 다를 수 있습니다. 테스트 용이나 코드 전용 머신 용이라면 아마 괜찮을 것입니다. 다른 모든 앱과 함께 실행되는 상업용 앱의 경우, 고객은 코드를 실행할 때 다른 모든 앱과 서비스 탱크를 보게됩니다. 조심스럽게 밟으십시오.