Как подсчитать количество ядер процессора?

Хорошо, теперь я понял. После нескольких проверок на форуме FreeBSD я теперь могу подтвердить, что тюрьмы FreeBSD действуют немного как швейцарский сыр, если речь идет об объектах SHM. Действительно, FreeBSD не обеспечивает никакой изоляции для SHM-объектов: все тюрьмы могут получить доступ ко всем SHM-объектам в масштабе всей системы, без возможности предотвратить это.

Ошибка, упомянутая в этом вопросе, поэтому вполне логична:

  • Когда использовались разные UID, Squid не мог запуститься, потому что он пытался получить доступ к объектам SHM, принадлежащим другому пользователю, отсюда и сообщение об ошибке " create не удалось выполнить shm_open (/squid-cf__metadata.shm): (17) Файл существует ",
  • Когда в обеих установках использовался один и тот же UID, Squid запустился успешно, но ситуация была возможно, даже хуже, поскольку оба экземпляра теперь будут бороться с одним и тем же объектом памяти, перезаписывая данные друг друга и удаляя объект при выключении ...

Из-за этого необходимо принять особые меры, чтобы гарантировать, что каждый экземпляр Squid будет использовать разные SHM имена объектов.

По умолчанию Squid создает следующие объекты SHM в системах FreeBSD (точное поведение зависит от ОС):

/squid-cf__metadata.shm
/squid-cf__queues.shm
/squid-cf__readers.shm

squid предлагает параметр -n , позволяющий дать определенное имя к экземпляру. Конкретно это имя (среди прочего) заменит "squid" в именах объектов SHM выше, так что имя объекта SHM станет уникальным для всей системы.

Следовательно, при настройке нового экземпляра Squid в новой тюрьме необходимо отредактировать /etc/rc.conf и добавить запись, как показано ниже (замените something_unique на экземпляр уникальное имя на вашем хосте):

squid_flags="-n something_unique"

Это позволяет правильно запустить оба сервера Squid, каждый с разными UID.

Очевидно, хотя здесь это немного выходит за рамки, тот факт, что SHM-объекты Squid могут быть свободно доступны из любой тюрьмы, может представлять собой проблему безопасности сам по себе, и ее нельзя игнорировать ...

4
12.07.2017, 15:59
7 ответов

Если вас интересует только сумма , вы также можете использовать GNU awk:

cat /proc/cpuinfo |grep "cpu cores" | awk -F: '{ num+=$2 } END{ print "cpu cores", num }'

Изменить:Это правильный ответ на намерение ОП суммировать числа в последнем столбце. Однако вопрос о том, сколько ядер (физических/виртуальных )имеется на машине, содержится в других ответах на вопрос.

7
27.01.2020, 20:44

В терминале nproc, OP :общее количество ядер процессора

8
27.01.2020, 20:44

Попробуйте это,

Согласноman lscpu

CORE   The logical core number. A core can contain several CPUs.

SOCKET The logical socket number. A socket can contain several cores.

coresи socketsявляются физическими, а CPU(s)— логическими числами. Итак, чтобы узнать количество ядер в вашей системе, выполнитеnumber of cores x number of sockets

Пример вывода lscpuвыглядит следующим образом:

Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2

Таким образом, общее количествоcores: 16

Общее количествоCPU(s): 32(Так как количество threadsна coreравно2)

Как упоминал @Durga, nprocдает общее количество CPUs.

Для получения дополнительной информации см. этот ответ , чтобы получить интерпретацию /proc/cpuinfoсм. этот

Хочу поблагодарить @ Кусалананду за помощь в понимании того же .

11
27.01.2020, 20:44

Если у вас есть glibc и достаточно свежее ядро, вы можете использовать

getconf _NPROCESSORS_ONLN

, чтобы вернуть число подключенных в данный момент1 процессоров. Сюда входят процессоры виртуальных и гиперпотоков -.


1 В большинстве систем это число равно общему количеству процессоров. Исключением являются системы, в которых один или несколько процессоров отключены по какой-либо причине (e. г. из-за неисправности или из-за искусственных ограничений, таких как арендованное/лицензированное оборудование )или системы, поддерживающие «горячее» -подключение ЦП, были добавлены новые ЦП, но еще не активированы.

5
27.01.2020, 20:44

Краткий ответ

Количество физических ядер:

> cat /proc/cpuinfo | grep -m 1 "cpu cores"
cpu cores   : 2

Количество виртуальных ядер (, например. Удвоенное количество физических ядер с технологией Hyper-Threading):

> cat /proc/cpuinfo | grep -c "cpu cores"
4

Если у вас более одного ЦП/процессора (в в этом смысле)на материнской плате, это не работает должным образом. См. раздел «Несколько процессоров на материнской плате».Это может иметь место, если вы работаете на вычислительном кластере или на высокопроизводительной -настольной рабочей станции для целей CAD/инженерного -.

Длинный ответ

Команда cat /proc/cpuinfoдолжна вывести количество физических ядер в строке cpu cores. Но он выводит эту информацию для каждого виртуального ядра. Таким образом, если вы хотите получить номер физического ядра, вы просто берете первое вхождение строки cpu cores, то есть

> cat /proc/cpuinfo | grep -m 1 "cpu cores"
cpu cores   : 2

В качестве альтернативы, если вы ищете количество виртуальных ядер, вы подсчитываете, сколько раз встречается строка cpu cores, то есть

> cat /proc/cpuinfo | grep -c "cpu cores"
4

Пример

У меня естьIntel(R) Core(TM) i7-3740QM CPU @ 2.70GHz(4 физических ядра, гиперпоточность ). Посмотрим, что у меня получится:

> cat /proc/cpuinfo | grep "cpu cores"
cpu cores   : 4
cpu cores   : 4
cpu cores   : 4
cpu cores   : 4
cpu cores   : 4
cpu cores   : 4
cpu cores   : 4
cpu cores   : 4

Количество физических ядер:

> cat /proc/cpuinfo | grep -m 1 "cpu cores"
cpu cores   : 4

Количество виртуальных ядер:

> cat /proc/cpuinfo | grep -l "cpu cores"
8

Вы также можете взять последний найденный номер процессора и увеличить его на единицу

> cat /proc/cpuinfo | grep "processor" | tail -1
processor   : 7
# +1

Несколько ЦП на материнскую плату

Я только что просмотрел один узел вычислительного кластера, над которым сейчас работаю :1 узел имеет 4 процессора (Intel Xeon )с 8 физическими ядрами на каждом; каждый процессор поддерживает многопоточность; следовательно, каждый ЦП имеет 16 виртуальных ядер; суммируя, на одном узле 32 физических и 64 виртуальных ядра;

cat /proc/cpuinfoвыводит информацию для каждого виртуального ядра. Таким образом, мы получаем 64 «пакета» информации. Если у нас есть такая установка, нам нужно рассмотреть строку physical idв cat /proc/cpuinfo.

Вот что я получаю:

> cat /proc/cpuinfo | grep -m 1 "cpu cores"
cpu cores   : 8

> cat /proc/cpuinfo | grep -c "cpu cores"
64

> cat /proc/cpuinfo | grep "physical id" | tail -1
physical id   : 3
# this result +1 => number of CPUs

Таким образом, «число позади cpu cores» x «число позади physical id+ 1» — это количество физических ядер одного нашего узла (8 x (3 + 1 )). 64 — это количество виртуальных ядер.

Номенклатура

Поскольку все используют ядра, ЦП и процессор в другом контексте, я ввожу терминологию для своего ответа здесь:

  • процессор :вся аппаратная часть (напр.мой процессор Intel® Core™ i7 -3740QM)
  • ЦП :ЦП = процессор
  • ядро ​​или физическое ядро ​​:количество физических вычислительных блоков в ЦП
  • поток или виртуальное ядро ​​:количество потоков, которые могут выполняться параллельно на одном процессоре; если (процессор Intel -)способен выполнять гиперпоточность, количество виртуальных ядер вдвое превышает количество физических ядер (Я не уверен, как другие поставщики процессоров называют эту функцию );

__Пример:__

  • процессор :Intel (R )Core (TM )i7 -3740QM CPU @ 2,70 ГГц
  • источник:Intel Ark

Данные:

  • Номер ЦП :1
  • номер процессора :1
  • ядер (или физических ядер ):4
  • потоки (или виртуальные ядра ):8
4
27.01.2020, 20:44

Используйтеlscpu , чтобы получить количество ядер на сокет; затем умножьте на количество сокетов, а затем на количество потоков на ядро.

0
27.01.2020, 20:44

Эти ответы либо игнорируют гиперпоточность и/или множественные сокеты, либо включают обработку текста. Я продолжаю находить эту страницу, ища простой (иш )и полный ответ, поэтому я размещаю его здесь.

Для количества физических ядер ЦП

lscpu --parse='core,socket' | grep -v '^#' | sort -u | wc -l

Для количества потоков ЦП

lscpu --parse='core,socket' | grep -v '^#' | wc -l
0
30.09.2020, 14:38

Теги

Похожие вопросы