Несколько поздно теперь, но у меня просто была подобная проблема при установке Arch (впервые). Оказывается, что по любой причине, установка пакета создает ядро и изображения initramfs с различными именами от используемых Личинкой. Все остальное, включая UUID, было прекрасно.
Имена файлов по умолчанию, с которыми я закончил, были /vmlinuz-linux
(вместо /vmlinuz26
) и /initramfs-linux.img
(/kernel26.img
) - загружающийся с живого CD и изменения /boot/grub/menu.lst
для замены ядра и initramfs местоположений позволяют мне загрузиться.
Относительно того, как это произошло во-первых, я предполагаю, что сценарий установки Arch просто не передает выходные имена файлов от установки ядра до создания меню Grub. Это, печально, хотя, и не большое введение, к какой часто разбирается, чтобы быть одним из лучших дистрибутивов.
Примечания добавляются 8 июля 2014: Как Riccardo Murri указал, мой ответ только ниже шоу, сообщает ли процессор для поддержки гиперпоточности. Обычно *отклоняют O/S, настроены для включения гиперпоточности, если поддерживается. Однако для фактической проверки этого программно см., например, ответ Nils!
----Исходный ответ с 25 марта 2012:
Вы действительно на правильном пути :) с
dmidecode -t processor | grep HTT
На Linux я обычно просто ищу "ht" на строке "флагов" /proc/cpuinfo
. Посмотрите, например,
grep '^flags\b' /proc/cpuinfo | tail -1
или если Вы хотите включать "ht" в шаблон
grep -o '^flags\b.*: .*\bht\b' /proc/cpuinfo | tail -1
(\b
соответствует границам слова и помогает избежать ложных положительных сторон в случаях, где "ht" является частью другого флага.)
Можно проверить возможность HT ЦП с этой командой
# grep ht /proc/cpuinfo
Можно перечислить физический и logiciel ЦП, замеченный Ядром со следующей командой:
# egrep -i "processor|physical id" /proc/cpuinfo
Это дает этот вывод на одножильном HT, включенном ЦП:
processor : 0
physical id : 0
processor : 1
physical id : 0
Можно считать результат как это:
processor : 0 (CPU 0, first logical)
physical id : 0 (CPU 0 is on the first physical)
processor : 1 (CPU 1, second logical)
physical id : 0 (CPU 1 is on the first physical)
=> It means I have HT enabled
ht
во флагах ЦП.
– Riccardo Murri
23.04.2014, 21:01
physical id
кажется, представляет сокет/микросхему. core id
кажется, указывает на то же физическое ядро
– Heartinpiece
08.07.2015, 06:11
Если количество логических процессоров является дважды количеством ядер, у Вас есть HT. Используйте для следующего сценария для декодирования/proc/cpuinfo:
#!/bin/sh
CPUFILE=/proc/cpuinfo
test -f $CPUFILE || exit 1
NUMPHY=`grep "physical id" $CPUFILE | sort -u | wc -l`
NUMLOG=`grep "processor" $CPUFILE | wc -l`
if [ $NUMPHY -eq 1 ]
then
echo This system has one physical CPU,
else
echo This system has $NUMPHY physical CPUs,
fi
if [ $NUMLOG -gt 1 ]
then
echo and $NUMLOG logical CPUs.
NUMCORE=`grep "core id" $CPUFILE | sort -u | wc -l`
if [ $NUMCORE -gt 1 ]
then
echo For every physical CPU there are $NUMCORE cores.
fi
else
echo and one logical CPU.
fi
echo -n The CPU is a `grep "model name" $CPUFILE | sort -u | cut -d : -f 2-`
echo " with`grep "cache size" $CPUFILE | sort -u | cut -d : -f 2-` cache"
$NUMCORE > $NUMLOG
мы можем сказать, что гиперпоточность включена, правильно? Это факт это было бы 2 * $NUMCORE = $NUMLOG
, это всегда верно, или некоторые центральные процессоры могли бы иметь 4x больше ядер?
– Tombart
13.03.2016, 19:24
Я нашел это самым простым и менее удобным кодовым способом, который также работает на всех моих тестовых средах. но требует [116488]bc[116489].
Я верю, что это сработает на всех платформах, и скажет, способен ли его процессор, и если он активен. Может быть немного неприятно, но я новичок в скриптинге. Я тестировал с помощью centos XENSERVER vm, Ubuntu и Openfiler (rpath)[116124].
Этот вкладыш, кажется, выполняет улочку для меня (требует корневых привилегий):
dmidecode -t processor | grep -E '(Core Count|Thread Count)'
Выход:
Core Count: 2
Thread Count: 4
Количество потоков - это удвоить счетчик Core, поэтому у меня есть гиперторизация.
Или, если вы действительно хотите, чтобы ваш сценарий Perl, как запрашивается ...
perl -e 'print grep(/Core Count/ || /Thread Count/, `dmidecode -t processor`);'
perl -ne'
$i++ if /^\s*$/;
push @{$x[$i]}, [/^(.+?) \s*:\s* (.+)/x] if /core|sibling|physical id/; }{
$r= shift @x;
for $i (0..$#$r) {
$$r[$i][1] .= " ".$$_[$i][1] for @x;
printf "%-15s: %s\n", @{$$r[$i]};
}
' /proc/cpuinfo
Этот результат показывает, что HT включен, поскольку братьев и сестер
число (12) больше, чем ядер процессора
(6 )
physical id : 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
siblings : 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
core id : 0 1 2 8 9 10 0 1 2 8 9 10 0 1 2 8 9 10 0 1 2 8 9 10
cpu cores : 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
Вот подход на основе Python - он также предлагает способы отключить его, если это необходимо.
import re
total_logical_cpus = 0
total_physical_cpus = 0
total_cores = 0
logical_cpus = {}
physical_cpus = {}
cores = {}
hyperthreading = False
for line in open('/proc/cpuinfo').readlines():
if re.match('processor', line):
cpu = int(line.split()[2])
if cpu not in logical_cpus:
logical_cpus[cpu] = []
total_logical_cpus += 1
if re.match('physical id', line):
phys_id = int(line.split()[3])
if phys_id not in physical_cpus:
physical_cpus[phys_id] = []
total_physical_cpus += 1
if re.match('core id', line):
core = int(line.split()[3])
if core not in cores:
cores[core] = []
total_cores += 1
cores[core].append(cpu)
if (total_cores * total_physical_cpus) * 2 == total_logical_cpus:
hyperthreading = True
print(" This system has %d physical CPUs" % total_physical_cpus)
print(" This system has %d cores per physical CPU" % total_cores)
print(" This system has %d total cores" % (total_cores * total_physical_cpus))
print(" This system has %d logical CPUs" % total_logical_cpus)
if hyperthreading:
print(" HT detected, if you want to disable it:")
print(" Edit your grub config and add 'noht'")
print(" -OR- disable hyperthreading in the BIOS")
print(" -OR- try the following to offline those CPUs:")
for c in cores:
for p, val in enumerate(cores[c]):
if p > 0:
print(" echo 0 > /sys/devices/system/cpu/cpu%d/online" % (val))
Я всегда просто использовал следующее и смотрел «Потоки на ядро:».
hostname:~ # lscpu
Architecture: x86_64
CPU(s): 24
Thread(s) per core: 2 <-- here
Core(s) per socket: 6
CPU socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 44
Stepping: 2
CPU MHz: 1596.000
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 12288K
Однако обратите внимание , этот метод не сработает, если какой-либо логический процессор был отключен простой командой
echo 0 > /sys/devices/system/cpu/cpuX/online
Если вы прочитаете / sys / devices / system / cpu / cpu0 / topology / thread_siblings_list
, он вернет список, разделенный запятыми. родственных потоков (т.е. «ядер» Hyperthread) ЦП 0.
Например, на моем 2-сокетном 6-ядерном Xeon с включенной гиперпоточностью я получаю:
cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
0,12
Но после отключения гиперпоточности в BIOS я получаю :
cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
0
Предполагая, что ЦП 0 всегда будет доступен, затем проверяем файл thread_sibling_list
procfs ЦП 0 на наличие более чем одного узла, или ищем запятую, или даже что-то большее, чем 0
, будет указывать, включена ли гиперпоточность.
Я бы ответил на Perl, но 1) я не знаю Perl и 2) я предполагаю, что решение является довольно тривиальным однострочным.
В Linux это работает хорошо:
$ lscpu -e
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
0 0 0 0 0:0:0:0 yes
1 0 0 1 1:1:1:0 yes
2 0 0 2 2:2:2:0 yes
3 0 0 3 3:3:3:0 yes
4 0 0 4 4:4:4:0 yes
5 0 0 5 5:5:5:0 yes
6 0 0 6 6:6:6:0 yes
7 0 0 7 7:7:7:0 yes
8 1 1 8 8:8:8:1 yes
9 1 1 9 9:9:9:1 yes
10 1 1 10 10:10:10:1 yes
11 1 1 11 11:11:11:1 yes
12 1 1 12 12:12:12:1 yes
13 1 1 13 13:13:13:1 yes
14 1 1 14 14:14:14:1 yes
15 1 1 15 15:15:15:1 yes
16 0 0 0 0:0:0:0 yes
17 0 0 1 1:1:1:0 yes
18 0 0 2 2:2:2:0 yes
19 0 0 3 3:3:3:0 yes
20 0 0 4 4:4:4:0 yes
21 0 0 5 5:5:5:0 yes
22 0 0 6 6:6:6:0 yes
23 0 0 7 7:7:7:0 yes
24 1 1 8 8:8:8:1 yes
25 1 1 9 9:9:9:1 yes
26 1 1 10 10:10:10:1 yes
27 1 1 11 11:11:11:1 yes
28 1 1 12 12:12:12:1 yes
29 1 1 13 13:13:13:1 yes
30 1 1 14 14:14:14:1 yes
31 1 1 15 15:15:15:1 yes
В приведенном выше примере у нас есть 2 сокета NUMA (SOCKET=1 или 2). У нас есть 16 физических ядер (CORE = от 0 до 15). У каждого CORE есть родственный гиперпоток (например, CORE=0 содержит ЦП 0,16.
Мы можем проверить гиперпоток следующим образом:
$ cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
0,16
Иерархия кэш-памяти:
CPU 0 --> L1D_0|L1I_0 -> L2_0 -> L3_0
^ ^
CPU 16 ---| |
|
CPU 1 --> L1D_1|L1I_1 -> L2_1 --->
^
CPU 17 ---|
...
lscpu -p дает вывод в формате csv для простой разбор программы.
$ lscpu -p
# The following is the parsable format, which can be fed to other
# programs. Each different item in every column has an unique ID
# starting from zero.
# CPU,Core,Socket,Node,,L1d,L1i,L2,L3
0,0,0,0,,0,0,0,0
1,1,0,0,,1,1,1,0
2,2,0,0,,2,2,2,0
3,3,0,0,,3,3,3,0
4,4,0,0,,4,4,4,0
...
Лучше проверьте lscpu, где вы можете увидеть "Thread(s) per core: 1", что означает только один поток на 1 ядро.
# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 63
Model name: Intel(R) Xeon(R) CPU E5-2623 v3 @ 3.00GHz
Stepping: 2
CPU MHz: 1200.000
BogoMIPS: 5992.82
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 10240K
NUMA node0 CPU(s): 0,1,4,5
NUMA node1 CPU(s): 2,3,6,7
Стефания уже упоминала lscpu
. Я хотел добавить немного больше к этому.
На моем процессоре AMD Epyc всякий раз, когда есть автономное логическое ядро, lscpu
отображает новую дополнительную строку с именемOff-line CPU(s) list:
# echo 0 > /sys/devices/system/cpu/cpu9/online
# echo 0 > /sys/devices/system/cpu/cpu16/online
#
#lscpu
CPU(s): 64
On-line CPU(s) list: 0-8,10-15,17-63
Off-line CPU(s) list: 9,16
Самый простой способ проверить, активен ли SMT (общий для HT, который является просто брендом Intel ), просто выполните:
cat /sys/devices/system/cpu/smt/active
дает вам 0 для неактивного или 1 для активного
Вы можете включить или выключить его во время выполнения с помощью:
echo [on|off] > /sys/devices/system/cpu/smt/control
lscpu | grep Thread
Returns -> Thread(s) per core: 1
Если 1 гиперпоточность НЕ включена.
lscpu
путь состоит в том, чтобы проверить. – sudo 17.03.2017, 09:15