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


17

Linux (linaro, ubuntu, debian) 컨텍스트 전환 빈도를 어떻게 변경할 수 있습니까?

보다 효율적인 시스템을 위해 응답이 적은 시스템을 교환해도 좋습니다.

EDIT1 : 가능한 한 빨리 실행하려는 주 프로세스가 있습니다 (초당 최대 클럭 사이클). 컨텍스트 스위치 주파수를 줄이려고 생각했습니다 (= 타임 슬라이스 증가). 문제는 어떻게하는 것이며 중요한 효과가있을 것입니다. 컨텍스트 전환 비용을 계산할 수 있습니까? 즉, 타임 슬라이스를 2 씩 늘리면 내가 관심을 갖는 주요 프로세스의 성능 향상률은 몇 %가 될까요?


1
CPU 코어보다 더 많은 프로세스를 실행하는 경우에만이 설정의 효과가 최소화 될 것으로 예상됩니다. 특정 CPU를 기다리는 다른 작업이없는 경우 다른 작업을 실행할 수있는 것은 시스템 호출 또는 하드웨어 인터럽트 일 수 있으므로 단시간 작업 전환 타이머를 전혀 설정할 필요도 없습니다. CPU를 커널에 반환합니다.
Simon Richter

여기에 미안하지만,이 질문의 맥락에서 '컨텍스트 스위치 주파수'가 무엇을 의미하는지 설명 할 수 있습니까?
user1717828

@sourcejedi 내 EDIT1 참조-컨텍스트 전환 빈도를 줄일 때 처리량 개선율을 %로 추정 할 수 있습니까?
Nadav B

@ NadavB 나는 그에 따라 답변을 편집했습니다. 최적화 할 때 특정 측정이 가장 좋습니다. 그러나 블랙 박스로 취급 할 필요는 없습니다. 예를 들어 perf를 사용하여 CPU 성능이 좋은 경우 캐시 누락을 측정 할 수 있습니다. AIUI, 다양한 유형의 CPU 캐시 미스 (TLB 미스 포함)는 컨텍스트 전환의 가장 중요한 개별 비용입니다.
sourcejedi

답변:


17

작업이 특정 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_fullCPU 에서 잔여 1Hz 타이머 틱을 제거합니다 . 처리량에 미치는 영향은 매우 작습니다 :-), 그러나 NO_HZ_FULLCPU에 여러 개의 실행 가능한 프로세스가있을 때 이점 의 상태를 따르려고 노력했습니다 -

일단 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/ ) 에서이 주석을 통해 찾을 수 있습니다.


kernel.sched_rr_timeslice_ms는 어떻습니까?
Nadav B

1
실시간 sched_rr 작업을 사용하는 경우 @NadavB라고 말합니다. 이것은 전문가 주제입니다. 그렇지 않으면 :-) 없습니다.
sourcejedi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.