/proc 파일 시스템의 데이터를 사용하여 Solaris 10의 특정 프로세스에서 특정 LWP의 CPU 사용률을 확인하려고합니다. 문제는 사용 카운터가 인 경우가으로 줄어들 때가 있습니다. prusage_t 구조체보고 나노초 번호가 LWP 상태가 변경 될 때마다 기록 타임 스탬프로부터 유도된다Solaris 10/proc 파일 시스템의 사용 카운터가 어떻게 감소합니까?
// we'll be reading from the file named /proc/<pid>/lwp/<lwpid>/lwpusage
std::stringstream filename;
filename << "/proc/" << pid << "/lwp/" << lwpid << "/lwpusage";
int fd = open(filename.str().c_str(), O_RDONLY);
// error checking
while(1)
{
prusage_t usage;
ssize_t readResult = pread(usage_fd, &usage, sizeof(prusage_t), 0);
// error checking
std::cout << "sec=" << usage.pr_stime.tv_sec
<< "nsec=" << usage.pr_stime.tv_nsec << std::endl;
// wait
}
close(fd);
:
여기의 요지이다. 이 기능을 microstate accounting이라고합니다. 좋은 소리지만, 흔히 "시스템 호출 CPU 시간"카운터 인 은 약 1 ~ 10 밀리 초가 감소합니다.
업데이트 : "시스템 호출 CPU 시간"카운터뿐만 아니라 다른 카운터도 감소하는 것을 보았습니다.
또 다른 호기심은 항상 정확히 하나의 표본 인 것처럼 보이지만 서로 가깝지 않습니다. 다른 샘플은 예상 속도로 단조롭게 증가합니다. 이것은 카운터가 커널에서 어떻게 든 리셋 될 가능성을 배제하는 것으로 보입니다.
여기에 무슨 일이 일어나는가에 대한 단서가 있습니까?
> uname -a
SunOS cdc-build-sol10u7 5.10 Generic_139556-08 i86pc i386 i86pc
이 답변을 얻었습니까? – jasonk