私は、ゲームコミュニティのためのゲームサーバーをホストする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を持つシステムからのものです。
taskset
taskset --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を無効にする2つのオプションがあります。
BIOSによる設定(最も簡単)
- マザーボードの製造元のマニュアルを確認し、ハイパースレッディングを無効にする必要があります。これを行うには、サーバーを再起動してBIOS設定にアクセスする必要があります。
コマンドライン経由(再起動は不要)
- Linuxでは、各仮想コアを直接無効にして
disablevcore.sh
ファイルを生成できます。
- Linuxでは、各仮想コアを直接無効にして
#!/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}になることがあります。マルチスロット設定で番号付けがどのように機能するかわからない場合でも、もう一度確認する必要があります。
別のオプション(必要に応じて2.a)は、GRUBで無効にすることです。
- GRUB設定ファイルを編集します。(ifで始まる行
/etc/sysconfig/grub
に追加し、次のように表示されます。noht
GRUB_CMDLINE_LINUX
- GRUB設定ファイルを編集します。(ifで始まる行
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