Сейчас на форуме: zds, UniSoft (+6 невидимых)

 eXeL@B —› Программирование —› Как получить уровень загрузки ЦП
Посл.ответ Сообщение

Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 02 октября 2012 19:04
· Личное сообщение · #1

Собственно, сабж. Важное уточнение: интересует не отношение "Idle Time / Kernel Time + User Time", а значение в левой шкале RMClock, обозванное "CPU Load".
Выдержка из справки RMClock: CPU load - shows actual CPU load (i.e., the ratio of "active" processor cycles to the total processor cycles per given amount of time). This value is measured via CPU-specific performance monitoring counters and represents true CPU load, i.e., the amount of time the CPU spent in "non-asleep" state.
Если я правильно понимаю, "total processor cycles" это результат RDTSC, а вот что такое "active processor cycles" и тем более как их получить, ума не приложу.



Ранг: 15.8 (новичок), 10thx
Активность: 0.010.04
Статус: Участник

Создано: 03 октября 2012 10:36 · Поправил: esa_r
· Личное сообщение · #2

--> Link <--

Показания примерно совпадают с диспетчером задач.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 03 октября 2012 10:49
· Личное сообщение · #3

http://www.codeproject.com/Articles/3413/How-to-get-CPU-usage-by-performance-counters-witho
для определенного процесса
http://www.philosophicalgeek.com/2009/01/03/determine-cpu-usage-of-current-process-c-and-c/



Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 05 октября 2012 00:05 · Поправил: FalseMaster
· Личное сообщение · #4

Показания примерно совпадают с диспетчером задач.
для определенного процесса
интересует не отношение "Idle Time / Kernel Time + User Time"

http://www.codeproject.com/Articles/3413/How-to-get-CPU-usage-by-performance-counters-witho
Посмотрел реализацию "CCpuUsage" - слишком много букаф (16KB) для получения одного числа. К тому же в бинарниках "RMClock" нет ни вхождений строк: "PerfOS", "PerfProc", "Disable Performance Counters" ни обращений "RegQueryValueExA" к ключу "HKEY_PERFORMANCE_DATA", а это значит, что используется какой-то более вменяемый способ. Вопрос - какой?




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 05 октября 2012 00:14
· Личное сообщение · #5

FalseMaster
Ну так отладчик в руки и вперёд, на поиски ответа на вопрос.

-----
Stuck to the plan, always think that we would stand up, never ran.


| Сообщение посчитали полезным: plutos

Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 05 октября 2012 01:12
· Личное сообщение · #6

Я думал, что кто-нибудь в курсах, но по-видимому автор "RMClock" унёс свой секрет в могилу




Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 05 октября 2012 02:03
· Личное сообщение · #7

FalseMaster пишет:
Вопрос - какой?

Ring 0

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 05 октября 2012 02:24 · Поправил: FalseMaster
· Личное сообщение · #8

Ring 0
А поподробнее можно.

Кстати, эксперимента ради поменял формулу вычисления загрузки OS с "100 - Idle Time / (Kernel Time + User Time)" на "(Kernel Time + User Time - Idle Time) / (Kernel Time + User Time)" и, о чудо, моё значение "OS Load" стало почти всегда совпадать с показаниями "RMCLock".




Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 05 октября 2012 04:06
· Личное сообщение · #9

--> Без RING 0 <-- хочешь большего копай NtQuerySystemInformation,
FalseMaster пишет:
Если я правильно понимаю, "total processor cycles" это результат RDTSC

процессоры снабжены функцией снижения частоты,HT,многоядерностью - RDTSC выдаёт неверный результат.

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 06 октября 2012 00:47 · Поправил: FalseMaster
· Личное сообщение · #10

--> Без RING 0 <--
Про "PDH" я знаю, может быть даже попробую в дальнейшем, но сейчас неохота заголовочник писать только для того, чтобы пощупать.
копай NtQuerySystemInformation
У меня не мультипроцессорная система, поэтому пока хватает и "GetSystemTimes", но мне то нужна загрузка физического процессора, а не то, что показывает "Task Manager".
RDTSC выдаёт неверный результат
Других вариантов всё равно нет, да и не надо, ибо если поделить неверное значение "active processor cycles" на неверный результат RDTSC, всё будет в шоколаде, вопрос в том, как его получить.
ClockMan, так что там про Ring 0.



Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 09 октября 2012 20:51
· Личное сообщение · #11

Я тут кое-что накопал. В интеловском мане в пункте 14.3.2.4 чёрным по белому написано, что "unhalted core clocktick" можно получить инструкцией RDPMC, с 0x40000001 в ECX. Но у меня почему-то почти всегда (при загрузке проца иногда прыгает) возвращается одно и то же значение. В чем может быть проблема?



Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 12 октября 2012 02:33
· Личное сообщение · #12

Народ, ау. Предыдущий вопрос снимаю, ибо во всём разобрался и UCC получил. Но вот почему-то мои показания (CPU Load) не совпадают с "RMClock", а именно, в простое разница в 5-6%, но с увеличением загрузки проца выравнивается и при полной загрузке одного ядра (50%) мои цифры идентичны RMClock'овским. Из этого можно сделать вывод, что хитрая прога считает процентаж нелинейно. Отсюда вопросы: по какой формуле, зачем автор так поступил, и надо ли это вообще?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 12 октября 2012 09:50
· Личное сообщение · #13

Ну если так интересно, по какой формуле считает прога, возьми да отревёрси, форум-то реверса, как-никак. Тогда и узнаешь, надо или нет.



Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 13 октября 2012 02:44 · Поправил: FalseMaster
· Личное сообщение · #14

Archer, к сожалению я не тот чел из "Матрицы", который видел баб в красном шмоте глядя на моник с циферами, и копаться в asm-листинге буду до седых волос, а я хочу всё и сразу Кстати, форум-то реверса, но раздел-то "Программирование". Вообще, у меня сложилось впечатление, что "RMClock" искусственно завышает показания при малой загрузке ЦП. Мне непонятно только, зачем это делается, а главное, стоит ли мне вводить коэффициент или же достаточно просто считать процент от деления дельты UCC на дельту TimeStamp, как я сейчас и делаю.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 13 октября 2012 09:56
· Личное сообщение · #15

Тогда есть топик Поиск специалистов, где оформляется софт, делается описание типа "хочу алгоритм на языке ХХХ в сорцах из программы УУУ, который делает ..." и выставляется бюджет, там на бабу в красном шмоте посмотрят за тебя. Поскольку это уже не программирование, типа хочу сделать ХХХ, а скорее я делал ХХХ, но не совпадает с УУУ, хочу узнать, как там.

| Сообщение посчитали полезным: ClockMan, DimitarSerg

Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 14 октября 2012 00:02
· Личное сообщение · #16

Не хочу я никаких алгоритмов. Да и вопрос мой как-то незаметно перетёк к нюансам работы процессора, ибо должна же быть причина, по которой автор "RMClock" ввёл некую дополнительную величину в формулу. Я по простоте душевной думал, что знающие люди поделятся мыслями на этот счёт, но нет, так нет, оставлю пока как есть.


 eXeL@B —› Программирование —› Как получить уровень загрузки ЦП
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати