1개의 코어 전체를 단일 프로세스 전용
Linux 에서는 특정 프로세스에 CPU 코어를 1개 할당하는 방법이 있습니까?또, 이 코어로 스케줄 하는 다른 프로세스나 인터럽트 핸들러는 없어야 합니다.
taskset 유틸리티를 사용하는 CPU에 대한 Linux 바인딩 프로세스의 프로세스 어피니티에 대해 읽어 보았습니다만, 그 코어에 대해 특정 프로세스를 어피니티하려고 해도 문제가 해결되지 않습니다.그러나 이 코어로 다른 프로세스가 스케줄 되어 있을 가능성이 있기 때문에, 이것은 피하고 싶은 것입니다.
스케줄링을 위해 커널 코드를 변경해야 합니까?
네, 있어요.실제로는 다음 두 가지 방법이 있습니다.-)
현시점에서는, 다음의 조작을 실시하는 것이 가장 좋은 방법입니다.
부팅 중에 부트 로더의 Linux 커널 명령줄에 isolcpus=[cpu_number] 매개 변수를 추가합니다.이것에 의해, Linux 스케줄러는, CPU 어피니티를 사용해 특별히 요구되지 않는 한, 그 CPU상에서 통상의 작업을 실행하지 않게 됩니다.
IRQ 어피니티를 사용하여 격리된 CPU가 인터럽트를 수신하지 않도록 다른 CPU가 모든 인터럽트를 처리하도록 설정합니다.
CPU 선호도를 사용하여 특정 작업을 분리된 CPU에 수정합니다.
이것에 의해, 트리외의 패치나 개발중의 패치를 사용하지 않고, CPU의 분리에 관해서 Linux 가 제공할 수 있는 최고의 기능을 얻을 수 있습니다.
타이머 틱 인터럽트나 스케줄러 코드, 다른 CPU로부터의 IPI, 작업큐 커널 스레드 등의 작업을 포함한 Linux 코드에 의해 작업이 중단되는 경우가 종종 있습니다.단, 중단은 매우 적어야 합니다.
인터럽트 발생원의 완전한 리스트에 대해서는, https://github.com/gby/linux/wiki 의 마이 페이지를 참조해 주세요.
또 다른 방법은 훨씬 우아하고 역동적인 CPUet을 사용하는 것입니다만, 현시점에서는 몇 가지 약점이 있습니다(예를 들어 타이머의 이행은 없습니다).이것에 의해, 낡은, 거칠지만 효과적인 isolcpus 파라미터를 추천합니다.
현재 Linux 커뮤니티에서는 이러한 모든 문제에 대처하고 보다 나은 분리 기능을 제공하기 위한 작업이 진행되고 있습니다.
Redhat 기사가 그것에 대해 이야기하고 있다.부트 파라미터 isolcpus를 변경합니다.
그리고 로버트 러브가 쓴 오래된 기사입니다.그리고 그 기사에는 해결책이 있다.
프로세스의 모든 하위 항목에는 상위 항목과 동일한 CPU 선호도 마스크가 제공됩니다.
다음으로 init을 1개의 프로세서에 바인드하기만 하면 됩니다.다른 모든 프로세스는 프로세스 트리의 루트이며, 따라서 모든 프로세스의 슈퍼부모가 되기 때문에 마찬가지로 하나의 프로세서에 바인드됩니다.
CPU 코어 전체를 특정 프로그램 전용으로 사용
태스크셋에서는 특정 프로그램을 특정 CPU에 할당할 수 있지만, 다른 프로그램이나 프로세스가 해당 CPU에 스케줄 되어 있지 않은 것은 아닙니다.이를 방지하고 CPU 코어 전체를 특정 프로그램 전용으로 하려면 부팅 시 CPU 코어를 예약할 수 있는 "isolcpus" 커널 파라미터를 사용합니다.
부트 또는 GRUB 구성 파일 중에 커널 매개 변수 "isolcpus="를 부트 로더에 추가합니다.그러면 Linux 스케줄러는 태스크셋에서 특별히 요청되지 않는 한 예약된 CPU 코어로 일반 프로세스를 스케줄링하지 않습니다.예를 들어 CPU 코어 0 및 1을 예약하려면 "isolcpus=0,1" 커널 매개 변수를 추가합니다.부팅 시 태스크셋을 사용하여 예약된 CPU 코어를 프로그램에 안전하게 할당합니다.
소스
- http://xmodulo.com/2013/10/run-program-process-specific-cpu-cores-linux.html
- http://www.linuxtopia.org/online_books/linux_kernel/kernel_configuration/re46.html
gby의 응답 절차를 따르더라도 커널 태스크는 분리된 CPU 코어로 실행됩니다.이를 개선하기 위해 Linux RT_PREEMT 실시간 프로젝트에서 작업이 진행 중입니다.따라서 RP_PREEMT에서 엣지 실시간커널을 사용하지 않으면 CPU 코어를 완전히 분리하지 못할 수 있습니다.
매뉴얼에 따라
Linux 스케줄러는 지정된 CPU 선호도를 준수하며 프로세스는 다른 CPU에서 실행되지 않습니다.
특정 프로세서가 전용으로 제공된다는 내용은 없습니다.
언급URL : https://stackoverflow.com/questions/13583146/whole-one-core-dedicated-to-single-process
'sourcecode' 카테고리의 다른 글
VueJS String 보간으로 TS 개체의 개인 속성에 액세스할 수 있습니다. (0) | 2022.08.14 |
---|---|
값 0 대신 NULL을 사용할 수 있습니까? (0) | 2022.08.14 |
java.displaces를 클릭합니다.XMLGregorian 캘린더 날짜 (0) | 2022.08.14 |
MySQL 스키마, 어느 쪽이 성능이 더 우수합니까?M-N 관계를 지정하거나 모든 관련 ID를 문자열로 저장하시겠습니까? (0) | 2022.08.14 |
nuxt.js에 Vue 패키지를 설치하는 방법 (0) | 2022.08.14 |