Как мой компьютер может использовать 300% вычислительной мощности ПК?

14567
Frankenmint

Я играю со сценарием, и я очень увлекся (он все еще работает, и все же мой компьютер еще не умер). Я запускаю 17 итераций сценария (с целью сбить мой компьютер).

Глядя на монитор активности, я вижу, что у каждого процесса Python есть свой уникальный pid, и каждый из них, похоже, занимает около 17-20% моей вычислительной мощности ... Как это возможно? Мой компьютер волшебным образом увеличил мощность на 200% и нарушил где-то законы термодинамики?

Enter image description here

64
300% ЦП = 3 ЦП. user20574 8 лет назад 28
«Уровни мощности 400%» Nitish 8 лет назад 7
Напоминает мне обо всех тех эпизодах Star Trek, когда двигатели Warp выходят из-под контроля ... Daniel 8 лет назад 0
Это серьезный разгон! Andrew Grimm 8 лет назад 0

4 ответа на вопрос

101
Vasfed

В OS X, как и в других * nixes, загрузка ЦП измеряется для каждого ядра виртуального процессора. Если у вас есть несколько - вы можете объединить 200% и более при полной нагрузке.

Это отличается от Windows и, возможно, некоторых других систем, где загрузка ЦП рассчитывается для всего ЦП (или ЦП - я не помню, как он ведет себя при наличии нескольких физических процессоров).

Этот ответ точен только для некоторых платформ! Например, Windows сообщает об общей загрузке процессора, а не в процентах от одного ядра. fabspro 8 лет назад 21
Стоит отметить, что представление десятичной нагрузки (например, 0,5 или 2,4), сообщаемое, например, командой uptime, представляет собой _не_ сумму процента использования каждого ядра, а скорее оценку того, сколько ядер вам потребуется для обработки каждого запроса мгновенно. Я не уверен, насколько это приложение нормализует значения. Sebb 8 лет назад 2
@Sebb средняя загрузка (LA) - это среднее число процессов, ожидающих выполнения, возможно, они ожидают ввода-вывода, необязательно процессор Vasfed 8 лет назад 3
@Vasfed Измеряемое состояние «готов к выполнению» означает ожидание ЦП - ожидание ввода-вывода не учитывается. В конце концов, все процессы ожидают чего-то (кроме одного, самое большее на ядро ​​процессора, которое сейчас выполняется). Random832 8 лет назад 1
@ Random832 кажется, что это зависит от системы, в Linux он включает в себя io Vasfed 8 лет назад 0
@Vasfed Я понятия не имею, откуда вы получаете эту информацию. Эта концепция существует в системах Unix с начала 1980-х годов, и включение в нее процессов, ожидающих ввода-вывода, было бы безумным. Random832 8 лет назад 1
@ Random832 от linux man - http://man7.org/linux/man-pages/man1/uptime.1.html: «Средние значения загрузки системы - это среднее число процессов, которые находятся в работоспособном или бесперебойном состоянии. Процесс в работоспособном состоянии либо использует ЦП, либо ожидает его использования. Процесс в непрерывном состоянии ожидает некоторого доступа к вводу / выводу, например, ожидает диска. " Vasfed 8 лет назад 3
@Vasfed: В Linux и во всех других Unixen процессы, ожидающие ввода-вывода, используют нулевое время ЦП (они не запланированы для выполнения, они спят), поэтому они вносят ноль в среднее значение загрузки. Теперь, в зависимости от семантики английского языка, добавление нуля можно интерпретировать как внесение нуля в среднее значение загрузки или отсутствие вклада в среднее значение загрузки. slebetman 8 лет назад 1
Средняя загрузка @slebetman - это не время процессора, а длина очереди, например, см. http://serverfault.com/a/524818. Vasfed 8 лет назад 4
@Vasfed: если быть более точным, речь идет о длине «готовой» очереди. Очередь задач, готовых к запуску. Процессы, ожидающие ввода-вывода, не находятся в очереди. Таким образом, они дают нулевую среднюю нагрузку. slebetman 8 лет назад 1
@slebetman попробуй пример ruby ​​из этого ответа на linux - из-за GIL в MRI ruby ​​работает только один поток за раз, поэтому большинство из этих потоков ждут ввода-вывода или мьютекса, но быстро генерирует 30+ LA с процессором, почти не работающим (обратите внимание, что это относится только к linux, osx, * bsd и т. д., не считайте IO в LA) Vasfed 8 лет назад 1
Обратите внимание, что, хотя диспетчер задач Windows сообщает о значении загрузки ЦП по шкале «100% = полная загрузка всех ядер», значение ЦП * время * указывается для каждого ядра - процесс, который использует 100% ЦП в течение 5 секунд на Четырехъядерная система сообщит об этом как 20 секунд процессорного времени. Источник: показатель "CPU Time" моего четырехъядерного ПК с Windows для бездействующего процесса в 4 раза больше моего времени безотказной работы, а время бездействия приближается к бесконечности. Dan Henderson 8 лет назад 0
Я думаю, что вы имеете в виду "несколько розеток". Каждое ядро ​​(или пара гиперпоточных логических ядер) в процессоре Intel * является * отдельным физическим процессором. Просто они оказываются на одном и том же куске кремния, тесно связаны между собой и разделяют нижние уровни иерархии кэша. Peter Cordes 8 лет назад 0
@Vasfed Эта страница руководства не так точна, как могла бы быть. Непрерывное состояние используется только для «быстрого» ввода-вывода, обычно для дисков; эти процессы будут иметь состояние ** B ** в `ps`. Процессы, заблокированные для медленного ввода-вывода, такие как сеть и терминалы, будут в состоянии `S` и не будут влиять на среднее значение нагрузки. Barmar 8 лет назад 0
81
Daniel B

OS X и Linux и, возможно, другие операционные системы UNIX (или, скорее, наиболее распространенные инструменты в этих системах) отображают использование ЦП иначе, чем Windows. В Windows 100% означает « все используемые ресурсы процессора». В Linux это означает, что один «поток» (как в Hyper-threading) полностью занят. Таким образом, он может достигать (Number of Threads per Core) * (Number of Cores per CPU) * (Number of CPUs)всего.

Хотя это и не совсем связано, еще один интересный факт: Windows 10 дополнительно нормализует загрузку ЦП, используя текущее состояние регулирования ЦП. Таким образом, процессор с частотой 2 ГГц, работающий на частоте 1 ГГц, будет загружен только на 50%.

Интересный факт. :) Hennes 8 лет назад 7
А с Turbo Boost Windows сообщит, что процессор работает более 100% Martheen Cahya Paulo 8 лет назад 7
Я думаю, что это путь BSD, а не способ * nix в целом. Я вижу то же самое на моем Mac и моем FreeBSD. JDługosz 8 лет назад 0
@ JDługosz Я уверен, что это верно и для Linux, по крайней мере для некоторых его инструментов. Я уверен, что `top` ведет себя так, например. reirab 8 лет назад 1
12
Tetsujin

Как уже указывалось в нескольких ответах, Mac показывает процент загрузки процессора для каждого процесса как «процент от одного ядра», поэтому вы должны разделить его на количество ядер [включая HT как «двойной»]

Если вы не уверены, сколько виртуальных ядер у вас есть, Cmd ⌘ 3 откроется панель «Журнал активности» в Activity Monitor, где вы можете просто посчитать полосы;)

enter image description here

Непосредственно под тем местом, где вы отрубили изображение, находится информация, необходимая для быстрого определения фактического общего использования для System :, User: & Idle: в этом случае ваше простое итоговое значение составляет 100%.

enter image description here

хотя на самом деле? 24 ядра ???? Я едва получил 4 :) TIL действительно спасибо за то, что поделился этим !: http://puu.sh/nNrHU/f2abb55dc7.png Frankenmint 8 лет назад 4
ааа ... да - это Mac Pro 5,1 - последняя из "терок". Двойной 6-ядерный Xeons [+ HT];) Tetsujin 8 лет назад 5
6
rahuldottech

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

Кроме того, как отмечает @Vasfed, потребление ресурсов процессора измеряется на каждое ядро ​​процессора. Использование нескольких ядер может означать более 100% использования ...

Гик иногда натыкается на это явление и ошеломляется, пока суперпользователь не приходит ему на помощь ...; D

@underscore_d Да ... но когда я ответил, был только один ответ. Другие (по общему признанию лучше) ответы были опубликованы позже ... rahuldottech 8 лет назад 0
честно говоря, я должен был проверить времена, прошедшие с уровня "дней" ... это не так уж плохо: p underscore_d 8 лет назад 0