Numero di processori in / proc / cpuinfo


26

Mentre stavo imparando sul carico della CPU, sono venuto a sapere che dipende dal numero di core. Se ho 2 core, il caricamento 2 darà un utilizzo della CPU del 100%.

Quindi ho provato a scoprire i core (so già che il sistema ha 2 core, 4 thread quindi 2 core virtuali Controlla qui sul processore ). Quindi ho eseguito cat /proc/cpuinfo Che mi ha dato

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 69
model name  : Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
stepping    : 1
microcode   : 0x17
cpu MHz     : 774.000
cache size  : 4096 KB
physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2
apicid      : 0
initial apicid  : 0
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips    : 3591.40
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 69
model name  : Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
stepping    : 1
microcode   : 0x17
cpu MHz     : 1600.000
cache size  : 4096 KB
physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2
apicid      : 1
initial apicid  : 1
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips    : 3591.40
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor   : 2
vendor_id   : GenuineIntel
cpu family  : 6
model       : 69
model name  : Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
stepping    : 1
microcode   : 0x17
cpu MHz     : 800.000
cache size  : 4096 KB
physical id : 0
siblings    : 4
core id     : 1
cpu cores   : 2
apicid      : 2
initial apicid  : 2
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips    : 3591.40
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor   : 3
vendor_id   : GenuineIntel
cpu family  : 6
model       : 69
model name  : Intel(R) Core(TM) i7-4500U CPU @ 1.80GHz
stepping    : 1
microcode   : 0x17
cpu MHz     : 774.000
cache size  : 4096 KB
physical id : 0
siblings    : 4
core id     : 1
cpu cores   : 2
apicid      : 3
initial apicid  : 3
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid
bogomips    : 3591.40
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

Ora sono totalmente confuso. Mostra 4 processori, con 2 core CPU. Qualcuno può spiegare questo risultato?

Una volta che il mio carico della cpu era 3.70, è questo carico massimo? Ancora a quel tempo la CPU era al <50%.

Che dire di turbo boost? Tutti i core sono turbo o solo fisici?

Qualche metodo in Ubuntu per ottenere l'attuale frequenza della CPU per vedere se il processore è su turbo boost o no?

Il carico era di 3,70 circa al 100%. Ma l'utilizzo della CPU non era del 100% a causa del tempo di risposta IO. Ciò non significa che l'IO Device sarà alla massima velocità, ma l'Io Device sarà occupato al 100%, il che a volte influisce sulle applicazioni che utilizzano IO, ad esempio: la musica potrebbe interrompersi.


2
L'hyper threading è il motivo per cui vedi 4 invece di 2.
derobert il

1
Sia la documentazione che cpuinfo ti dicono che hai due core CPU. I processori 0 e 1 sono sul core 0 mentre i processori 2 e 3 sono sul core 1 (guarda la linea core id). Il physical idti dà il chip (credo). Qui è 0 per tutti i processori, quindi hai solo un chip.
Lgeorget,

Quindi qual è il carico del processore al 100% ... 2 o 4?
Madhurendra Sachan,

Che cos'è il processore qui?
Madhurendra Sachan,

Si noti che la definizione di thread di Intel ("A Thread, o thread di esecuzione, è un termine software per la sequenza ordinata di base di istruzioni che può essere passata o elaborata da un singolo core della CPU ") può far pensare che con 2 core e 4 thread, come indicato nelle specifiche, 2x4 = 8 thread sono in esecuzione. In effetti hai 4 thread in totale e 2 core sembrano 4. La definizione della tecnologia Intel® Hyper-Threading è più chiara: "fornisce due thread di elaborazione per core fisico " e spiega meglio che il tuo sistema vede 4 processori / fratelli fuori di 2 core CPU montati su un chip
XavierStuvw

Risposte:


35

Le parole "CPU", "processore" e "core" sono usate in modi un po 'confusi. Si riferiscono all'architettura del processore. Un core è la più piccola unità indipendente che implementa un processore generico; un processore è un assemblaggio di core (su alcuni sistemi ARM, un processore è un assemblaggio di cluster che sono essi stessi assemblaggi di core). Un chip può contenere uno o più processori (i chip x86 contengono un singolo processore, in questo senso del word processor ).

Hyperthreading significa che alcune parti di un core sono duplicate. Un core con hyperthreading è talvolta presentato come un assemblaggio di due "core virtuali" - il che significa che non ogni core è virtuale, ma che il plurale è virtuale perché questi non sono effettivamente nuclei separati e a volte dovranno aspettare mentre l'altro core è facendo uso di una parte condivisa.

Per quanto riguarda il software, esiste solo un concetto utile quasi ovunque: la nozione di thread paralleli di esecuzione. Pertanto, nella maggior parte dei manuali software, i termini CPU e processore sono usati per indicare qualsiasi componente hardware che esegue il codice del programma. In termini hardware, questo significa un core o un core virtuale con hyperthreading.

Così topsi mostra 4 CPU, perché si può avere 4 thread in esecuzione contemporaneamente. /proc/cpuinfoha 4 voci, una per ogni CPU (in questo senso). I processornumeri (che sono il numero delle voci in ) corrispondono a questi 4 thread.cpuNUMBER/sys/devices/system/cpu

/proc/cpuinfo è uno dei pochi posti in cui ottieni informazioni su quale hardware implementa questi thread di esecuzione:

physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2

significa che cpu0è uno dei 4 thread all'interno del componente fisico (processore) numero 0, e che è nel nucleo 0 tra 2 in questo processore.


Bella spiegazione che hai lasciato 3 domande Once my cpu load was 3.70, Is this maximum load? Still at that time cpu was at <50%., What about turbo boost ? Are all cores are turbo boosted or only physical ?eHow to check frequency.
Madhurendra Sachan

@MADTerry Quale programma ha riferito che il "carico della cpu era 3,70", in che termini esattamente? Intendi la media del carico? Cosa intendi con "cpu era <50%"? Per quanto riguarda Turbo Boost, non ne ho familiarità, ma non vedo perché non siano tutti potenziati. Tutti i core sono fisici, a meno che tu non stia eseguendo una macchina virtuale: come spiego nella mia risposta, in "core virtuali", non sono i core che sono virtuali, è la loro separazione.
Gilles 'SO- smetti di essere malvagio' il

carico medio. uptime.Per cpu intendevo utilizzo della cpu. Ho capito perché. Ma come verificare la frequenza o verificare se la CPU è potenziata con turbo?
Madhurendra Sachan,

Direi anche che, in termini di software di alto livello, sei piuttosto interessato ai processi (vedi top, uptime). Quale unità hardware si occupa dei processi è in definitiva una questione di software di basso livello (compilazione, sistema operativo). Il rapporto cpuinfo riassume il fatto che ogni processore fisico (uno dei vari CPU su un dado) può espandere le sue capacità di calcolo con talenti tecnologici come il multithreading. Considererà "qualsiasi cosa" che può occuparsi di un processo alla volta come un processore. Nell'ottica contabile di cpuinfo, le capacità del dispositivo portano al conteggio totale dei "processori"
XavierStuvw,

13

Stavo solo rispondendo alla tua prima domanda. Nell'output cat /proc/cpuinfoè possibile visualizzare le seguenti informazioni: -

physical id : 0
siblings    : 4
core id     : 0
cpu cores   : 2

Puoi vedere il conteggio di siblings is 4e cpu cores is 2. cpu coresessere 2 è quel numero totale di core nel processore che può essere verificato dalle specifiche fornite nell'URL dell'intell che hai fornito. Allo stesso modo siblingsè quello determinato dal numero di thread fornito da HTT di Intel.

Allo stesso modo, per l'id fisico è il 0che indica che esiste un solo chip del processore e per gli ID del core è possibile vedere 0 and 1che sono 2 core nel processore.

Aggiornamento: aggiunta di risposte alle altre domande.

Che dire di turbo boost? Tutti i core sono turbo o solo fisici?

Bene, dirò, tutti i core attivi sono potenziati con turbo. Ehi amico, avresti dovuto dare un'occhiata agli esempi della nostra amata Wikipedia . Spiegato anche con i calcoli.

Any method in ubuntu to get current cpu freq. if processor is on turbo boost or not.

Turbo boost o no è possibile i dettagli freq nell'output di lscpu. E per un risultato raffinato: -

lscpu | grep Hz

Risposta breve e veloce ma puoi spiegare il resto 3?
Madhurendra Sachan,

@ Maddy grazie ma gli altri non sono chiaro, faranno qualche ricerca e modificheranno la mia risposta. Nel frattempo vediamo se entra qualcun altro.
Beginer,

1
+1 per il lscpucomando.
Arda,

8

Puoi provare questo nel terminale:

sudo lscpu

Questo ti darà una panoramica del tuo tratto fisico cpu. Per quanto riguarda il turbo boost o no, si tratta di un controllo puramente hardware rispetto al sistema operativo stesso, quindi a meno che Intel non disponga di driver specifici per Linux in grado di ottimizzare la velocità del processore, non esiste un solido vantaggio per controllare lo stato del turbo boost (a meno che non ci sia un codice di comando per Controlla altri forum se ci sono indizi riguardanti la tua domanda).

Per quanto mi riguarda, questo è quello che ottengo quando digito il comando sopra. Il mio AMD ha detto che è quad core, ma il mio core fisico elencato qui è solo 2, con 2 thread per core (aggiunge fino a 4 core). Sto usando il processore APD AMD A10 5750m.

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             AuthenticAMD
CPU family:            21
Model:                 19
Stepping:              1
CPU MHz:               2500.000
BogoMIPS:              4990.51
Virtualization:        AMD-V
L1d cache:             16K
L1i cache:             64K
L2 cache:              2048K
NUMA node0 CPU(s):     0-3

0

Carico di sistema e cpu% sono due modi diversi per misurare l'utilizzo della potenza della cpu.

  • carico di sistema: quanti processi per CPU sono stati nello stato "pronto" - mediati nel tempo. Fino a 1 * cpu (nel tuo caso fino a 4) il sistema è considerato quasi inattivo (rispetto a un supermercato dove in media solo un cliente è in attesa ad ogni pagamento). Probabilmente non noterai alcun ritardo fino a 2 * cpu (nel tuo caso 8).
  • cpu%: per quanto tempo i cpus funzionano effettivamente eseguendo un processo. È come il punto di vista dei cassieri - o piuttosto del loro supervisore - vogliono che siano sempre impegnati.

Entrambe le misure sono correlate ma in nessun modo identiche.


non ho chiesto il diverso. L'ho già letto negli articoli. Comunque la tua risposta contraddice la risposta di Gilles.
Madhurendra Sachan,

Dove vedi una contraddizione?
Guntbert,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.