2010-02-18 9 views
1

Я пытаюсь определить использование ЦП конкретных 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 
+0

Вы получили ответ на этот вопрос? – jasonk

ответ

1

Если вы работаете на многоядерной машине, вы можете проверить, происходит ли это, когда процесс переносится из одного ядра процессора в другой. Если ваши процессы запущены, prstat покажет процессор, на котором они запущены. Чтобы минимизировать конфликт блокировок, часто обновляемые данные иногда обновляются в области памяти конкретного процессора, а затем синхронизируются с любыми копиями данных для других процессоров.

+0

Хорошая идея. Спасибо, я посмотрю в этом направлении. – Andrew

+0

Я так и не нашел убедительных доказательств, но я согласен, что это, вероятно, то, что происходит. – Andrew

0

Просто догадаться. Вы можете временно отключить NTP и посмотреть, не исчезла ли проблема.

+0

NTP отключен, спасибо! – Andrew

 Смежные вопросы

  • Нет связанных вопросов^_^