Я хотел узнать, сколько ядер у моей системы, поэтому я искал тот же вопрос в 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
В частности, этот результат показывает:
Что из перечисленного указывает на ядра системы Linux?
Есть ли какая-нибудь другая команда, чтобы определить количество ядер, или я полагаю, что это совершенно неверно?
Для получения полной картины нужно смотреть на число из нитей для каждого ядра, ядер в гнездо и розетки. Если умножить эти цифры, вы получите ряд ЦП в системе.
ЦП = потоков на ядро х ядер на сокет х розеток
Процессоры то, что вы видите, когда вы запустите при
(это не приравнивают к физических процессоров).
Вот пример из настольном компьютере:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 8
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
И сервера:
$ lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 32
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
Выход nproc
соответствует число ЦП от lscpu
. Для рабочего стола машина выше это должно соответствовать процессора 8(С) сообщили lscpu
:
$ nproc --all
8
Вывод из файла/proc/cpuinfo для должна соответствовать эта информация, например на рабочем столе системы выше мы можем видеть, что есть 8 процессоров (ЦП) и 4 сердечника (удостоверение личности сердечника 0-3):
$ grep -E 'processor|core id' /proc/cpuinfo
processor : 0
core id : 0
processor : 1
core id : 0
processor : 2
core id : 1
processor : 3
core id : 1
processor : 4
core id : 2
processor : 5
core id : 2
processor : 6
core id : 3
processor : 7
core id : 3
В ядер
сообщили в/proc/cpuinfo для
соответствует основным(ы) в гнезда
сообщает lscpu
. Для настольного компьютера выше этот параметр должен соответствовать 4 основным(ы) в гнезда сообщили lscpu:
$ grep -m 1 'cpu cores' /proc/cpuinfo
cpu cores : 4
Чтобы конкретно ответить на ваш вопрос, вы скажите, сколько ядер у вас есть путем умножения количества ядер на сокет по количеству розеток у вас.
ядер = ядер на сокет х розеток
На примере системы выше рабочего стола имеет 4 ядра:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 4
В то время как сервер 16:
$ echo "Cores = $(( $(lscpu | awk '/^Socket\(s\)/{ print $2 }') * $(lscpu | awk '/^Core\(s\) per socket/{ print $4 }') ))"
Cores = 16
Еще одна полезная утилита dmidecode
, который выводит на сокет. В случае системы, перечисленные выше, мы ожидаем, что 8 ядер на сокет и 16 потоков на сокет:
$ sudo dmidecode -t 4 | grep -E 'Socket Designation|Count'
Socket Designation: CPU1
Core Count: 8
Thread Count: 16
Socket Designation: CPU2
Core Count: 8
Thread Count: 16
Команда lscpu имеет ряд полезных опций, которые вам могут понравиться, чтобы проверить, например:
$ lscpu --all --extended
$ lscpu --all --parse=CPU,SOCKET,CORE | grep -v '^#'
Видеть человека lscpu на детали.
В резюме:
Вы должны посмотреть на сокеты и ядра на сокет. В данном случае у вас есть 1 физический процессор (сокет), который имеет 4 ядра (ядра на сокет).
Вы можете получить эту информацию nproc(1)
команда
$ nproc --all
12
Он не требует привилегий суперпользователя.
Для ответа, чтобы не быть запутанным, нужно понять несколько простых понятий компьютерной архитектуры:
Вы запустите процессы (с"программ") смотрите на вашей Linux системе. Каждый процесс состоит из одного или более темы Каждый нитью отдельная последовательность инструкции. Два потока могут выполняться параллельно. Каждый инструкция дана ЦП должны быть выполнены. Процессор имеет логику, которая выясняет, что биты инструкция значит, и решает, что делать с ним.
Существуют различные типы инструкций. Решение логика внутри процессора будем отправлять различные инструкции к различным оборудование. Например, арифметические инструкции выполняются по АЛУ (арифметическое/логическое устройство), при инструкции загрузки/сохранения из памяти выполняет какую-то устройство памяти.
А основные относится к набору аппаратном исполнении (т. е. каждое ядро имеет АЛУ, блок памяти и т. д...)
Вы можете иметь несколько процессоров, которые разделяют одно ядро - это называется многопоточность.
Идея: резьба в настоящее время занимались арифметикой, в то время как поток B загружает что-то из памяти. Когда это's садится, нити A и B могут эффективно обмениваться одноядерный без того, чтобы друг в друге's путь (используется АЛУ, B использует блок памяти). Конечно, иногда обоих программ захочет АЛУ, а потом им приходится ждать друг друга...
А гнездо физический слот на материнской плате, в который вставляется чип. Этот чип имеет определенное количество ядер на нем.
ОП'ы например:
CPU(s): 4
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Другой пример:
CPU(s): 16
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 2
Два физических сокетов, каждый из которых содержит чип с 4 физическими ядрами, делая 8 ядер всего. Две темы вам выдавать инструкции для каждого ядра (эта машина имеет технология HyperThreading), то есть там должно быть два процессора добавленные в каждого ядра, итого 8 * 2 = 16 ЦП
Первая машина может быть выполнение точно четыре инструкции в любой момент времени, период. Вторая машина может выполнить между 8 и 16 инструкции в любое время: 16 будет достигнута только тогда, когда каждая пара процессоров выполнении различных видов инструкций и так могут делить ядро без ожидания.
Вы также можете использовать команду cat /proc/cpuinfo
, которая выведет фрагмент данных для каждого ядра. Каждый фрагмент начинается с этой информации:
processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz
(...)
Ядра нумеруются, начиная с 0, поэтому если в последнем фрагменте написано processor : 3
, как в данном случае, то у вашей машины 4 ядра.
[root@xxxxx ~]# dmidecode -t 4 | egrep -i "Designation|Intel|core|thread"
Socket Designation: CPU1
Manufacturer: Intel
HTT (Multi-threading)
Version: Intel(R) Xeon(R) CPU L5640 @ 2.27GHz
Core Count: 6
Core Enabled: 6
Thread Count: 12
Socket Designation: CPU2
Manufacturer: Intel
HTT (Multi-threading)
Version: Intel(R) Xeon(R) CPU L5640 @ 2.27GHz
Core Count: 6
Core Enabled: 6
Thread Count: 12
$ grep -c processor /proc/cpuinfo
8
Что'ы все, что вам нужно. Это число-ядро, независимо от того, если технология HyperThreading включен или выключен.
$ ls -d /sys/devices/system/cpu/cpu* | wc -l
8
Еще один простой способ.
Я нашел этот путь:
echo $((`cat /sys/devices/system/cpu/present | sed 's/0-//'` + 1))
Семья процессора здесь не имеет значения.
В вашем случае у вас 4 полных ядра.
Что также может быть важно, так это "количество потоков на ядро". Но у вас их 1, так что в вашем случае это не так.
Простой способ выяснить число процессоров с выдачей команд ниже:
cat /proc/interrupts | egrep -i 'cpu'