Linux 컨텍스트 전환 빈도를 변경하는 방법은 무엇입니까?

Linux 컨텍스트 전환 빈도를 변경하는 방법은 무엇입니까?

Linux(linaro, ubuntu, debian) 컨텍스트 전환 빈도를 변경하는 방법은 무엇입니까?

반응성이 떨어지는 시스템을 보다 효율적인 시스템으로 교환할 수 있습니다.

편집 1: 가능한 한 빨리(초당 최대 클록 주기) 실행하려는 기본 프로세스가 있으므로 컨텍스트 전환 빈도를 줄이는 것을 고려했습니다(= 시간 분할 증가). 문제는 어떻게 하느냐, 효과가 유의미한가 하는 점이다. 컨텍스트 전환 비용을 계산할 수 있나요? 즉, 시간 분할을 3배로 늘리면 내가 관심을 갖는 주요 프로세스의 성능 향상이 얼마나 되는지 예측할 수 있습니까?

답변1

당신의 임무가오직특정 CPU에서 요청 시간을 처리하며 작업 간에 컨텍스트 전환이 없습니다 :-). 그러나 CPU는 여전히 중단되어 커널로의 컨텍스트 전환이 발생하고 그 반대로 전환될 수 있습니다. 가능한 원인 중 하나는 해당 CPU에서 실행할 다른 작업이 있는지 확인하는 선점 타이머입니다.

리눅스할 수 있는이유 없이 CPU에서 선점 타이머 인터럽트를 생성하지 마십시오. 바라보다 CONFIG_NO_HZ_FULL. 이 기능을 사용하려면 커널을 빌드할 때 활성화해야 합니다.그리고부팅 옵션을 사용하여 활성화해야 합니다.

기본적으로 어떤 CPU도 적응형 틱 CPU가 아닙니다. "nohz_full=" 시작 매개변수는 적응형 틱 CPU를 지정합니다. 예를 들어 "nohz_full=1,6-8"은 CPU 1, 6, 7, 8이 적응형 확장 CPU라는 의미입니다. 모든 CPU를 Adaptive Beat CPU로 표시하는 것은 금지되어 있습니다. [...]

LWN.net은 "Ingo Molnar에 따르면 Adaptive Tick CPU는 CPU 시간을 최대 1%까지 절약할 수 있습니다"라고 말합니다. 커널 문서에는 6가지 다른 비용이 있으며 "알려진 문제" 목록도 있다고 나와 있습니다.

이 이득은 상대적으로 작습니다. 특히 이 답변에서 설명한 대로 여러 작업 간의 컨텍스트 전환 빈도를 줄이는 데 따른 잠재적인 처리량 이득과 비교할 때 더욱 그렇습니다.Linux CPU 스케줄러에서 사용하는 시간 조각 길이를 변경하는 방법은 무엇입니까?

작은 글씨: 이러한 측정은 Spectre, Meltdown, KPTI 및 x86 ASID 지원 이전입니다 :-(. 구형 하드웨어에도 적용되는 것 같습니다. 커널 전문가에게 문의하거나 자체 측정을 ​​실행하여 컨텍스트 전환 비용이 어떻게 보이는지 확인하세요. 특정 커널 버전 및 하드웨어 변경 사항에 따라... PTI는 커널을 매우 자주 호출하는 소프트웨어(주요 예는 데이터베이스)를 제외하고 ASID에 의해 크게 완화되어야 하지만 이러한 숫자를 잘 처리할 수는 없습니다.

원본 RFC 패치에 대한 Molnar의 희망은 시간이 지나면 "대부분의 Linux 배포판에서 활성화될 수 있다"는 것입니다. Fedora 28에는 빌드를 지원하는 기본 커널이 함께 제공되는 것으로 나타났습니다 NO_HZ_FULL. 그러나 데비안 9는 그렇지 않습니다.


최근에는 Linux v4.17nohz_fullCPU에서 잔여 1Hz 타이머 틱을 제거합니다.. 처리량에 미치는 영향은 상당히 작다고 생각합니다. :-) 그러나 NO_HZ_FULLCPU에 실행 가능한 프로세스가 여러 개 있을 때 이점의 상태를 추적하려고 노력해 왔습니다 .

0Hz에 도달하면 nr_running >= 2에서 주기적인 틱 가정을 제거하고 기본적으로 sched_latency 제약 조건에서 요구하는 만큼만 바쁜 작업을 중단할 수 있습니다(nr_running에 따라 4~40ms마다).

v2.6.25-rc1에서는 선점이 별도의 보다 정확한 틱을 사용하기 시작했기 때문에 이는 다소 혼란스럽습니다.커밋 8f4d37ec073c, "sched: 고해상도 선점 확인됨". 동일한 LWN.net 기사의 댓글을 통해 발견되었습니다.https://lwn.net/Articles/549754/).

관련 정보