我正嘗試使用/ proc文件系統中的數據來確定Solaris 10中特定進程中特定LWP的CPU利用率。我遇到的問題是有時使用計數器減少了。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);
在prusage_t結構報告納秒的數量從每個的LWP改變狀態時記錄的時間戳的。該功能稱爲microstate accounting。聽起來不錯,但是經常「系統調用cpu時間」計數器減少約1-10毫秒。
更新:它不僅僅是「系統調用cpu時間」計數器,我也看到其他計數器也在減少。
另一個好奇心是,它似乎總是隻有一個樣品是假的 - 從來沒有兩個彼此靠近。所有其他樣本都以預期的速率單調遞增。這似乎排除了計數器在內核中重置的可能性。
任何關於這裏發生了什麼的線索?
> uname -a
SunOS cdc-build-sol10u7 5.10 Generic_139556-08 i86pc i386 i86pc
你得到了這個答案嗎? – jasonk 2013-05-15 12:32:21