| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > зная PID процесса узнать сколько мгц он потребляет |
| Автор: duken 7.5.2008, 18:22 |
| надо для системы контроля нагрузки (впринципе можно и с OpenSource-версией, не велика ценность/уникальность) надо функцию на C (либо алгоритм на русском никак не могу найти как это сделать... ни алгоритма, ни кода... :( |
| Автор: JackYF 7.5.2008, 19:02 |
| Есть такая штука под Unix-like - ps называется. Она как раз по pid и выдаёт % использования процессора. Код открыт - бери и смотри. Ещё вариант - посмотри в /proc/<pid> - там вся инфа по процессу и есть, найти в документации только, что именно оттуда брать. |
| Автор: duken 8.5.2008, 02:19 | ||
| JackYF, в /proc/pid/ сам бы порылся сначала, там нифига нету! читать блин научись
это значит что я нашёл где посмотреть память, название и прочее, это в /proc/<pid>/status а вот как узнать процент CPU/количество мегагерц - нигде нету. а исходники top это вообще хрень полная, каждая функция размазана по всему файлу, да ещё и не по одному кажись... нереально что-то найти, найти то чо надо - тем более... а сам ps кстати процент CPU не выдаёт! может кто-нибудь всё-таки знает? Добавлено через 1 минуту и 11 секунд JackYF, в каких доках? man proc пишет по-русски, но там нифига не написано. |
| Автор: t_gran 8.5.2008, 03:25 |
| На мой взгляд, если в инете нигде нету (не смотрел), я думаю надо брать source утилиты top. В ней как раз уже реализовано всё что требуется. |
| Автор: t_gran 8.5.2008, 03:44 |
| Кстати на sf.net нашел: 1. http://htop.sourceforge.net/. 2. http://www.unixtop.org/ 3. http://collectl.sourceforge.net/ |
| Автор: duken 8.5.2008, 08:20 |
| t_gran, спасибо |
| Автор: JackYF 8.5.2008, 12:27 |
Во-первых, спокойно и без перехода на личности, а во-вторых, догадайся с трёх раз, откуда top, ps и компания берёт эту информацию. |
| Автор: MAKCim 8.5.2008, 12:33 | ||
duken,
Добавлено через 2 минуты и 6 секунд я пороюсь за него, но если я там найду требуемую информацию, то публично извинишься перед JackYF |
| Автор: JackYF 8.5.2008, 19:32 |
| Я пару раз рылся в /proc/<pid>, но не досконально. Если, всё-таки, ни MAKCim, ни я эту информацию не найдём, то я извинюсь за неумышленную дезинформацию. Другое дело, что грубость в любом случае неправомерна. |
| Автор: MAKCim 8.5.2008, 20:13 | ||||||
вот trace-лог команды
видно, что используется /proc
не то? |
| Автор: duken 9.5.2008, 04:39 | ||
| MAKCim, то что там нихрена нету - я имел ввиду готовых значений. если бы они там были... а алгоритм расчётов я как раз незнаю. указания количества потребляемых мегагерц или процентов CPU в /proc/<pid>/ нету. про то, используется /proc при их вычислении или нет, я ничего не говорил. и так знаю что да. а за
извиняюсь. может кто-нибудь всё-таки может ответить что-нибудь внятное на мою просьбу, озвученную в первом посте? врпинципе можно и не на русском. ссылку, или здесь. |
| Автор: MAKCim 9.5.2008, 09:59 |
| duken, сформулируй, что значит "количество мегагерц"? |
| Автор: xvr 12.5.2008, 13:33 | ||
ps вычисляет %cpu как отношение астрономического времени, прошедшего с момента запуска программы к сумме его stime+utime (все берется из /proc/xxx/stat) top вычисляет тоже самое на основе изменения stime+utime каждого процесса за 2 последовательных интервала опроса (берется процент от суммы приращений stime+utime по всем процессам, возможно по всем показываемым на экране, не уточнял) |
| Автор: Dogevec 6.9.2008, 01:00 |
| Писоединяюсь к вопросу про вычисление мегагарц под каждый выбранный процесс. Ну вот допустим у меня команда /proc/<PID>/stat выдала вот такое: cat /proc/3190/stat: 3190 (ksmserver) S 1 3174 3174 0 -1 4202560 2168 0 6 0 4 11 0 0 18 0 1 0 18482 26296320 2449 4294967295 134512640 134551920 3214674864 3214672224 3063738056 0 0 4096 83115 0 0 0 17 0 0 0 0 И из каких же значиний и каким макаром я могу вычислить количество мегагерц, потребляемых данным процессом? |
| Автор: xvr 6.9.2008, 12:19 | ||||||||
Одним постом выше было все написано
Hertz - частота системного таймера в ядре (можно забить константой) CPU% = (utime+stime)/(curtime-starttime) * 100% Для определения Hertz можно взять это:
Добавление:
Т.е. сумма этих чисел (3357+0+4313+1362393) и есть curtime |
| Автор: MAKCim 6.9.2008, 13:20 |
не все так просто HZ может не быть (cм. CONFIG_NO_HZ), если таймер работает в ONESHOT режиме |
| Автор: xvr 6.9.2008, 17:23 | ||
Тогда через /proc/stat (cpu), да оно и проще |
| Автор: Dogevec 7.9.2008, 22:11 |
| Хорошо, а если процессоров два, то делить (stime+utime) получается на (curtime1-starttime1)+(curtime2-starttime2)? |