작업이 특정 CPU에서 시간을 요청 하는 유일한 프로세스 인 경우 작업 사이에 컨텍스트 전환이 없습니다 :-). 그러나 CPU가 여전히 중단되어 컨텍스트 전환이 커널로 전환 될 수 있습니다. 그리고 가능한 원인 중 하나는 선점 타이머이며이 CPU에서 실행할 다른 작업이 있는지 확인하는 것입니다.
Linux 는 그렇게 할 이유가 없을 때 CPU에서 선점 타이머 인터럽트를 생성하지 않도록 할 수 있습니다 . 참조하십시오 CONFIG_NO_HZ_FULL
. 이 기능을 사용하기 위해서는 커널 빌드 할 때 사용할 수 있어야합니다, 그리고 그것은 부팅 옵션을 사용하여 활성화해야합니다.
기본적으로 CPU는 적응 형 틱 CPU가 아닙니다. "nohz_full ="부팅 매개 변수는 adaptive-ticks CPU를 지정합니다. 예를 들어 "nohz_full = 1,6-8"은 CPU 1, 6, 7 및 8이 적응 형 틱 CPU임을 나타냅니다. 모든 CPU를 적응 형 틱 CPU로 표시하는 것은 금지되어 있습니다. [...]
LWN.net은 적응 형 틱 CPU에 대해 "Ingo Molnar에 따르면 CPU 시간의 최대 1 %가 절약 될 것"이라고 말합니다. 커널 문서에 따르면 6 가지 비용이 있으며 "알려진 문제"목록도 있습니다.
이 답변은 상대적으로 작습니다. 특히이 답변에서 언급 한 것처럼 여러 작업 사이의 컨텍스트 전환 빈도를 줄이는 잠재적 인 처리량 증가와 비교할 때 Linux CPU 스케줄러에서 사용하는 시간 분할 길이를 변경하는 방법은 무엇입니까?
작은 글씨 :이 측정은 Spectre, Meltdown, KPTI 및 x86 ASID를 지원합니다.-(그리고 그것들은 다소 오래된 하드웨어에도 적용됩니다. 커널 전문가에게 문의하거나 컨텍스트 전환 비용에 대한 자체 측정을 실행하십시오. 특정 커널 버전 및 하드웨어에서 변경되었습니다 ... PTI는 주로 데이터베이스를 사용하는 커널을 매우 자주 호출하는 소프트웨어를 제외하고는 ASID에 의해 크게 완화되어야했지만 숫자에 대해서는 잘 알고 있지 않습니다. .
원래 RFC 패치에서 Molnar의 희망은 시간이 지남에 따라 "대부분의 Linux 배포판에서 가능할 것"이라는 것이 었습니다. Fedora 28은 NO_HZ_FULL
지원 기능을 갖춘 기본 커널을 제공합니다 . 그러나 데비안 9는 그렇지 않습니다.
보다 최근에 Linux v4.17 은 nohz_full
CPU 에서 잔여 1Hz 타이머 틱을 제거합니다 . 처리량에 미치는 영향은 매우 작습니다 :-), 그러나 NO_HZ_FULL
CPU에 여러 개의 실행 가능한 프로세스가있을 때 이점 의 상태를 따르려고 노력했습니다 -
일단 0Hz에 도달하면 nr_running> = 2에서주기적인 틱 가정을 제거 할 수 있습니다. 또한 nr_running에 따라 sched_latency 제약 조건에서 요구하는 횟수만큼 주기적으로 바쁜 작업을 중단해야합니다. .
선점은 이미 v2.6.25-rc1에서 커밋 8f4d37ec073c, "sched : high-res preemption tick"을 사용하여 별도의 더 정확한 틱을 사용하여 시작 되었기 때문에 약간 혼란 스럽습니다 . 동일한 LWN.net 기사 ( https://lwn.net/Articles/549754/ ) 에서이 주석을 통해 찾을 수 있습니다.