Хорошо, теперь я понял. После нескольких проверок на форуме FreeBSD я теперь могу подтвердить, что тюрьмы FreeBSD действуют немного как швейцарский сыр, если речь идет об объектах SHM. Действительно, FreeBSD не обеспечивает никакой изоляции для SHM-объектов: все тюрьмы могут получить доступ ко всем SHM-объектам в масштабе всей системы, без возможности предотвратить это.
Ошибка, упомянутая в этом вопросе, поэтому вполне логична:
Из-за этого необходимо принять особые меры, чтобы гарантировать, что каждый экземпляр 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 могут быть свободно доступны из любой тюрьмы, может представлять собой проблему безопасности сам по себе, и ее нельзя игнорировать ...
Если вас интересует только сумма , вы также можете использовать GNU awk:
cat /proc/cpuinfo |grep "cpu cores" | awk -F: '{ num+=$2 } END{ print "cpu cores", num }'
Изменить:Это правильный ответ на намерение ОП суммировать числа в последнем столбце. Однако вопрос о том, сколько ядер (физических/виртуальных )имеется на машине, содержится в других ответах на вопрос.
Попробуйте это,
Согласно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
см. этот
Хочу поблагодарить @ Кусалананду за помощь в понимании того же .
Если у вас есть glibc и достаточно свежее ядро, вы можете использовать
getconf _NPROCESSORS_ONLN
, чтобы вернуть число подключенных в данный момент1 процессоров. Сюда входят процессоры виртуальных и гиперпотоков -.
1 В большинстве систем это число равно общему количеству процессоров. Исключением являются системы, в которых один или несколько процессоров отключены по какой-либо причине (e. г. из-за неисправности или из-за искусственных ограничений, таких как арендованное/лицензированное оборудование )или системы, поддерживающие «горячее» -подключение ЦП, были добавлены новые ЦП, но еще не активированы.
Количество физических ядер:
> 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 — это количество виртуальных ядер.
Поскольку все используют ядра, ЦП и процессор в другом контексте, я ввожу терминологию для своего ответа здесь:
__Пример:__
Данные:
Используйтеlscpu , чтобы получить количество ядер на сокет; затем умножьте на количество сокетов, а затем на количество потоков на ядро.
Эти ответы либо игнорируют гиперпоточность и/или множественные сокеты, либо включают обработку текста. Я продолжаю находить эту страницу, ища простой (иш )и полный ответ, поэтому я размещаю его здесь.
Для количества физических ядер ЦП
lscpu --parse='core,socket' | grep -v '^#' | sort -u | wc -l
Для количества потоков ЦП
lscpu --parse='core,socket' | grep -v '^#' | wc -l