Linux 커널에서 perf 하위 시스템을 비활성화하는 방법은 무엇입니까?


15

벤치 마크를 실행하고 있습니다. 내 벤치 마크 러너는 실험간에 dmesg 버퍼를 모니터링하여 성능에 영향을 줄 수있는 모든 것을 찾습니다. 오늘은 이것을 던졌습니다.

[2015-08-17 10:20:14 경고] dmesg가 변경된 것 같습니다! 차이점은 다음과 같습니다.
--- 2015-08-17 09:55:00
+++ 2015-08-17 10:20:14
@@ -825,3 +825,4 @@
 [3.802206] [drm] RC6 상태 활성화 : RC6 켜기, RC6p 끄기, RC6pp 끄기
 [7.900533] r8169 0000 : 06 : 00.0 eth0 : 연결
 [7.900541] IPv6 : ADDRCONF (NETDEV_CHANGE) : eth0 : 링크가 준비되었습니다
+ [236832.221937] perf 인터럽트가 너무 오래 걸렸으며 (2504> 2500), kernel.perf_event_max_sample_rate를 50000으로 낮추었습니다.

검색을 마친 후에는 이것이 "perf"라는 리눅스 커널의 프로파일 링 서브 시스템과 관련이 있다는 것을 알게되었습니다. 우리는 이것이 필요하다고 생각하지 않으므로 완전히 비활성화하고 싶습니다.

다시 검색하면 sysctl perf_cpu_time_max_percent이 도움이 될 수 있습니다. 여기에 누군가가 좀 더이에 0 읽기로 설정하여 사용하지 않도록 제안 여기 :

perf_cpu_time_max_percent :

성능 샘플링 이벤트를 처리하는 데 사용되는 CPU 시간을 커널에 알려줍니다. perf 서브 시스템에 샘플이이 한계를 초과했다는 알림이 표시되면 샘플링 빈도를 낮추어 CPU 사용을 줄이십시오.

일부 성능 샘플링은 NMI에서 발생합니다. 이러한 샘플이 예기치 않게 실행하는 데 너무 오래 걸리면 NMI가 서로 쌓여서 실행될 수 없습니다.

0 : 메커니즘을 비활성화합니다. CPU 시간에 관계없이 perf의 샘플링 속도를 모니터링하거나 수정하지 마십시오.

1-100 : 퍼포먼스의 샘플링 속도를이 비율의 CPU로 조절하려고 시도하십시오. 참고 : 커널은 각 샘플 이벤트의 "예상"길이를 계산합니다. 여기서 100은 예상 길이의 100 %를 의미합니다. 이 값을 100으로 설정하더라도이 길이를 초과하면 샘플 조절이 계속 표시 될 수 있습니다. 얼마나 많은 CPU를 사용하는지 신경 쓰지 않으면 0으로 설정하십시오.

이것은 0처럼 들립니다. 프로파일 링 샘플 속도가 더 이상 확인되지 않지만 freq 하위 시스템은 계속 실행 중입니다 (?).

freq로 커널 프로파일 링을 완전히 비활성화하는 방법에 대해 누구나 알 수 있습니까?

편집 : 누군가 perf없이 커널을 만들 것을 제안했지만 이것이 가능하지 않다고 생각합니다. 옵션을 전환 할 수없는 것 같습니다.

menuconfig

EDIT2 : 더 많은 독서를 한 후에 kernel.perf_event_max_sample_rate0 으로 설정할 수 있다고 결정했습니다 . 즉 초당 샘플이 없습니다. 그러나이 작업을 수행 할 수 없습니다 ( source ).

커밋 02f98e3e36da106338b7c732fed516420fb20e2a
저자 : Knut Petersen 
날짜 : 수 9 월 25 일 14:29:37 2013 +0200

perf : perf_event_max_sample_rate의 하한으로 1을 시행하십시오.

편집 3 : FWIW perf_cpu_time_max_percent는 25로 설정되어있어 커널이 하드웨어 레지스터 샘플링 시간의 25 % 이상을 소비하고 있음을 의미합니다. 벤치마킹 머신에는 적합하지 않습니다.

perf_cpu_time_max_percent커널이 하드웨어 레지스터를 읽는 시간의 25 % 이상을 계속 사용하기 때문에 0으로 설정 하면 상황이 더 나빠질 것이라고 확신합니다 . 오류는 샘플 속도를 조정하기 위해 발생하므로 커널이 perf 시간의 <25 %를 사용하는 할당량을 충족 시키려고합니다. 25 %는 여전히 IMHO가 너무 높습니다.

perf를 실제로 비활성화 할 수 없다면 아마도 가장 좋은 타협은 perf_event_max_sample_rate1 로 설정 하는 것 입니다.

EDIT4 : 친구가의 의미를 잘못 해석했을 perf_cpu_time_max_percent수 있으므로 위의 설명이 잘못되었을 수 있습니다. 값 25는 커널이 perf 인터럽트 서비스를 위해 예약 한 임의 길이의 25 % 이상을 사용했음을 나타냅니다.

편집 5 :

주석에서 지적했듯이 -*-, per per 옵션은 다른 활성화 된 기능에 의해 기능이 강제 실행됨을 나타냅니다. 에서 살펴보면 help다음과 같은 기능이 나타납니다.

도움

나는 여기서 이길 수 있다고 생각하지 않습니다. 부울 공식 selected by

X86을 타겟팅하는 경우 또는

방금 X86_64 타겟팅이 활성화되어 있는지 확인했습니다 CONFIG_X86. 따라서 X86 또는 X86_64를 타겟팅하자마자 perf를 얻는 것 같습니다.

그래서 나는 나의 질문을 다음과 같이 약간 바꾸고 싶습니다 :

커널이 perf 루틴에서 보내는 시간을 최소화하기 위해 어떤 perf 설정을 사용할 수 있습니까?

전반적인 목표는 벤치마킹을위한 무작위 변형 소스를 제어하는 ​​것입니다. 성능을 비활성화 할 수없는 경우 벤치 마크에 미치는 영향을 최소화하려면 어떻게해야합니까?


1
이전 화면에서 perf를 비활성화 할 수 있어야합니다.
Michael Hampton

1
"프로파일 링 지원"을 의미합니까? 이 기능을 비활성화해도 위의 옵션을 여전히 선택 해제 할 수 없습니다. 또한 .config를 검사하면 CONFIG_HAVE_PERF_EVENTS=y및이 CONFIG_PERF_EVENTS=y있습니다. 나는 이것이 장애인을 생각하지 않는다고 생각합니다.
Edd Barrett

2
메시지는 정보입니다. 커널은 시스템 성능에 영향을주지 않으면 서 사용할 수있는 샘플 속도를 자동으로 결정하고 perf가 활성화되지 않았거나 설치되어 있어도이를 기록합니다. 시스템로드가 높거나 주파수 스케일링이있는 경우 종종 해당 메시지가 표시됩니다.
Brian

1
기호 -*-는 일부 서브 시스템이 perf 모듈에 종속됨을 의미합니다. Help옵션을 [*]또는 로 변경하기 위해 비활성화해야하는 종속성 트리를 표시합니다 [M].
Rufo El Magufo

4
이것을 고려하여 질문을 수정했습니다. 요컨대, perf는 X86_64에서 필수 인 것으로 보입니다.
Edd Barrett

답변:


2

[HAVE_PERF_EVENTS] 커널 옵션을 비활성화하고 Linux 커널을 다시 컴파일하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.