벤치 마크를 실행하고 있습니다. 내 벤치 마크 러너는 실험간에 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없이 커널을 만들 것을 제안했지만 이것이 가능하지 않다고 생각합니다. 옵션을 전환 할 수없는 것 같습니다.
EDIT2 : 더 많은 독서를 한 후에 kernel.perf_event_max_sample_rate
0 으로 설정할 수 있다고 결정했습니다 . 즉 초당 샘플이 없습니다. 그러나이 작업을 수행 할 수 없습니다 ( 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_rate
1 로 설정 하는 것 입니다.
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 설정을 사용할 수 있습니까?
전반적인 목표는 벤치마킹을위한 무작위 변형 소스를 제어하는 것입니다. 성능을 비활성화 할 수없는 경우 벤치 마크에 미치는 영향을 최소화하려면 어떻게해야합니까?
CONFIG_HAVE_PERF_EVENTS=y
및이 CONFIG_PERF_EVENTS=y
있습니다. 나는 이것이 장애인을 생각하지 않는다고 생각합니다.
-*-
는 일부 서브 시스템이 perf 모듈에 종속됨을 의미합니다. Help
옵션을 [*]
또는 로 변경하기 위해 비활성화해야하는 종속성 트리를 표시합니다 [M]
.