LINUX.ORG.RU

Команда для получения % загрузки CPU

 ,


0

1

Мигрирую Homeassistant с Alwinner A20 1Gb на Tanix W2 400 mb. Старый девайс 32bit и его дропают, новый 64bit, но у него битая память, обошёл строкой maxmem=486 в kernel cmdline. Нехватку памяти обошёл zswap+zram и лимитами в докере. На удивление хватает и для HA и для Adguardhome, всё летает. На новом девайсе есть экранчик, хочу вывести в него человеческие проценты загрузки CPU.

Подскажите однострочник для получения загрузки CPU в человеческом виде, просто цифры от 0 до 100.

Перемещено hobbit из general

чтобы получить цифру от 1 до 100, я думаю надо поделить на nproc и умножить на 100. математики исправят

anonymous
()

Извините за оффтоп, но…

maxmem=486 в kernel cmdline

Она точно работает? Такой опции в cmdline нет https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html Зато есть memmap, которая в твоём случае будет более актуальна, поскольку позволяет указать битые участки памяти.

u5er ★★★
()

Зарузка измеряется за промежуток времени.

Cамое просто это считать загрузку по /proc/stat.
Берем первые 7 чисел первой строки и сохраняем.

Складываем 1,2,3,6,7 число из запомненного =>OLD_USE.

Через какое-то время берем еще раз 7 чисел первой строки.
Складываем 1,2,3,6,7 число =>NEW_USE.

(NEW_USE-OLD_USE)/<секунды между чтениями>/<число_ядер> = общая загрузка всех ядер за указанное время.

Аналогично можно подсчитать загрузку каждого ядра.

PS Для проверки:

складываем все 7 запомненных чисел => OLD_SUMM.
складываем все 7 чисел из последнего чтения => NEW_SUMM.
(NEW_SUMM-OLD_SUMM)/<секунды между чтениями>/<число_ядер> = 100

vel ★★★★★
()
Ответ на: комментарий от u5er

Ошибся, там просто mem. А memmap я пробовал и выяснил что выше 500 всё мертвое, похоже работает только 1-ый чип памяти из 4-ёх. Ну и 86 съедает cma, отключить через cma=0 не получилось, прописал mem=486, системе доступно ровно 400.

kcepokop
() автор топика

все просто - плагин для LXDE панели в реальном времени. И не только, может показать температуру в придачу.Нафига тебе команда.А если сада,то командная строка(proc).

nicholas_ru
()
Последнее исправление: nicholas_ru (всего исправлений: 3)
Ответ на: комментарий от nicholas_ru

Монитора нет, в корпусе девайса экран на 4 сегмента, в оригинале он время выводит, а я хочу в него выводить % загрузки проца командой echo. Да и зачем мне LXDE в Homeassistant’е )

kcepokop
() автор топика
Ответ на: комментарий от kcepokop

Попробуй сбросить частоту памяти в devicetree

Там ЕМНИП чипы памяти так расположены, что с ростом частоты более дальние отваливаются первыми в порядке очереди.

anonymous
()
Ответ на: комментарий от kcepokop

Есть планировщик cron. С ним можно выводит в файл нагрузку процессора к примеру в файл с периодичностью.

nicholas_ru
()

Подскажите однострочник

«Гусары, молчать!» - заорал догадливый поручик…

hobbit ★★★★★
()

В Homeassistant есть интеграция «System Monitor», она создаёт «sensor.system_monitor_processor_use» с человеческим показателем загрузки CPU. А из HA уже можно значения этого сенсора прямо в дисплей писать.

kcepokop
() автор топика
Ответ на: комментарий от vel

Невронки легко выдают рабочий код для этого, например:

#!/bin/bash
read cpu user nice system idle iowait irq softirq steal guest < /proc/stat
total=$((user + nice + system + idle + iowait + irq + softirq + steal))
idle_total=$((idle + iowait))

sleep 1

read cpu user2 nice2 system2 idle2 iowait2 irq2 softirq2 steal2 guest2 < /proc/stat
total2=$((user2 + nice2 + system2 + idle2 + iowait2 + irq2 + softirq2 + steal2))
idle_total2=$((idle2 + iowait2))

total_diff=$((total2 - total))
idle_diff=$((idle_total2 - idle_total))

cpu_usage=$((100 * (total_diff - idle_diff) / total_diff))
echo "CPU usage: $cpu_usage%"

@kcepokop на заметку

legolegs ★★★★★
()
Ответ на: комментарий от anonymous

На самом деле loadavg более информативно, чем какие-то проценты.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

Спасибо, взял на заметку. Хотя уже понял что загрузка проца на экранчике мне не нужна, там теперь забортная температура. Просто сначала думал что проц будет мучаться из-за постоянного свопа в zram и захотел это видеть на экране приставки, но оказалось что проц не особо то и напрягается ) Попутно выяснилось что помимо битой памяти, ещё и ядро 4 глючит, отключил его через maxcpus=3, ну и overcommit включил чтобы oom не приходил.

kcepokop
() автор топика
Ответ на: комментарий от dmitry237

а если для скрипта

то top -bn 1, чтобы сразу отсечь esc-последовательности

$  & {
      $str = (top -bn 1 | sls '(?<=%Cpu.+:\s+).+') -split '\s+'
      'Cpu load: {0:f1}%' -f [linq.enumerable]::Sum([float[]] $str[1,3,5,9,11,13,15])
     }
Cpu load: 2,2%

Что почти сходится с метриком на i3status

dmitry237 ★★★★★
()
Ответ на: комментарий от legolegs

Прислали такой, лежал год невыкинутый, а потом выяснилось что он вполне бодрый, хоть и калека. У меня ещё два таких же есть только исправных, я на них и проверял что проблема не в настройках, а в железе, там просто sd карту переставляешь и сразу видно что исправный с 500M норм работает, а этот барагозит. Отрезал ядро 4 и всё норм. Ещё и ядро 3 изолировал чтобы на нём только контейнер c vlc работал и спокойненько играл hifi радио онлайн вo флак формате. Вот такой итоговый cmdline получился: maxcpus=3 isolcpus=2 rcu_nocbs=2 mem=500M threadirqs mitigations=off

kcepokop
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.