Могу ли я сказать, что моя машина Linux использует только физические ядра?

Вы можете попробовать поместить временный файл в / run, проверить при запуске, существует ли он. Если нет, вы можете повторить эхо, если оно есть, вы запускали его раньше. И когда вы закончите, удалите этот файл.

1
28.02.2018, 04:44
2 ответа

Puede usar tasksetpara distribuir procesos manualmente entre núcleos configurando sus afinidades de subprocesos. Para averiguar qué subprocesos pertenecen a qué núcleos y procesadores, marque /proc/cpuinfocomo se muestra a continuación:

$ grep -E '^processor|^physical id|^core id' /proc/cpuinfo |sed 's/^processor/\nprocessor/'

processor       : 0
physical id     : 0
core id         : 0

processor       : 1
physical id     : 0
core id         : 1

processor       : 2
physical id     : 0
core id         : 0

processor       : 3
physical id     : 0
core id         : 1
$ _

processores el número de subproceso, physical ides el número de CPU física y core ides el número de núcleo. El resultado anterior proviene de una máquina con una sola CPU con dos núcleos y cuatro subprocesos.

tasksetse puede utilizar como taskset --all-tasks -p <hex_mask> <pid>para modificar la afinidad de todos los subprocesos de un proceso existente. El hex_maskes una máscara de bits donde cada bit representa un subproceso de CPU asignado y la numeración comienza desde la derecha. Por ejemplo, 0xapara la máscara significa binario 0b1010que indica una afinidad del hilo #1 y el hilo #3 para el proceso. El PID, espero, se explica por sí mismo -.

2
27.01.2020, 23:23

Виртуальные ядра или «потоки»

Если вы хотите избежать использования виртуальных ядер или «потоков», вы можете просто отключить эту функцию. Хотя отключение этой функции не обязательно улучшит производительность, это зависит от используемого вами серверного программного обеспечения (есть механизмы, которые лучше работают с HT/SMT, а другие нет ), вам, вероятно, следует протестировать его.

Согласно вашему сообщению, Intel X5650 имеет 6 ядер и 12 потоков каждый. Вы можете проверить это с помощью lscpu. Например. следующий ЦП имеет 4 ядра и HT отключен:

$ 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

Вы можете проверить ядра HT, запустив:

# grep -H. /sys/devices/system/cpu/cpu*/topology/thread_siblings_list

Это выведет что-то вроде:

$  grep -H. /sys/devices/system/cpu/cpu*/topology/thread_siblings_list
/sys/devices/system/cpu/cpu0/topology/thread_siblings_list:X,Y
/sys/devices/system/cpu/cpu1/topology/thread_siblings_list:X,Y
/sys/devices/system/cpu/cpu2/topology/thread_siblings_list:X,Y
/sys/devices/system/cpu/cpu3/topology/thread_siblings_list:X,Y

Где X,Y — физический -Core -ID,HT -Core -ID, как в :0,4 (первый виртуальный ID ядра обычно следующий за последний физический ).

Отключение Hyper -Многопоточность

С этой информацией у вас есть 2 варианта отключения HT,в зависимости от вашего доступа к серверу:

  1. Через настройки биоса (проще всего)

    • Вам следует обратиться к руководству производителя вашей материнской платы и отключить там Hyper -Threading. Это требует перезагрузки сервера и доступа к настройкам BIOS.
  2. Через командную строку (перезагрузка не требуется)

    • Вы можете напрямую отключить каждое виртуальное ядро ​​в Linux, создав disablevcore.shфайл:
    #!/bin/bash
    for i in {YY..YY}; do
       echo "Disabling logical HT core $i."
       echo 0 > /sys/devices/system/cpu/cpu${i}/online;
    done

И замените YY..YY для идентификатора потока, который вы хотите отключить, согласно вашим процессорам, возможно, {6..11}. Хотя я не уверен, как нумерация работает на установках с несколькими сокетами -, поэтому вам следует внимательно проверить.

  1. Другой вариант (2.a, если хотите ), отключить его в GRUB:

    • Отредактируйте файл конфигурации GRUB :/etc/sysconfig/grub(, если и добавьте nohtв строку, начинающуюся с:GRUB_CMDLINE_LINUX. Это должно быть что-то вроде этого:
GRUB_CMDLINE_LINUX="... noht..."

Подробнее о HT и SMT:

Intel "Hyper -Многопоточность"

Hyper-threading is Intel's proprietary simultaneous multithreading implementation used to improve parallelization of computations performed on x86 microprocessors. It first appeared in February 2002 on Xeon server processors and in November 2002 on Pentium 4 desktop CPUs. Later, Intel included this technology in Itanium, Atom, and Core 'i' Series CPUs, among others.

https://en.wikipedia.org/wiki/Hyper-threading

AMD "Одновременная многопоточность (SMT )"

Simultaneous multithreading is a technique for improving the overall efficiency of superscalar CPUs with hardware multithreading. SMT permits multiple independent threads of execution to better utilize the resources provided by modern processor architectures.

https://en.wikipedia.org/wiki/Simultaneous_multithreading

Подробнее об отключении HT через ядро ​​:

https://www.golinuxhub.com/2018/01/how-to-disable-or-enable-hyper.html

1
27.01.2020, 23:23

Теги

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