
Когда я запускаю top, я показываю CPU 0-7. Когда я делаю:
cat /proc/cpuinfo | grep "cpu cores" | uniq
Я получил:
cpu cores : 4
Если я выполню grep по запросу «physical id», то получу 1.
Я думаю, что моя команда неверна, а top правильный. Это не виртуальная машина, а физический сервер, RedHat. Что я делаю не так?
Я не уверен, что эти ответы на этот вопрос:
Как узнать количество ядер системы в Linux?
Количество процессоров в /proc/cpuinfo
Редактировать: Правильно ли я понимаю, что физический идентификатор, если он показывает только 1, значит, на материнской плате один физический чип?
Редактировать: Это процессор Intel(R) Xeon(R) X5560 с тактовой частотой 2,80 ГГц, но его физический идентификатор равен 1, а я думал, что он будет равен 0, но в cpuinfo физического идентификатора 0 нет.
Редактировать: Если это имеет значение, я пытаюсь выяснить, где можно лицензировать .5 количества ядер.
решение1
X5560 — это одинчип. Выглядит это так:
grep "physical id"
говорит вам, что у вас установлен ОДИН физический процессор.
Если снять теплораспределитель сверху, то можно увидеть это — единый физическийумереть(лицом вниз) :
Если бы вы могли вынуть этот кубик и перевернуть его, он бы выглядел так:
На этом единственном физическом кубике есть четырефизические ядра ЦПпостроено на кремнии:
grep "cpu cores"
говорит вам, что в вашем процессоре четыре физических ядра.
Каждое ядро представляет собой отдельный процессор с блоком операций с плавающей запятой, несколькими блоками целочисленного исполнения, парой стеков регистров и некоторыми другими волшебными механизмами, которые позволяют каждому ядру эффективно выполнять два независимых потока инструкций (потока) одновременно.
top
говорит вам, что все процессоры и ядра на вашем компьютере в совокупности могут выполнять восемь независимых рабочих процессов одновременно, то есть операционная система способна планировать выполнение восьми одновременных потоков в любой момент времени.
решение2
Какой процессор вы используете? Сколько потоков приходится на одно физическое ядро?
cat /proc/cpuinfo
показывает количество физических ядер, а также top
общее количество присутствующих потоков.
Я думаю, что ваш процессор имеет 4 физических ядра и 2 логических ядра на каждое физическое ядро. Поэтому он top
показывает 8.
Более того, содержимое /proc/cpuinfo
несколько зависит от реализации. Как и в рутированной оболочке Android, cpuinfo
файл не содержит никаких терминов cpu cores
.
Однако в cpuinfo
каждом потоке есть имя processor : X
, где X
номер потока. Таким образом, номер последнего потока должен быть таким же, как и top/htop
выход.
Результат nproc --all
также должен соответствоватьtop/htop
решение3
top
показывает один «ЦП» на логический ЦП; на x86 это произведение количества сокетов в системе на количество физических ядер на сокет и на количество потоков на ядро.
Запись cpu cores
в /proc/cpuinfo
, снова на x86, показывает количество физических ядер. Чтобы найти количество логических ядер, как используется в top
, вам следует посмотреть на siblings
значение:
cat /proc/cpuinfo | grep "siblings" | uniq
Это подробно описано вдокументация ядра.
lscpu
предоставляет информацию об установленных процессорах, которую легче понять /proc/cpuinfo
(или, скорее, представляет ту же информацию в более простой форме).
решение4
cpuinfo показывает фактические ядра, в то время как htop/top показывает как ядра, так и потоки. У вас, скорее всего, 4 ядра и 4 потока, вот почему.