Nie trzeba się catwcześniej awk, i tak: po prostu awk '<script>' /proc/cpuinfo, tak: awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo. I wchodzisz bez „minus jeden”.
Tomasz Gandor
Aby bezpośrednio odpowiedzieć na pytanie, przeciągnij do tego, tail -n 1który pobiera ostatni wiersz i drukuje go.
Zauważ, że oba te kończą licząc dwa razy więcej rdzeni, niż faktycznie istnieją, jeśli korzystasz z systemu z hyperthreading (np. P4 lub Core i7).
duskwuff -inactive-
24
@duskwuff: to jest dokładnie to, czego chcesz w większości przypadków.
Frank Kusters
8
grep -c '^processor' /proc/cpuinfona Zsh.
Steven Lu
40
cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -1zwróci również nieprawidłowy numer, jeśli numery procesorów są oparte na 0.
Phazor
3
Pierwsza linia zwraca 1 rdzeń mniej niż istnieje. Better cat / proc / cpuinfo | awk '/ ^ procesor / {print $ 3}' | wc -l
Mirko Ebert
649
Przetwarzanie zawartości /proc/cpuinfojest niepotrzebnie barokowe. Użyj nproc, który jest częścią coreutils, więc powinien być dostępny w większości instalacji Linuksa.
Polecenie nprocdrukuje liczbę jednostek przetwarzania dostępnych dla bieżącego procesu, która może być mniejsza niż liczba procesorów online.
Aby znaleźć liczbę wszystkich zainstalowanych rdzeni / procesorów, użyj nproc --all
Na moim starym Ubuntu (10.10) nproc nie jest dostępny. To musi być nowy dodatek.
bukzor
3
Niestety nprocnie jest częścią boot2docker
kgadek
269
Najbardziej przenośnym rozwiązaniem, jakie znalazłem, jest getconfpolecenie:
getconf _NPROCESSORS_ONLN
Działa to zarówno w systemie Linux, jak i Mac OS X. Inną zaletą tego w porównaniu z innymi podejściami jest to, że getconf istnieje już od dłuższego czasu. Niektóre starsze maszyny z Linuksem, na których muszę tworzyć, nie mają dostępnych poleceń nproclub lscpu, ale mają getconf.
Od redakcji: Podczas narzędzie jest upoważniona POSIX , specyficzne i wartości nie są. To powiedziawszy, jak powiedziano, działają na platformach Linux, a także na macOS; na FreeBSD / PC-BSD musisz pominąć wiodącą pozycję .getconf_NPROCESSORS_ONLN_NPROCESSORS_CONF_
Działa to dla mnie w Red Hat Entreprise Linux 5.4, Centos 6.5 i 7 oraz Mac OSX 10.9 (Mavericks). Wygląda na to, że jest najbardziej przenośny, ponieważ lscpu nie jest domyślnie instalowany w tych systemach. Dzięki!
@BCran Nie mogłem znaleźć _NPROCESSORS_ONLNw POSIX. Czy możesz do niego link?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
3
@CiroSantilli 六四 事件 法轮功 纳米比亚 威 视 Z github.com/gstrauss/plasma/blob/master/plasma_sysconf.c wygląda na to, że się myliłem: jest to opcjonalne. „sysconf _SC_NPROCESSORS_ONLN i _SC_NPROCESSORS_CONF nie są wymagane przez standardy, ale są dostarczane na wielu platformach unix i udokumentowane jako opcjonalne przez Open Group.”
BCran,
100
Przedmowa:
Problem z /proc/cpuinfoopartych o odpowiedziach jest to, że parse informacje, które było przeznaczone dla ludzkiej konsumpcji, a tym samym brakuje formatu stabilne przeznaczone do maszynowego parsowania : Format wyjściowy może się różnić na różnych platformach i warunków wykonawczych; używanie lscpu -pw systemie Linux (i sysctlmacOS) omija ten problem .
getconf _NPROCESSORS_ONLN/ getconf NPROCESSORS_ONLNNie rozróżnia logicznych i fizycznych procesorów.
Oto shfragment kodu (zgodny z POSIX), który działa w systemach Linux i macOS do określania liczby procesorów logicznych lub fizycznych w trybie online ; zobacz komentarze, aby uzyskać szczegółowe informacje.
Korzysta lscpuz systemu Linux i sysctlmacOS.
Uwaga dotycząca terminologii : CPU oznacza najmniejszą jednostkę przetwarzającą widzianą przez system operacyjny. Każdy rdzeń niebędący hiperwątkiem odpowiada 1 procesorowi, podczas gdy rdzenie hiperwątkowujące zawierają więcej niż 1 (zwykle: 2) - logicznie - procesor.
Linux wykorzystuje następującą taksonomię [1] , zaczynając od najmniejszej jednostki: CPU < rdzeń < gniazdo < książka < węzeł
z każdym poziomem zawierającym 1 lub więcej instancji następnego niższego poziomu.
#!/bin/sh# macOS: Use `sysctl -n hw.*cpu_max`, which returns the values of # interest directly.# CAVEAT: Using the "_max" key suffixes means that the *maximum*# available number of CPUs is reported, whereas the# current power-management mode could make *fewer* CPUs # available; dropping the "_max" suffix would report the# number of *currently* available ones; see [1] below.## Linux: Parse output from `lscpu -p`, where each output line represents# a distinct (logical) CPU.# Note: Newer versions of `lscpu` support more flexible output# formats, but we stick with the parseable legacy format # generated by `-p` to support older distros, too.# `-p` reports *online* CPUs only - i.e., on hot-pluggable # systems, currently disabled (offline) CPUs are NOT# reported.# Number of LOGICAL CPUs (includes those reported by hyper-threading cores)# Linux: Simply count the number of (non-comment) output lines from `lscpu -p`, # which tells us the number of *logical* CPUs.
logicalCpuCount=$([ $(uname)='Darwin']&&
sysctl -n hw.logicalcpu_max ||
lscpu -p | egrep -v '^#'| wc -l)# Number of PHYSICAL CPUs (cores).# Linux: The 2nd column contains the core ID, with each core ID having 1 or# - in the case of hyperthreading - more logical CPUs.# Counting the *unique* cores across lines tells us the# number of *physical* CPUs (cores).
physicalCpuCount=$([ $(uname)='Darwin']&&
sysctl -n hw.physicalcpu_max ||
lscpu -p | egrep -v '^#'| sort -u -t,-k 2,4| wc -l)# Print the values.
cat <<EOF
# of logical CPUs: $logicalCpuCount# of physical CPUS: $physicalCpuCount
EOF
Zauważ, że systemy pochodzące z BSD inne niż macOS - np. FreeBSD - obsługują tylko hw.ncpuklucz dla sysctl, które są przestarzałe w macOS; Jestem jasne, która z nowych kluczy hw.npuodpowiada: hw.(logical|physical)cpu_[max].
Wskazówka dla @teambob za pomoc w poprawieniu lscpukomendy obliczania fizycznych procesorów .
Uwaga : lscpu -pdane wyjściowe NIE zawierają kolumny „książka” ( manstrona wspomina o „książkach” jako encji między gniazdem a węzłem w hierarchii taksonomicznej). Jeśli „książki” są w grze w danym systemie Linux ( czy ktoś wie kiedy i jak? ), Komenda fizyko-CPU-count może pod -report (ta opiera się na założeniu, że lscpuraporty identyfikatory, które są specyficzne dla całej wyższy -poziomowe jednostki , np .: 2 różne rdzenie z 2 różnych gniazd mogą mieć ten sam identyfikator).
Jeśli zapiszesz powyższy kod jako, powiedzmy, skrypt powłokicpus , sprawisz , że będzie wykonywalny chmod +x cpusi umieścisz go w folderze w swoim folderze $PATH, zobaczysz dane wyjściowe, takie jak:
$ cpus
logical 4
physical 4
[1] Xaekai rzuca światło na to, czym jest książka : „ książka to moduł zawierający płytkę drukowaną z gniazdami procesora, gniazdami RAM, połączeniami IO wzdłuż krawędzi i hakiem do integracji systemu chłodzenia. Są one używane w komputerach mainframe IBM Więcej informacji: http://ewh.ieee.org/soc/cpmt/presentations/cpmt0810a.pdf ”
Tak, przepraszam, masz rację co do polecenia sortowania. Nie mogę znaleźć żadnych informacji o książkach poza instrukcją lscpu. Myślę, że jest to związane z NUMA en.wikipedia.org/wiki/Non-uniform_memory_access
teambob 30.04.2014
2
Myślę, że większość rozwiązań tutaj ignoruje maszyny z wieloma gniazdami, w przeciwieństwie do tej. Dzięki!
dividebyzero
1
Pod względem linuksa istnieje wiele kontekstów, w których lscpu jest niedostępne, na przykład obrazy instalatora. Podoba mi się .. chciałbym, żeby były wszechobecne.
Brian Chrisman,
43
lscpu gromadzi informacje o architekturze procesora / proc / cpuinfon w formacie czytelnym dla człowieka:
# lscpuArchitecture: x86_64
CPU op-mode(s):32-bit,64-bit
ByteOrder:LittleEndian
CPU(s):8On-line CPU(s) list:0-7Thread(s) per core:1Core(s) per socket:4
CPU socket(s):2
NUMA node(s):1Vendor ID:GenuineIntel
CPU family:6Model:15Stepping:7
CPU MHz:1866.669BogoMIPS:3732.83Virtualization: VT-x
L1d cache:32K
L1i cache:32K
L2 cache:4096K
NUMA node0 CPU(s):0-7
jest „^ core id” dla wszystkich rdzeni fizycznych lub tylko rdzeni p na jednym procesorze?
Richard
1
istnieje jeden wiersz identyfikatora rdzenia na unikalny fizyczny rdzeń w systemie. Nie wiem jednak, czy liczby zaczną się od zera dla drugiego procesora fizycznego, jednak ...
lunixbochs
1
jeśli masz więcej niż jeden procesor fizyczny, musisz także spojrzeć na „identyfikator fizyczny”.
Anne,
Pierwsza linia nie działała dla mnie. To działa dla mnie. cat /proc/cpuinfo | awk '/^processor/{print $3}'| wc -li pokazuje prawidłową liczbę.
jaylweb
11
Dla całkowitej liczby rdzeni fizycznych:
grep '^core id'/proc/cpuinfo |sort -u|wc -l
Na maszynach z wieloma gniazdami (lub zawsze) należy pomnożyć powyższy wynik przez liczbę gniazd:
Korzystanie z getconf jest rzeczywiście najbardziej przenośnym sposobem, jednak zmienna ma różne nazwy w BSD i Linux, aby uzyskać getconf, więc musisz przetestować oba, jak sugeruje to gist:
https://gist.github.com/jj1bdx/5746298
(obejmuje również poprawka Solaris za pomocą ksh)
W moim przypadku zwraca liczbę hiperwątków. Musiałbym także znać liczbę fizycznych rdzeni i liczbę gniazd.
user2465201,
OK - dokładnie to samo polecenie z hw.physicalcpu zwraca liczbę rdzeni. Nie jestem pewien co do liczby gniazd ... Istnieje również „logiczna” i „aktywna” liczba procesorów, ale nie jestem pewien, co to oznacza.
user2465201,
Szybka aktualizacja - nie wydaje się taka przenośna. Wypróbowałem to na Linux-ie i wygląda na to, że po prostu czytam katalogi / proc, które różnią się w systemie Linux niż Mac - na przykład nie ma podkatalogu hw. To powiedziawszy, wciąż możesz
Policz liczbę unikalnych logicznych procesorów używanych przez jądro Linuksa. -pOpcja generuje wyjście dla łatwego analizowania i jest kompatybilny z wcześniejszymi wersjami lscpu.
Aby określić liczbę dostępnych jednostek przetwarzających (niekoniecznie taką samą jak liczba rdzeni). Jest to świadomy hipertekstu.
nproc
Nie chcę schodzić zbyt daleko w dół do króliczej nory, ale można również określić liczbę skonfigurowanych procesorów (w przeciwieństwie do zwykłych procesorów dostępnych online) getconf _NPROCESSORS_CONF. Aby określić całkowitą liczbę procesorów (offline i online), należy przeanalizować dane wyjściowe lscpu -ap.
to poprawna odpowiedź, jeśli chcesz mieć rdzenie fizyczne.
Dinesh
3
Pomyślałem również, cat /proc/cpuinfoże da mi poprawną odpowiedź, jednak ostatnio zauważyłem, że mój czterordzeniowy system ARM Cortex A53 wykazywał tylko jeden rdzeń. Wygląda na to, że / proc / cpuinfo pokazuje tylko aktywne rdzenie, podczas gdy:
cat /sys/devices/system/cpu/present
jest lepszą miarą tego, co tam jest. Możesz też
cat /sys/devices/system/cpu/online
aby zobaczyć, które rdzenie są online, i
cat /sys/devices/system/cpu/offline
aby zobaczyć, które rdzenie są offline. Te online, offlineoraz presentSysFS wpisy powrót indeksu jednostek CPU, a więc wartość powrotu 0tylko środki rdzenia 0, podczas gdy wartość powrotną 1-3oznacza, że rdzenie 1,2 i 3.
Poniższe informacje powinny dać ci liczbę „prawdziwych” rdzeni zarówno w systemie hiperwątkowym, jak i niehththreaded. Przynajmniej działał we wszystkich moich testach.
-1, to wraca 0na jednym rdzeniu z Opteron 4170 HE, ale wraca 4na ośmiordzeniowym pudełku z Opteron 3280. ... część mnie naprawdę życzy sobie, aby ten liner działał!
+1, dłużej niż rozwiązanie z „lscpu -p = Core, Socket”, ale działa bezpośrednio podczas analizowania / proc / cpuinfo, bez potrzeby lscpu.
Fravadona,
1
Policz „identyfikator rdzenia” według metody „identyfikatora fizycznego” za pomocą awk z rezerwą na „procesorze”, licz, jeśli „identyfikator rdzenia” nie jest dostępny (np. Malina)
echo $(awk '{ if ($0~/^physical id/) { p=$NF }; if ($0~/^core id/) { cores[p$NF]=p$NF }; if ($0~/processor/) { cpu++ } } END { for (key in cores) { n++ } } END { if (n) {print n} else {print cpu} }'/proc/cpuinfo)
To działało dobrze. Kiedy wypróbowałem pierwszą odpowiedź, otrzymałem 3 procesory jako dane wyjściowe. Wiem, że mam 4 procesory w systemie, więc właśnie zrobiłem grepprocesor, a dane wyjściowe wyglądały następująco:
Fizyczne liczenie procesora nie działa na komputerach z wieloma gniazdami; w tym celu należy powiązać każdy „identyfikator rdzenia” z jego „identyfikatorem fizycznym”.
cat
wcześniejawk
, i tak: po prostuawk '<script>' /proc/cpuinfo
, tak:awk '/^processor/{n+=1}END{print n}' /proc/cpuinfo
. I wchodzisz bez „minus jeden”.tail -n 1
który pobiera ostatni wiersz i drukuje go.Odpowiedzi:
policzy liczbę linii zaczynających się od „procesor” w
/proc/cpuinfo
W przypadku systemów z hiperwątkowością można użyć
który powinien zwrócić (na przykład)
8
(podczas gdy powyższe polecenie powróci16
)źródło
grep -c '^processor' /proc/cpuinfo
na Zsh.cat /proc/cpuinfo | awk '/^processor/{print $3}' | tail -1
zwróci również nieprawidłowy numer, jeśli numery procesorów są oparte na 0.Przetwarzanie zawartości
/proc/cpuinfo
jest niepotrzebnie barokowe. Użyj nproc, który jest częścią coreutils, więc powinien być dostępny w większości instalacji Linuksa.Polecenie
nproc
drukuje liczbę jednostek przetwarzania dostępnych dla bieżącego procesu, która może być mniejsza niż liczba procesorów online.Aby znaleźć liczbę wszystkich zainstalowanych rdzeni / procesorów, użyj
nproc --all
Na mojej 8-rdzeniowej maszynie:
źródło
nproc
nie jest częścią boot2dockerNajbardziej przenośnym rozwiązaniem, jakie znalazłem, jest
getconf
polecenie:Działa to zarówno w systemie Linux, jak i Mac OS X. Inną zaletą tego w porównaniu z innymi podejściami jest to, że getconf istnieje już od dłuższego czasu. Niektóre starsze maszyny z Linuksem, na których muszę tworzyć, nie mają dostępnych poleceń
nproc
lublscpu
, ale majągetconf
.Od redakcji: Podczas narzędzie jest upoważniona POSIX , specyficzne i wartości nie są. To powiedziawszy, jak powiedziano, działają na platformach Linux, a także na macOS; na FreeBSD / PC-BSD musisz pominąć wiodącą pozycję .
getconf
_NPROCESSORS_ONLN
_NPROCESSORS_CONF
_
źródło
_NPROCESSORS_ONLN
w POSIX. Czy możesz do niego link?Przedmowa:
Problem z
/proc/cpuinfo
opartych o odpowiedziach jest to, że parse informacje, które było przeznaczone dla ludzkiej konsumpcji, a tym samym brakuje formatu stabilne przeznaczone do maszynowego parsowania : Format wyjściowy może się różnić na różnych platformach i warunków wykonawczych; używanielscpu -p
w systemie Linux (isysctl
macOS) omija ten problem .getconf _NPROCESSORS_ONLN
/getconf NPROCESSORS_ONLN
Nie rozróżnia logicznych i fizycznych procesorów.Oto
sh
fragment kodu (zgodny z POSIX), który działa w systemach Linux i macOS do określania liczby procesorów logicznych lub fizycznych w trybie online ; zobacz komentarze, aby uzyskać szczegółowe informacje.Korzysta
lscpu
z systemu Linux isysctl
macOS.Uwaga dotycząca terminologii : CPU oznacza najmniejszą jednostkę przetwarzającą widzianą przez system operacyjny. Każdy rdzeń niebędący hiperwątkiem odpowiada 1 procesorowi, podczas gdy rdzenie hiperwątkowujące zawierają więcej niż 1 (zwykle: 2) - logicznie - procesor.
Linux wykorzystuje następującą taksonomię [1] , zaczynając od najmniejszej jednostki:
CPU < rdzeń < gniazdo < książka < węzeł
z każdym poziomem zawierającym 1 lub więcej instancji następnego niższego poziomu.
[1] dokumentacja macOS
sysctl (3)
Zauważ, że systemy pochodzące z BSD inne niż macOS - np. FreeBSD - obsługują tylko
hw.ncpu
klucz dlasysctl
, które są przestarzałe w macOS; Jestem jasne, która z nowych kluczyhw.npu
odpowiada:hw.(logical|physical)cpu_[max]
.Wskazówka dla @teambob za pomoc w poprawieniu
lscpu
komendy obliczania fizycznych procesorów .Uwaga :
lscpu -p
dane wyjściowe NIE zawierają kolumny „książka” (man
strona wspomina o „książkach” jako encji między gniazdem a węzłem w hierarchii taksonomicznej). Jeśli „książki” są w grze w danym systemie Linux ( czy ktoś wie kiedy i jak? ), Komenda fizyko-CPU-count może pod -report (ta opiera się na założeniu, żelscpu
raporty identyfikatory, które są specyficzne dla całej wyższy -poziomowe jednostki , np .: 2 różne rdzenie z 2 różnych gniazd mogą mieć ten sam identyfikator).Jeśli zapiszesz powyższy kod jako, powiedzmy, skrypt powłoki
cpus
, sprawisz , że będzie wykonywalnychmod +x cpus
i umieścisz go w folderze w swoim folderze$PATH
, zobaczysz dane wyjściowe, takie jak:[1] Xaekai rzuca światło na to, czym jest książka : „ książka to moduł zawierający płytkę drukowaną z gniazdami procesora, gniazdami RAM, połączeniami IO wzdłuż krawędzi i hakiem do integracji systemu chłodzenia. Są one używane w komputerach mainframe IBM Więcej informacji: http://ewh.ieee.org/soc/cpmt/presentations/cpmt0810a.pdf ”
źródło
lscpu
gromadzi informacje o architekturze procesora / proc / cpuinfon w formacie czytelnym dla człowieka:Zobacz także /unix/468766/understanding-output-of-lscpu .
źródło
To zadziałało dla mnie.
tail -nX
pozwala uchwycić tylko ostatnie X linii.Jeśli masz hyperthreading, powinno to działać w celu pobrania liczby rdzeni fizycznych .
źródło
cat /proc/cpuinfo | awk '/^processor/{print $3}'| wc -l
i pokazuje prawidłową liczbę.Dla całkowitej liczby rdzeni fizycznych:
Na maszynach z wieloma gniazdami (lub zawsze) należy pomnożyć powyższy wynik przez liczbę gniazd:
@ mklement0 ma całkiem fajną odpowiedź poniżej za pomocą lscpu. W komentarzach napisałem bardziej zwięzłą wersję
źródło
Możesz także użyć Pythona! Aby uzyskać liczbę rdzeni fizycznych:
Aby uzyskać liczbę rdzeni hiperwątkowych:
źródło
Rozwiązanie Crossplatform dla systemów Linux, MacOS, Windows:
źródło
Oto sposób, w jaki używam do zliczania liczby rdzeni fizycznych, które są online w systemie Linux:
lub w skrócie:
Przykład (1 gniazdo):
Przykład (2 gniazda):
Przykład (4 gniazda):
źródło
Korzystanie z getconf jest rzeczywiście najbardziej przenośnym sposobem, jednak zmienna ma różne nazwy w BSD i Linux, aby uzyskać getconf, więc musisz przetestować oba, jak sugeruje to gist: https://gist.github.com/jj1bdx/5746298 (obejmuje również poprawka Solaris za pomocą ksh)
Osobiście używam:
A jeśli chcesz tego w pythonie, możesz po prostu użyć syscall, którego używa getconf, importując moduł os:
Co do tego
nproc
, jest częścią GNU Coreutils, więc domyślnie nie jest dostępna w BSD. Używa sysconf () również po kilku innych metodach.źródło
Jeśli chcesz to zrobić, aby działało na systemie Linux i OS X, możesz:
źródło
To bardzo proste. Wystarczy użyć tego polecenia:
źródło
CPU(s):
.Możesz użyć jednej z następujących metod, aby określić liczbę fizycznych rdzeni procesora.
Policz liczbę unikalnych podstawowych identyfikatorów (mniej więcej tyle, ile wynosi
grep -P '^core id\t' /proc/cpuinfo | sort -u | wc -l
).awk '/^core id\t/ {cores[$NF]++} END {print length(cores)}' /proc/cpuinfo
Pomnóż liczbę „rdzeni na gniazdo” przez liczbę gniazd.
lscpu | awk '/^Core\(s\) per socket:/ {cores=$NF}; /^Socket\(s\):/ {sockets=$NF}; END{print cores*sockets}'
Policz liczbę unikalnych logicznych procesorów używanych przez jądro Linuksa.
-p
Opcja generuje wyjście dla łatwego analizowania i jest kompatybilny z wcześniejszymi wersjamilscpu
.lscpu -p | awk -F, '$0 !~ /^#/ {cores[$1]++} END {print length(cores)}'
Aby powtórzyć to, co powiedzieli inni, istnieje wiele powiązanych właściwości.
Aby określić liczbę dostępnych procesorów:
Aby określić liczbę dostępnych jednostek przetwarzających (niekoniecznie taką samą jak liczba rdzeni). Jest to świadomy hipertekstu.
Nie chcę schodzić zbyt daleko w dół do króliczej nory, ale można również określić liczbę skonfigurowanych procesorów (w przeciwieństwie do zwykłych procesorów dostępnych online)
getconf _NPROCESSORS_CONF
. Aby określić całkowitą liczbę procesorów (offline i online), należy przeanalizować dane wyjściowelscpu -ap
.źródło
Pomyślałem również,
cat /proc/cpuinfo
że da mi poprawną odpowiedź, jednak ostatnio zauważyłem, że mój czterordzeniowy system ARM Cortex A53 wykazywał tylko jeden rdzeń. Wygląda na to, że / proc / cpuinfo pokazuje tylko aktywne rdzenie, podczas gdy:cat /sys/devices/system/cpu/present
jest lepszą miarą tego, co tam jest. Możesz też
cat /sys/devices/system/cpu/online
aby zobaczyć, które rdzenie są online, i
cat /sys/devices/system/cpu/offline
aby zobaczyć, które rdzenie są offline. Te
online
,offline
orazpresent
SysFS wpisy powrót indeksu jednostek CPU, a więc wartość powrotu0
tylko środki rdzenia 0, podczas gdy wartość powrotną1-3
oznacza, że rdzenie 1,2 i 3.Zobacz https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu
źródło
Poniższe informacje powinny dać ci liczbę „prawdziwych” rdzeni zarówno w systemie hiperwątkowym, jak i niehththreaded. Przynajmniej działał we wszystkich moich testach.
źródło
0
na jednym rdzeniu z Opteron 4170 HE, ale wraca4
na ośmiordzeniowym pudełku z Opteron 3280. ... część mnie naprawdę życzy sobie, aby ten liner działał!Nie moja strona internetowa, ale to polecenie z http://www.ixbrian.com/blog/?p=64&cm_mc_uid=89402252817914508279022&cm_mc_sid_50200000=1450827902 działa dla mnie ładnie na centos. Pokaże rzeczywisty procesor, nawet gdy włączony jest hiperwątkowanie.
cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l
źródło
Policz „identyfikator rdzenia” według metody „identyfikatora fizycznego” za pomocą awk z rezerwą na „procesorze”, licz, jeśli „identyfikator rdzenia” nie jest dostępny (np. Malina)
źródło
To działało dobrze. Kiedy wypróbowałem pierwszą odpowiedź, otrzymałem 3 procesory jako dane wyjściowe. Wiem, że mam 4 procesory w systemie, więc właśnie zrobiłem
grep
procesor, a dane wyjściowe wyglądały następująco:źródło
daje mi
Która jest poprawna liczba gniazd - patrząc w górę
E5-2667
mówi mi, że każde gniazdo ma8 cores
, więc pomnóż i skończ z16 cores
przecinkiem2 sockets
.Gdzie
lscpu
daj mi20 CPUs
- co jest całkowicie niepoprawne - nie jestem pewien, dlaczego. (to samo dotyczycat /proc/cpu
- kończy się na20
.źródło
Szybszy, bez widelca
Działa to z prawie wszystkimi muszla.
Aby zachować zgodność z muszla, dziarskość, busyboxi inne, których użyłem
ncore=$((ncore+1))
zamiast((ncore++))
.grzmotnąć wersja
źródło
Jeśli możesz używać Pythona,
numexpr
moduł ma do tego funkcję:także to:
Aby wyszukać te informacje w wierszu polecenia, użyj:
Lub po prostu można uzyskać te informacje z
multiprocessing.cpu_count()
funkcjiLub jeszcze bardziej po prostu użyj
os.cpu_count()
źródło
cpu_count
jest niepoprawna, nie zwraca liczby rdzeni, a jedynie liczbę hiperwątków na procesorach IntelaJeśli chcesz policzyć rdzenie fizyczne, to polecenie zrobiło to dla mnie.
Całkiem proste, ale zdaje się liczyć rzeczywiste rdzenie fizyczne, ignorując logiczną liczbę
źródło
Python 3 oferuje również kilka prostych sposobów na uzyskanie:
4
4
źródło
Użyj poniższego zapytania, aby uzyskać podstawowe informacje
źródło
Podsumowanie: aby uzyskać fizyczne procesory, wykonaj następujące czynności:
aby uzyskać fizyczne i logiczne procesory, wykonaj następujące czynności:
/proc
<< to jest złote źródło wszelkich potrzebnych informacji na temat procesów i/proc/cpuinfo
<< jest złotym źródłem wszelkich informacji o procesorze.źródło