Какво точно е натоварването на процесора, ако инструкциите се изпълняват една по една?

Знам, че този въпрос е задаван много пъти по много различни начини, но все още не ми е ясно какво означава % натоварване на процесора.

Ще започна да обяснявам как възприемам концепциите сега (разбира се, може и със сигурност ще греша):

  • Ядрото на процесора може да изпълнява само една инструкция наведнъж. Той няма да изпълни следващата инструкция, докато не завърши изпълнението на текущата.
  • Да предположим, че кутията ви има един единствен процесор с едно ядро. Следователно паралелното изчисление не е възможно. Планировчикът на вашата операционна система ще вземе процес, ще зададе IP на входната точка и ще изпрати тази инструкция до процесора. Той няма да премине към следващата инструкция, докато процесорът не завърши изпълнението на текущата инструкция. След определен период от време той ще премине към друг процес и т.н. Но той никога няма да превключи към друг процес, ако процесорът в момента изпълнява инструкция. Ще изчака, докато процесорът се освободи, за да превключи към друг процес. Тъй като имате само едно единствено ядро, не можете да имате два процеса, изпълняващи се едновременно.
  • I/O е скъпо. Всеки път, когато процес иска да прочете файл от диска, той трябва да изчака, докато дискът изпълни задачата си, а текущият процес не може да изпълни следващата си инструкция дотогава. Процесорът не прави нищо, докато дискът работи, така че нашата ОС ще превключи на друг процес, докато дискът свърши работата си, за да не губим време.

Следвайки тези принципи, стигнах до заключението, че натоварването на процесора в даден момент може да бъде само една от следните две стойности:

  • 0% - празен ход. Процесорът не прави абсолютно нищо.
  • 100% - Зает. В момента процесорът изпълнява инструкция.

Това очевидно е невярно, тъй като taskmgr отчита %1, 12%, 15%, 50% и т.н. стойности на използване на процесора.

  • Какво означава, че даден процес, в даден момент, използва 1% от дадено процесорно ядро ​​(както се съобщава от taskmgr)? Докато даден процес се изпълнява, какво се случва с 99%?
  • Какво означава, че общото използване на процесора е 19% (както се съобщава от Rainmeter в момента)?

person Ander Juaristi    schedule 13.01.2014    source източник
comment
Ядрото на процесора може да изпълнява само една инструкция наведнъж. Той няма да изпълни следващата инструкция, докато не завърши изпълнението на текущата. Това не е вярно. Пробийте суперскалар в любимата си търсачка.   -  person David Schwartz    schedule 30.10.2017


Отговори (2)


Ако погледнете в диспечера на задачите на Windows, има процес на неактивност, който прави точно това, просто показва количеството цикли, които не правят нищо полезно. Да, процесорът винаги е зает, но може просто да работи в цикъл в очакване да дойдат полезни неща.

Тъй като имате само едно единствено ядро, не можете да имате два процеса, изпълняващи се едновременно.

Това всъщност не е вярно. Да, истинският паралелизъм не е възможен с едно ядро, но можете да създадете илюзия за едно с превантивна многозадачност. Да, невъзможно е да прекъснете инструкцията, но това не е проблем, защото повечето от инструкциите изискват малко време, за да завършат. ОС споделя времето с отрязъци от време, които са значително по-дълги от времето за изпълнение на единична инструкция.

What does it mean that a given process, at a given time, is utilizing 1% of a given CPU core

През повечето време приложенията не правят нищо полезно. Помислете за приложение, което чака потребителят да щракне върху бутон, за да започне да обработва нещо. Това приложение не се нуждае от процесор, така че спи през повечето време или всеки път, когато получи отрязък от време, просто влиза в режим на заспиване (вижте цикъл за събития в Windows). GetMessage блокира, така че това означава, че нишката ще спи, докато пристигне съобщението. И така, какво всъщност означава натоварването на процесора? Представете си, че приложението получава някакви събития или данни, за да прави неща, то ще извършва операции, вместо да спи. Така че, ако използва X% от CPU, това означава, че през периода на вземане на проби това приложение е използвало X% от CPU времето. Използването на процесорно време е средна метрика.

PS: За да обобщим концепцията за натоварване на процесора, помислете за скорост (от гледна точка на физиката). Има моментни и средни скорости, така че що се отнася до натоварването на процесора, има и моментни и средни измервания. Моменталното винаги е равно на 0% или 100%, тъй като в даден момент процесът или използва CPU, или не. Ако процесът е използвал 100% от CPU в течение на 250 ms и не е използвал за следващите 750 ms, тогава можем да кажем, че процесът е натоварил CPU за 25% с период на вземане на проби от 1 секунда (средно измерване може да бъде само прилагани с определен период на вземане на проби).

person Andrey    schedule 13.01.2014

http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages

Едноядрен процесор е като едно платно за движение. Представете си, че сте оператор на мост ... понякога вашият мост е толкова натоварен, че има коли, наредени за преминаване. Искате да уведомите хората как се движи трафикът по вашия мост. Достоен показател би бил колко коли чакат в определен момент. Ако не чакат коли, пристигащите шофьори знаят, че могат да минат веднага. Ако колите са с резервно копие, шофьорите знаят, че ги очакват закъснения.

Това е основно натоварването на процесора. „Колите“ са процеси, използващи част от процесорното време („пресичане на моста“) или поставени на опашка за използване на процесора. Unix нарича това дължина на опашката за изпълнение: сумата от броя процеси, които се изпълняват в момента, плюс броя, които чакат (на опашка) за изпълнение.

Вижте също: http://en.wikipedia.org/wiki/Load_(computing)

person mustafa.0x    schedule 13.01.2014
comment
Как отговаря на въпроса за неактивните състояния? - person Andrey; 13.01.2014
comment
Да, процесорът може (теоретично) да не работи. - person mustafa.0x; 13.01.2014