LINUX.ORG.RU

Человеко-понятный вывод использования CPU

 


0

1

Приветствую.

Подскажите, ни кто ли не сталкивался с нормальной (т.е. виндовой) реализацией просчета использования процессорного времени в Linux?

Под «нормальной» реализацией я подразумеваю просчет, где используемые каким-то процессом 100% ставят раком систему, а выше 100% априори не бывает.

Как работает юниксовая реализация - знаю, умею, могу, пользуюсь. Интересует более логичная метрика.

Нужно для «инфы» о процессе: https://www.youtube.com/watch?v=0ks2Z0vJiis (для демонстрации график строится рандомом) - для просчета утилизации разгребаю /proc/pid/stat.

Если не существует или я дурак - ничего страшного, и так работает.

Благодарю!

★★★★★

Последнее исправление: windows10 (всего исправлений: 1)

Под «нормальной» реализацией я подразумеваю просчет, где используемые каким-то процессом 100% ставят раком систему, а выше 100% априори не бывает.

Для этого надо обычные показания разделить на количество ядер. Можно сделать скриптом одну строк или патчем в пару строк в любой любимый монитор. Ну или скриптом в несколько строк, если позарез надо количество ядер не хардкодить, а определять.

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

Я бы, кстати, рекомендовал всё же по ядрам мониторить, а не вот это общее-сводное. Общая нагрузка в процентах имела смысл, когда ядер было одно-два, ну может при четырёх ещё как-то. Но если ядер 16, то лучше видеть именно нагрузку каждого. Ведь условно показания в 7% могут означать и нормально распределённую нагрузку по всем ядрам и, соответственно, отсутствие проблем, а может означать одно ядро загруженное на 100% каким-то однопоточным процессом, что может быть нормой, а может и не быть.

Тут даже уже неважно, отображается оно как 1600% максимум, или как 100%. Первое лишь несколько прибавляет точности, но не решает основной проблемы — малой информативности этой инфы во всех случаях кроме нагрузки близкой к 1600% (или 100% «приведённых»).

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)

Да там проблемы в том что процессоры с автопазгоном + многопроцессность с многопоточностью не позволяют как-то в попугаях нагрузке честно измерить. Только по отдельным ядрам, да и то я подозревают, что нагрузка там фонаря

anonymous
()

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

anonymous
()

Проблема в том, что система встаёт раком не тогда, когда ядра загружены на 100%, а тогда, когда ядра загружены и планировщик не может переключить задачу, либо когда перегружен ввод-вывод.

Запусти штук пятьдесят dd if=/dev/urandom of=/dev/zero и ты увидишь, что не смотря на загрузку процессора в 100%, отзывчивость система не потеряет.

И как эту отзывчивость измерять — по всей видимости, метрики ещё не придумали.

P.S. Не знаю, что там в Windows.

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

Только не просто ядер, а включая виртуальные гиперпоточные ядра.

А насчёт того, что в винде нормально сделано, так это не так. Вот стоит у меня в ноутбуке 1360P, это 20 ядер. Получается что каждое ядро 5%. Первое это то, что ядра там гетерогенные. Второе это то, что увидев 5% можно подумать, что проц еле нагружен. А на самом деле там одно P ядро бустится до предельных своих частот и греется при этом соответственно

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

Может тем, что линуксовая — это как раз нормальная, и нитакусик в данном случае ты?

В самом желании видеть так, как тебе лично удобнее, впрочем, нет ничего плохого.

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

Может тем, что линуксовая — это как раз нормальная, и нитакусик в данном случае ты?

Если тебе нормально иметь критерий «CPU usage», значение которого может превышать 100% - попробуй сначала в литровую банку залей полтора литра воды, а потом открой учебник математики за 5-й класс, и почитай что такое проценты.

В самом желании видеть так, как тебе лично удобнее, впрочем, нет ничего плохого.

При чем здесь МОЕ желание к утверждению, что пользователь во вкладке «загрузка процессора» хочет видеть реальную цифру, а не какие-то планировщики, старттаймы, аптаймы и прочие страшные слова? Windows - показывает корректно. 5% - ни о чем. 50% - уже ну такое. 100% - система становится колом. Что логично, потому что если программа использует весь процессор, то остальное будет либо не работать, либо жутко тормозить. MacOS - тоже показывает правильно, хотя заставить эту систему встать колом и сложновато.

Этого достаточно, чтобы осознать какая метрика понятнее и логичнее.

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

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

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

Если тебе нормально иметь критерий «CPU usage», значение которого может превышать 100% - попробуй сначала в литровую банку залей полтора литра воды, а потом открой учебник математики за 5-й класс, и почитай что такое проценты.

Зачем мне заливать в единую банку какую-то воду, если процессор — не банка, и не единая сущность. У каждого ядра есть нагрузка в процентах. Именно её и имеет смысл смотреть. Есть суммарная загрузка всех ядер, которая не особо познавательна, но зачем-то есть. Ну вот в линуксе (и в бздях и в соляре, да и практически везде) как правило эти проценты просто складывают. Это общая нагрузка в процента нагрузки на ядро. Соответственно, максимальная общая нагрузка равна количеству ядер по сто каждое. В винде её делят на количество ядер, видимо, руководствуясь той же логикой, что для некого сферического юзера в вакууме есть единый неделимый процессор и только его общая нагрузка. Такой подход тоже, конечно, имеет право на существования и по-своему логичен. Правда объективно намного менее точные значения выходят, особенно для систем с большим количеством ядер или процессоров.

При чем здесь МОЕ желание к утверждению, что пользователь во вкладке «загрузка процессора» хочет видеть реальную цифру, а не какие-то планировщики, старттаймы, аптаймы и прочие страшные слова?

При том, что этот самый весьма конкретный пользователь — ты. Другие пользователи хотят тоже хотят «реальные цифры», только более осмысленные.

5% - ни о чем. 50% - уже ну такое. 100% - система становится колом.

Вот прямо так это не работает ни в линуксе ни в винде. Всё сложнее. Хотя в определённых юзкейсах это так, да.

Я ничего не имею против того, что тебе такой подход нравится больше. Странно лишь утверждать, что все должны подстроиться под твои хотелки, которые ещё и объективно уменьшают точность отображаемых данных.

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

Тебе уже писали, что общая загрузка это тупость.

Разумеется, не тупость. Вполне осмысленная и измеряемая величина

Если хотя бы одно ядро загружено около ста, значит процессор уже является бутылочным горлышком.

Ну и что?

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

Ну давай. Сколько гипертредам дашь, сколько efficiency-ядрам? На максимальную частоту нормировать? На текущую умножать?

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

математик, банки пересчитай. мало того, что их много, они ещё и разные.

Какие еще банки?

Открываю top. Колонка подписана %CPU. Тебе подсказать как в английском языке формируется множественное число?

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

В аналогию смотрю не можешь, окей, буду как ребенку:

1. Открываешь команду «top»;

2. Ищешь название таблицы «%CPU»;

3. Пытаешься увидеть, где в названии говорится про ядра, процессоры, потоки и прочую дичь;

4. Запускаешь какой-нибудь емкий процесс и видишь как он занимает 146%.

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND 

Слушай, да я устал с тобой спорить. Невозможно? Пишешь «это не возможно», и все.

windows10 ★★★★★
() автор топика
Ответ на: комментарий от windows10
  1. открываешь /proc/cpuinfo
  2. осознаешь, что CPU в линуксе это не про число сокетов вообще
  3. если хочешь поменять устоявшуюся десятилетиями терминологии, давай сразу ссылку на LKML, где ты это обсудил с сообществом
t184256 ★★★★★
()
Последнее исправление: t184256 (всего исправлений: 1)
Ответ на: комментарий от t184256

Сколько гипертредам дашь, сколько efficiency-ядрам?

измеряется в бенчмарках отдельно по ядрам

На максимальную частоту нормировать?

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

seiken ★★★★★
()
Последнее исправление: seiken (всего исправлений: 1)
Ответ на: комментарий от windows10

Колонка подписана %CPU

Тебе подсказать как в английском языке формируется множественное число?

Может, это тебе подсказать?

Подписано всё правильно. Проценты от (одного) CPU.

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

Ну вот в линуксе (и в бздях и в соляре

Странно, а почему в man top складывание процентов названо Irix-mode, а когда делится на число ядер (как я понимаю, то что хочет ТС) названо Solaris mode? И обе эти реализации «юниксовые» и возникли задолго до того, как винда в многопроцессорность научилась...

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

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

Разве планировщик не будет перебрасывать поток с ядра на ядро?

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

P.S. Не знаю, что там в Windows.

В винде есть Process Explorer

Но вообще там тоже сложно померять это. Потому что винда очень хитро работает с графическими процессами пользователя - например она отдает приоритет текущему пользовательскому окну, поэтому даже при загрузке, неочевидно что будет тормозить на вид

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

Если тебе нормально иметь критерий «CPU usage», значение которого может превышать 100% - попробуй сначала в литровую банку залей полтора литра воды, а потом открой учебник математики за 5-й класс, и почитай что такое проценты.

Стоит заметить что тут ни винда, ни линукс нормально не сделали. «CPU usage» - это использование процессора, т.е. сколько процессеоров, такой должен и быть максимум. У винды же он строго до 100%, что намекает на использование максимум одного процессора одновременно, в линуксе же он считает ядра, а не процессоры.

попробуй сначала в литровую банку залей полтора литра воды, а потом открой учебник математики за 5-й класс, и почитай что такое проценты.

Очевидно полтора литра тут заливается в 16 литровых банок, или сколько там у вас процессоров, а не в одну.

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

Да вроде какое-то API винды использует просто, которое эту информацию отдает.

Возможно это даже какое-то недокументированное API. Недокументированное API винды это вообще, особая, уличная магия. Некоторые умельцы с его помощью даже реализовывали всякое типа fork, ну типа как в Cygwin.

lovesan ★★★
()
Последнее исправление: lovesan (всего исправлений: 2)
Ответ на: комментарий от seiken

Ну и что?

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

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

Линуксоиды нитакусики

С таким подходом можно заявить, что все, у кого не винда - нетакусики.

Видишь ли в чём тут дело, линукс - это не винда, а совсем другая система. Разумеется тут всё будет по-другому. Пожалуй, единственная система, где ты можешь требовать аналогий - РеактОС. Они как раз такусики, да?

Нельзя

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

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

а потом открой учебник математики за 5-й класс, и почитай что такое проценты.

Ты его сам-то хоть раз открывал? 100% в винде это сумма мощностей всех ядер, а 100% в линуксе — одного ядра (или одного потока, если гипертрединг).

При перегреве отдельных ядер срабатывает троттлинг по температуре, и эти 100% (что в винде на все ядра, что в линуксе на одно ядро/поток) фактически могут оказаться и 80%, и даже 40%, потому что частоты срезаны чтобы не спалить чип.

Потому считать нагрузку в процентах неправильно.

И твоё "нормально" это прям наглый вброс, так что забанься дебил поддерживаю @Vilicus.

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

Линуксоиды нитакусики

С таким подходом можно заявить, что все, у кого не винда - нетакусики.

Пользователи винды именно так и считают. Все, поголовно.

mord0d ★★★★★
()

А если серьезно - то всем спасибо.

Попробую в своей DE-шечке организовать поядерный мониторинг использования процессора процессом.

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

Так-то в htop тоже есть такая штука, называется CPU avg (по умолчанию выключена, и обычно никто не включает, ибо штука так-то довольно бесполезная — по ядрам информативнее). Но как я понял, ТСу программно надо в скрипте использовать.

CrX ★★★★★
()