RiD |
|
Темы:
30
Сообщения:
400
Участник с: 27 июня 2011
|
Привет! Я смотрю как-то так tmp0=0; for i in `seq 20`; do tmp1=$(cat /proc/stat | head -2 | tail -1 | sed 's/cpu0 //;s/ /\n/' | head -1); rez=$(($tmp1 - $tmp0)); echo $rez; tmp0=$tmp1; sleep 1; done Вопрос: Как часто обновляется /proc/stat? Иными словами, какое значаение sleep самое адекватное? Хочу сделать минималистичный статус бар у себя в dwm, т.е. мне нужно на Си как-то узнать загрузку ядра. Пока что планируется с интервалом в секунду парсить /proc/stat, находить разность, и умножать её на некий коэффициент.. Весь вопрос в том, каким должен быть этот коэффициент. С слипом в 1 секунду, у меня получаются значения где-то на 5-10% больше чем у top. Впрочем все мы знаем, что top, что htop, показывают разное “среднее по больнице”. Какой самый точный способ измерения загрузки цпу? |
sleepycat |
|
Темы:
98
Сообщения:
3291
Участник с: 19 июля 2011
|
не знаю про Си, но вот как сейчас на шелле слямзал (взял с wmfs новый, так старый никак найти не могу) для wmfs2 бара. может что подойдет. (не точно, но достаточно близко к правде, чтобы пользоваться) cpu="$(eval $(awk '/^cpu /{print "previdle=" $5 "; prevtotal=" $2+$3+$4+$5 }' /proc/stat); sleep 0.4; eval $(awk '/^cpu /{print "idle=" $5 "; total=" $2+$3+$4+$5 }' /proc/stat); intervaltotal=$((total-${prevtotal:-0})); echo "$((100*( (intervaltotal) - ($idle-${previdle:-0}) ) / (intervaltotal) ))")" echo "$cpu"
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
|
RiD |
|
Темы:
30
Сообщения:
400
Участник с: 27 июня 2011
|
sleepycat, у меня со слипом в 0.4 будут одни нули, 99% времени. В принципе, оно конечно отображает - что ничего не грузится и всё ок, но эстетически хотелось бы видеть там какие-то небольшие, но значения. По-этому интервал обновления надо брать достаточно большой. У меня даже с секундой на 20 замерах, половина нулей. Эмпирически, во время пересборки, пришел к выводу что самое адекватное значение sleep 0.95. Надежда этого поста в том, что придёт кто-то умный и скажет “абсолюнтно точное значение = ”. Скажет это из какиех-то принципиальных соображений. Например он будет знать, где логика этого файла реализована. Или как ядро “для себя” считает эти значения итд.. На Си это добро будет выглядеть еще проще. За скрипт спасибо. Не знаю я awk, всё чаще и чаще это “сковывает”. Буду разбираться. |
sleepycat |
|
Темы:
98
Сообщения:
3291
Участник с: 19 июля 2011
|
не буду рекламировать, но мне показалось что оно шустрее пашет нежели sed. Опять же только там, где можно обойтись без сед. Да, то что я дал (из скипта) у меня пашет, видел и 80% работая в браузере, 0 тоже вижу, но редко. Но я так и думал, что Вы глянете на слип))) Это нормально, что у Вас не подходит, я это и ожидал. Просто дал , что было.
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
|
RiD |
|
Темы:
30
Сообщения:
400
Участник с: 27 июня 2011
|
Всё-таки это нетривильный вопрос. sleepycat дал значение 0.4. У меня адекватное 0.95. Стоит ли говорить, что у меня на работе, как 0.4, так и 0.95 совершенно не подходят :-) И тем не менее, top работает “корректно” на всех машинах. Судя по strace top парсит /proc/stat. Значит он из каких-то соображений, подбирает коэффициент. Какой физический смысл имеют значения в /proc/stat ??? |