HT 및 SMT에 대한 추가 정보:

HT 및 SMT에 대한 추가 정보:

저는 게임 커뮤니티를 위한 게임 서버를 호스팅하는 2개의 X5650 2.7GHZ 프로세서가 장착된 Linux 상자를 가지고 있습니다. 제 질문은 게임 서버에 최적의 1개 코어 성능이 필요하지만 24개의 vCORES와 12개의 물리 코어가 있다는 것입니다. 12개의 물리적 코어를 사용하도록 커널에 "지정"하는 것이 가능합니까? 그러면 1개의 물리적 코어가 2VCORES를 사용합니까?

고마워요, 알렉스.

답변1

taskset스레드 선호도를 설정하여 코어 간에 프로세스를 수동으로 배포 할 수 있습니다 . 어떤 스레드가 어떤 코어와 프로세서에 속하는지 확인하려면 /proc/cpuinfo다음을 확인하십시오.

$ 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
$ _

processor는 스레드 수, physical id는 물리적 CPU 수, core id는 코어 수입니다. 위의 출력은 2개의 코어와 4개의 스레드가 있는 단일 CPU가 있는 시스템에서 나온 것입니다.

tasksettaskset --all-tasks -p <hex_mask> <pid>기존 프로세스의 모든 스레드 선호도를 수정하는 데 사용할 수 있습니다 . 이는 hex_mask각 1비트가 할당된 CPU 스레드를 나타내는 비트마스크이며 오른쪽부터 번호가 매겨집니다. 예를 들어 0xa마스크는 0b1010프로세스에 대한 스레드 #1과 스레드 #3의 선호도를 나타내는 바이너리를 의미합니다. PID가 설명이 필요하기를 바랍니다.

답변2

가상 코어 또는 "스레드"

가상 코어나 "스레드"를 방지하려면 해당 기능을 비활성화하면 됩니다. 이 기능을 비활성화한다고 해서 반드시 성능이 향상되는 것은 아니지만 실행 중인 서버 소프트웨어에 따라(일부 엔진은 HT/SMT에서 더 잘 작동하고 다른 엔진은 그렇지 않음) 테스트해야 합니다.

귀하의 게시물에 따르면 Intel X5650에는 각각 6개의 코어와 12개의 스레드가 있습니다. 를 사용하여 이를 확인할 수 있습니다 lscpu. 예를 들어. 다음 CPU에는 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는 물리적 코어 ID인 HT-코어 ID입니다(예: 0,4)(첫 번째 가상 코어 ID는 일반적으로 마지막 물리적 코어 ID 다음입니다).

하이퍼스레딩 비활성화

이 정보를 사용하면 서버 액세스에 따라 HT를 비활성화할 수 있는 두 가지 옵션이 있습니다.

  1. BIOS를 통한 설정(가장 쉬움)

    • 마더보드 제조업체의 설명서를 확인하고 하이퍼스레딩을 비활성화해야 합니다. 이를 위해서는 서버를 재부팅하고 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를 비활성화하려는 스레드 ID로 바꾸십시오. 프로세서에 따라 {6..11}이 될 수 있습니다. 다중 슬롯 설정에서 번호 매기기가 어떻게 작동하는지 잘 모르더라도 다시 확인해야 합니다.

  1. 또 다른 옵션(원하는 경우 2.a)은 GRUB에서 비활성화하는 것입니다.

    • GRUB 구성 파일을 편집합니다: (if 로 시작하는 줄 /etc/sysconfig/grub에 추가하고 다음과 같이 표시됩니다.nohtGRUB_CMDLINE_LINUX
GRUB_CMDLINE_LINUX="... noht ..."

HT 및 SMT에 대한 추가 정보:

인텔 "하이퍼스레딩"

하이퍼스레딩은 x86 마이크로프로세서에서 수행되는 계산의 병렬화를 향상시키기 위한 Intel의 독자적인 동시 멀티스레딩 구현입니다. 2002년 2월 Xeon 서버 프로세서에 처음 등장했고 2002년 11월 Pentium 4 데스크톱 CPU에 처음 등장했습니다. 나중에 Intel은 이 기술을 Itanium, Atom 및 Core "i" 시리즈 CPU에 적용했습니다.

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

AMD "동시 멀티스레딩(SMT)"

동기식 멀티스레딩은 하드웨어 멀티스레딩을 통해 슈퍼스칼라 CPU의 전반적인 효율성을 향상시키는 기술이다. SMT를 사용하면 여러 개의 독립적인 실행 스레드가 최신 프로세서 아키텍처에서 제공하는 리소스를 더 잘 활용할 수 있습니다.

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

커널을 통한 HT 비활성화에 대한 자세한 내용:

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

관련 정보