내가 CentOS는 7에서 개별 메시지 처리 시간을 측정하는 성능 프레임 워크 도구를 만드는거야 나는 isolcpus 커널 옵션을 사용하여이 작업에 대해 하나 개의 CPU를 예약하고 나는 그것이 taskset를 사용하여 실행합니다.코드 성능 스트릭 측정
이제는 문제가 발생합니다. 여러 메시지 중에서 최대 처리 시간을 측정하려고했습니다. 처리 시간은 < = 1000ns이지만 많은 반복을 실행하면 매우 높은 결과를 얻습니다 (> 10000ns).
여기 나는 재미있는 일은 없지만 문제를 보여주는 간단한 코드를 만들었습니다. 나는이 차이는 어디에서 온에서 이해하려고 노력 중이 야
max: 84 min: 23 -> for 1000 iterations
max: 68540 min: 11 -> for 100000000 iterations
: 반복의 수에 따라 내가 같은 결과를 얻을 수 있습니까? 나는 이것을 우선 순위가 가장 높은 실시간 스케줄링으로 실행하려고 시도했다. 그걸 막을 수있는 방법이 있습니까? 커널 스레드는 여전히 isolcpus 고립 된 CPU에서 예정받을 수 있습니다 -
#include <iostream>
#include <limits>
#include <time.h>
const unsigned long long SEC = 1000L*1000L*1000L;
inline int64_t time_difference(const timespec &start,
const timespec &stop) {
return ((stop.tv_sec * SEC - start.tv_sec * SEC) +
(stop.tv_nsec - start.tv_nsec));
}
int main()
{
timespec start, stop;
int64_t max = 0, min = std::numeric_limits<int64_t>::max();
for(int i = 0; i < 100000000; ++i){
clock_gettime(CLOCK_REALTIME, &start);
clock_gettime(CLOCK_REALTIME, &stop);
int64_t time = time_difference(start, stop);
max = std::max(max, time);
min = std::min(min, time);
}
std::cout << "max: " << max << " min: " << min << std::endl;
}
왜 적절한 'CLOCK_MONOTONIC'대신에 'CLOCK_REALTIME'을 사용하고 있습니까? – EOF
둘 다 시도해 보았지만 CLOCK_PROCESS_CPUTIME_ID와 큰 차이는 없었습니다. –
'man clock_getttime'을 다시 한 번 살펴보면 가능한 경우'CLOCK_MONOTONIC_RAW'를 제안합니다. – EOF