Как может уменьшиться счетчик использования в файловой системе Solaris 10 / proc? - PullRequest
1 голос
/ 19 февраля 2010

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

Количество наносекунд, сообщаемых в структуре prusage_t, выводится из отметок времени, записываемых каждый раз, когда LWP изменяет состояние. Эта функция называется учет микросостояний . Звучит неплохо, но время от времени счетчик "время системного вызова" уменьшается примерно на 1-10 миллисекунд.

Обновление: это не просто счетчик времени системного вызова, с тех пор я видел, как уменьшаются и другие счетчики.

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

Есть какие-нибудь подсказки относительно того, что здесь происходит?

> uname -a
SunOS cdc-build-sol10u7 5.10 Generic_139556-08 i86pc i386 i86pc

Ответы [ 2 ]

1 голос
/ 20 февраля 2010

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

0 голосов
/ 19 февраля 2010

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

...