Я пытаюсь определить использование ЦП конкретных LWP в определенных процессах в Solaris 10 с использованием данных из файловой системы/proc. Проблема в том, что иногда счетчик уменьшается.Как счетчик использования в файловой системе 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 time» уменьшает примерно 1-10 миллисекунд.
Обновление: это не только счетчик системного вызова времени процессора, но и с тех пор, как другие счетчики уменьшаются.
Другое любопытство заключается в том, что всегда кажется, что это всего лишь один образец, который является фиктивным - никогда не два рядом друг с другом. Все образцы монотонно увеличиваются с ожидаемой скоростью. Это, по-видимому, исключает возможность того, что счетчик каким-то образом сброшен в ядре.
Любые подсказки относительно того, что здесь происходит?
> uname -a
SunOS cdc-build-sol10u7 5.10 Generic_139556-08 i86pc i386 i86pc
Вы получили ответ на этот вопрос? – jasonk