Как узнать что сколько физических и логических ядер имеет Сервер?
Добрый день коллеги.
Недавно у меня возник вопрос по поводу Количество ядер и потоки. Имею вот такую картинку. Давайте детально разберёмся: 1) СPU (s) = 12 2) Thread(s) per core = 1 3) Core(s) per socket = 1 4) Socket(s) = 12 5) NUMA node(s) = 1
Вопрос:
1) Cколько тут физических и логических ядер ( если есть формула или команда то покажите пож)?
2) Как определить сколько физических и логических процессоров ( если есть формула или команда то покажите пож)?
3) Тут сколько потоков ?

- Вопрос задан более двух лет назад
- 354 просмотра
Комментировать
Решения вопроса 1
1) тебе выданы 12 ядер, физических или логических уже не тебе решать. для тебя один поток на одно ядро — Threads per Core. иная информация и управления не дано.
2) спросить провайдера.
3) 12 потоков вычисления одновременно, по числу предоставленных ядер.
согласно спецификации у Intel Xeon Gold 5218 ДВА логических потока исполнения на одно физическое ядро.
Ответ написан более двух лет назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 2

Миллиардер, филантроп, патологический лгун
Внутри виртуалки можно показать сколько угодно ядер — это не гарантирует, что вам дадут нагрузить физический процессор/ы полностью. Если сервер не ваш — проще всего уточнить у хостера. Если ваш — вопрос становится тривиальным.
Ответ написан более двух лет назад
Комментировать
Нравится 9 Комментировать

Farrukh Sadatov @ITpodderjka Автор вопроса
IT specialist
%us показывает использование отдельного процессора (пользовательскими процессами, такими, как apache, mysql и т.д.) до максимального значения, составляющего 100%. Таким образом, если в четырехъядерном процессоре 1 процесс использует 100% CPU, это даст значение %us, равное 25%. Значение 12,5% для 8-ядерного процессора означает, что занято одно ядро.
Устаревшая статья)
вот такой ответь тоже получил от телеграм пользователя @ky3bmu4
Как можно узнать число ядер, задействованных программой, в ОС Linux?
Подскажите, пожалуйста, можно ли как-то узнать, сколько ядер процессора задействует многопоточная программа? Время ее работы занимает не более 1 секунды, поэтому получить такую информацию с помощью утилит вроде ps для меня проблематично. Возможно, есть какие-нибудь иные способы? Спасибо.
Отслеживать
задан 30 окт 2023 в 5:22
user_1234567890 user_1234567890
197 9 9 бронзовых знаков
Можете поискать в /proc/ (see man 5 proc), но я не уверен, что ОС сохраняет статистику по использованию потоками ядер. Кстати, ps и т.п. используют для вывода отчета ту же информацию, что содержится в /proc/ и выводят текущую привязку процесса к cpu
30 окт 2023 в 7:26
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Такую статистику можно получить командой time.
Тут правда не скажешь 8 ядер по 25% или 4 по 50% или 2 по 100%, но в целом можно судить о нагрузке
$ /usr/bin/time --verbose 7za b
Вывод программы 7za
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 p7zip Version 16.02 (locale=ru_RU.UTF-8,Utf16=on,HugeFiles=on,64 bits,4 CPUs Intel(R) Core(TM) i3-6100U CPU @ 2.30GHz (406E3),ASM,AES-NI) Intel(R) Core(TM) i3-6100U CPU @ 2.30GHz (406E3) CPU Freq: 64000000 - - - - - - - - RAM size: 3780 MB, # CPU hardware threads: 4 RAM usage: 882 MB, # Benchmark threads: 4 Compressing | Decompressing Dict Speed Usage R/U Rating | Speed Usage R/U Rating KiB/s % MIPS MIPS | KiB/s % MIPS MIPS ^C22: 7786 313 2417 7575
Вывод команды time
Break signaled Command exited with non-zero status 255 Command being timed: "7za b" User time (seconds): 26.41 System time (seconds): 0.16 Percent of CPU this job got: 344% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:07.71 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 120140 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 0 Minor (reclaiming a frame) page faults: 5847 Voluntary context switches: 8434 Involuntary context switches: 5924 Swaps: 0 File system inputs: 0 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 255
Тут видно что программа скушала все ядра (у меня их 4) Percent of CPU this job got: 344%
Re: Как определить число CPU (ядер) в системе?


Во FreeBSD можно примонтировать linux procfs, и думаю там будет все что тебе нужно.
POSIX вообще молчит по поводу поределения числа процессоров и прочего, так что во всех системах своя помойка. Лучшее на что можешь рассчитывать это кроссплатформенная библиотека которая будет получать эту информацию.
Как в Linux узнать всю информацию о процессоре
Оригинал: Processor/Cpu details
Автор: Silver Moon
Дата публикации: Jul 4, 2014
Перевод: Н.Ромоданов
Дата перевода: октябрь 2014 г.
Информация о процессоре
Подробная информация о процессоре, о которой мы будем говорить, содержит в себе сведения о количестве ядер, о наличии режима hyper threading, об архитектуре, о размере кэша и т. д. Найти в вашей системе эту информацию, относящуюся к процессору, может быть слегка затруднительным, поскольку ее нужно получать помощью разных команд.
К командам, которые мы будем использовать, относятся команды lscpu, /proc/cpuinfo и lstopo (hwloc). С их помощью можно узнать подробную информацию о ядрах и процессорах. В следующих примерах объясняется, как следует интерпретировать результаты, выдаваемые этими командами.
1. Поставщик и модель процессора
Чтобы определить поставщика и название модели процессора, выполните с помощью команды grep поиск в файле /proc/cpuinfo.
$ cat /proc/cpuinfo | grep vendor | uniq vendor_id : GenuineIntel
Это процессор фирмы Intel. Затем находим имя модели, которое можно использовать для поиска точных спецификаций на сайте Intel.
$ cat /proc/cpuinfo | grep 'model name' | uniq model name : Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz
Это процессор «Core 2 Quad Q8400».
2. Архитектура
С помощью команды lscpu можно узнать архитектуру процессора.
$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian .
Архитектура — x86_64, что означает 64 разрядную архитектуру.
3. Частота
Частоту/скорость работы процессора можно узнать с помощью команды lscpu и в файле /proc/cpuinfo.
$ lscpu | grep -i mhz CPU MHz: 1998.000 $ cat /proc/cpuinfo | grep -i mhz | uniq cpu MHz : 1998.000
Поскольку большинство современных процессоров работают на более низких частотах для экономии энергии, частота, о которой сообщается, может быть ниже, чем действительная частота работы указанного процессора. Когда нагрузка увеличивается, они переключаются на более высокую частоту.
Изменение частоты можно обнаружить в файле of /proc/cpuinfo, если использовать для этого команду watch.
$ watch -n 0.1 "cat /proc/cpuinfo | grep -i mhz"
Запустите в терминале указанную выше команду и, пока она работает, запустите какую-нибудь задачу, которая интенсивно использует процессор, и частота должна увеличиться.
Every 0.1s: cat /proc/cpuinfo | grep -i mhz Sun Jun 29 15:28:38 2014 cpu MHz : 2664.000 cpu MHz : 2664.000 cpu MHz : 2664.000 cpu MHz : 2664.000
4. Количество ядер
Каждое ядро процессора является, на самом деле, независимым процессором. Несколько ядер позволяют процессору одновременно выполнять несколько команд в программе, в результате чего скорость обработки данных увеличивается.
Команда 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
Таким образом, в этом случае количество ядер в процессоре равно 4.
В файле /proc/cpuinfo также есть информация о количестве ядер, но ее получить немного сложнее и запутаннее.
Простой подсчет количества процессоров может дать неправильное количество.
$ cat /proc/cpuinfo | grep 'processor'
В случае, когда используется режим hyper threading, количество процессоров, которые видит операционная система, в два раза превышает количество ядер. Но в файле /proc/cpuinfo есть поле с именем «core id», которое уникально для каждого ядра одного процессора. Подсчет этих имен позволяет получить четкое представление о количестве реальных ядер в процессоре
$ cat /proc/cpuinfo | grep -i 'core id' core id : 0 core id : 2 core id : 1 core id : 3
Несколько процессоров
Редко, но в тех случаях, если вы используете систему, в которой имеется несколько физических процессоров (да, это означает 2 или больше процессоров, установленных на материнской плате), то результаты в файле /proc/cpuinfo будут другими. В случае нескольких процессоров, «physical id» будет означать несколько значений.
$ cat /proc/cpuinfo | grep -i 'physical id' | uniq physical id : 0
Если есть более одного идентификатора физического процессора, то это означает, что в системе есть несколько физических процессоров. И в каждом процессоре вы должны посчитать ядра отдельно.
5. Технология Hyper threading
Hyper threading это технология фирмы Intel, которая позволяет одному ядру выполнять обработку так, как если бы это было два ядра. Это в определенных случаях также некоторым образом увеличивает вычислительную мощность каждого ядра.
Чтобы проверить, поддерживается ли в процессоре режим hyper-threading, необходимо сравнить два значения. Первым является фактическое количество ядер, а вторым — логическое количество.
Если количество ядер равно количеству процессоров, которые видно в ОС, то режим hyper threading отсутствует. В противном случае, т. е. если количество блоков обработки больше (в два раза больше) числа ядер, то режим hyper threading присутствует.
number of processing units = number of cores [ no hyper threading ] number of processing units = number of cores * 2 [ hyper threading present ]
В качестве примера возьмем процессор Core 2 Quad Q8400
Количество процессоров, как показано в /proc/cpuinfo, равно 4
$ cat /proc/cpuinfo | grep processor processor : 0 processor : 1 processor : 2 processor : 3
Количество «cpu cores» = 4, также, как и «siblings» = 4, а «core id» = 4
processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Core(TM)2 Quad CPU Q8400 @ 2.66GHz stepping : 10 microcode : 0xa07 cpu MHz : 1998.000 cache size : 2048 KB physical id : 0 siblings : 4 core id : 0 cpu cores : 4 apicid : 0 .
Поэтому общее число процессоров равно количеству фактических ядер. Следовательно на этом процессоре режим hyper threading отсутствует, что и подтверждается спецификациями процессора, приводимыми на сайте Intel.
Процессор с технологией hyper threading
Сведения, касающиеся hyper threading, которые присутствуют в /proc/cpuinfo или в выходных данных lscpu будут отличаться.
Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit CPU(s): 8 Thread(s) per core: 2 Core(s) per socket: 4 CPU socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 30 Stepping: 5 CPU MHz: 1199.000 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 8192K
Обратите внимание на строку «Thread(s) per core: 2», указывающую, что в каждом ядре есть по 2 потока; ядер, в общей сложности, четыре. Таким образом, количество процессоров, которые видны в ОС, равно 8.
Теперь давайте взглянем на данные из /proc/cpuinfo.
$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 60 model name : Intel(R) Core(TM) i7-4700HQ CPU @ 2.40GHz stepping : 3 microcode : 0x12 cpu MHz : 800.000 cache size : 6144 KB physical id : 0 siblings : 8 core id : 0 cpu cores : 4 apicid : 0
Здесь «cpu cores» = 4 и «siblings» = 8 означают, что имеется 4 ядра и по 2 гиперпотока на ядро. Количество процессоров, как это показано в /proc/cpuinfo, также будет равно 8.
$ cat /proc/cpuinfo | grep processor processor : 0 processor : 1 processor : 2 processor : 3 processor : 4 processor : 5 processor : 6 processor : 7
Флаг HTT в выходных данных dmidecode и флаг ht во флагах /proc/cpuinf могут давать неверную информацию, касающуюся режима hyper threading.
Для процессора Core2Quad Q8400 dmidecode и /proc/cpuinfo показывают, что флаг гиперпотоков установлен, несмотря на то, что в данном процессоре режим hyper threading недоступен.
$ sudo dmidecode -t processor | grep HTT HTT (Multi-threading) $ cat /proc/cpuinfo | grep ht | uniq 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 .
Утилита hwloc / lstopo
Утилита hwloc является небольшой утилитой, которая сообщает о структуре процессора в виде приятной диаграммы. В диаграмме показано количество ядер, наличие режима hyper threading и объем кэш-памяти. Обо всем рассказывает одна схема.
$ sudo apt-get install hwloc $ hwloc

Из приведенной выше диаграммы ясно видно, что размер кэша второго уровня L2 — 4096 KB или 4MB, количество ядер — 4, количество потоков в ядре — 1.
Процессор с технологией hyper threading
Для процессора с режимом hyper threading, выдаваемая диаграмма hwloc может выглядеть следующим образом

На диаграмме показано, что размер кэша третьего уровня L3 — 8MB, количество ядер — 4, количество потоков в ядре — 2 (т. е. режим hyper threading имеется).