Я хотел узнать, сколько ядер у моей системы, поэтому я искал тот же вопрос в Google. У меня есть некоторые команды, такие как lscpu
команда. Когда я попробовал эту команду, она дала мне следующий результат:
$ lscpu
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: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 23
Stepping: 10
CPU MHz: 1998.000
BogoMIPS: 5302.48
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 2048K
NUMA node0 CPU(s): 0-3
В частности, этот вывод показывает:
- ЦП: 4
- Core (s) на сокет: 4
- Семейство процессоров: 6
Что из этого указывает на ядра системы Linux?
Есть ли какая-либо другая команда, чтобы определить количество ядер, или я предполагаю, что она полностью неверна?
Ответы:
Вы должны смотреть на сокеты и ядра на сокет. В этом случае у вас есть 1 физический процессор (сокет), который имеет 4 ядра (ядра на сокет).
источник
nproc
я верну 4. Используяcat /proc/cpuinfo
я получаю 4, и, таким образом, кажется, что этот ответ является неправильным, по крайней мере, для моей ситуации.Чтобы получить полную картину, вам нужно посмотреть на количество потоков на ядро, ядер на сокет и сокетов . Если вы умножите эти числа, вы получите количество процессоров в вашей системе.
Процессоры - это то, что вы видите при запуске
htop
(они не равны физическим процессорам).Вот пример с настольного компьютера:
И сервер:
Вывод
nproc
соответствует количеству ЦП отlscpu
. Для настольного компьютера выше это должно соответствовать 8 процессорам, о которых сообщаютlscpu
:Вывод
/proc/cpuinfo
должен соответствовать этой информации, например, на настольной системе выше мы видим, что есть 8 процессоров (ЦП) и 4 ядра (идентификатор ядра 0-3):cpu cores
Сообщил/proc/cpuinfo
соответствуетCore(s) per socket
сообщениюlscpu
. Для настольного компьютера выше это должно соответствовать 4 ядрам на сокете, о которых сообщает lscpu:Чтобы конкретно ответить на ваш вопрос, вы говорите, сколько ядер у вас есть, умножая количество ядер на каждый сокет на количество имеющихся у вас сокетов.
Для приведенных выше примеров систем настольный компьютер имеет 4 ядра:
Пока на сервере есть 16:
Еще одна полезная утилита,
dmidecode
которая выводит информацию по каждому сокету. В случае серверной системы, указанной выше, мы ожидаем увидеть 8 ядер на сокет и 16 потоков на сокет:У
lscpu
команды есть несколько полезных опций, которые вы можете проверить, например:Смотрите
man lscpu
подробности.В итоге:
источник
lscpu --all --extended
было бы полезным дополнением, но у меня больше нет доступа к этим конкретным машинам.lscpu --all --parse=CORE,SOCKET | grep -Ev "^#" | sort -u | wc -l
Socket(s) * Core(s) per socket
. Учитывая то, что я только что сказал, я думаю,echo Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))
было бы лучше, чтобы люди могли точно видеть, что умножается ...Вы можете получить эту информацию по
nproc(1)
командеНе требует прав root.
источник
Чтобы ответ не вводил в заблуждение, необходимо понять несколько простых концепций компьютерной архитектуры:
Существуют разные типы инструкций. Логика принятия решений внутри ЦП будет отправлять разные инструкции разным аппаратным модулям . Например, арифметические инструкции фактически выполняются ALU (арифметическим / логическим блоком), в то время как инструкции, которые загружаются / сохраняются из памяти, выполняются каким-либо блоком памяти .
Под ядром понимается набор реального исполнительного оборудования (т. Е. Каждое ядро имеет ALU, блок памяти и т. Д.)
Вы можете иметь несколько процессоров, которые разделяют одно ядро - это называется гиперпоточность.
Сокет является физический слот на материнской плате , в которую вставляется чип. Этот чип имеет определенное количество ядер.
Примеры:
Пример ОП:
Другой пример:
Два физических сокета, каждый из которых содержит чип с 4 физическими ядрами, всего 8 ядер. Два потока могут выдавать инструкции для каждого ядра (эта машина имеет гиперпоточность), то есть к каждому ядру должны быть подключены два ЦП, что в сумме составляет 8 * 2 = 16 ЦП.
Первая машина может выполнять ровно четыре инструкции в любой момент времени. Вторая машина может выполнять от 8 до 16 инструкций в любой момент времени: 16 будет достигнуто только тогда, когда каждая пара процессоров выполняет различные типы инструкций и может совместно использовать ядро без ожидания.
источник
Вы также можете использовать команду,
cat /proc/cpuinfo
которая будет выводить порцию данных для каждого ядра. Каждый кусок начинается с этой информации:Ядра пронумерованы, начиная с 0, поэтому, если последний фрагмент говорит,
processor : 3
как в этом случае, ваша машина имеет 4 ядра.источник
grep -c ^processor /proc/cpuinfo
(getconf является частью glibc)
источник
getconf _NPROCESSORS_CONF
получает количество сконфигурированных процессоров. Вы также можете получить значение обоих этих макросов внутри исходного кода C, используяsysconf()
функцию. Введитеman sysconf
для получения дополнительной информации.источник
t 4
делать для dmidecode? Как умножаются счетчики и разрешенные линии? Ваш пример показывает 2 ядра, или 6, или 12, или 24, или какое-то другое число?4
этоprocessor
, см linux.die.net/man/8/dmidecode . Но использование в4
качестве аргумента - плохая практика.bash: dmidecode: command not found
Это все, что вам нужно. Это количество основных онлайн, независимо от того, включена или выключена гиперпоточность.
Еще один простой способ.
источник
ls -d /sys/devices/system/cpu/cpu* | wc -l
показало 49, потому что есть каталогcpuidle
средиcpuN
каталогов.Я нашел этот путь:
источник
Просто хочу добавить информацию к ответу @htaccess.
В CentOS 6.x dmidecode не выводит информацию о количестве ядер / потоков, и он фактически рассматривает «CPU» как «CPU» или «Core» в lscpu, а не «socket».
источник
Семейство процессоров здесь не имеет значения.
В вашем случае у вас всего 4 полных ядра.
Что также может быть важно, так это «Thread (s) per core»). Но у вас есть 1, так что не в вашем случае.
источник
Cores = Cores per socket X Sockets
см. описание в моем ответе.Простой способ выяснить количество процессоров - выполнить команды ниже:
источник