4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

Proxmox VEのCPU Pinning(Affinity)

Last updated at Posted at 2024-01-11

CPU Pinningとは

プロセスに割り当てるコアを限定することでパフォーマンスの向上を図ること。仮想マシンが複数相乗りするProxmox VEの場合、各VMが全体のコアをばらばらに参照するのではなくコアをきっちり分けた方がCPUのキャッシュが効率的に機能しやすい。またAMDのRyzenの場合複数CCXのモデルが存在し(59XX、79XX等)CCXを跨ぐと遅延が出やすいため、その場合にも有効ではないかと考えられる(要検証)
この設定はそのプロセスに対して設定されているだけであり、他のプロセスにとっては排他的になっているわけではないので他にPinningされていないVMがある場合はそのコアは使われてしまう点注意

コアのID等確認

cat /proc/cpuinfoでCPUの各コアの番号を確認できるが見づらいので、awkスクリプトを作成した。

gawk -F'[\t]*: ' '/^physical id/ {ps_id=$2} /^processor/ {id=$2} /^core id/ {core_id=$2} /^$/ {printf "physical:%s\tcore:%s\tid:%s\n",ps_id,core_id,id}' /proc/cpuinfo

実行すると下記のように出力される(AMD Ryzen 5700Xの場合)
このCPUはCCXは1つ、物理コアは8つである。16スレッドの内14スレッドをVMに割り当てる。使用するコア番号は1〜7にした。隣のid列の番号で1〜7、9〜15が今回の利用対象となる

physical:0      core:0  id:0
physical:0      core:1  id:1
physical:0      core:2  id:2
physical:0      core:3  id:3
physical:0      core:4  id:4
physical:0      core:5  id:5
physical:0      core:6  id:6
physical:0      core:7  id:7
physical:0      core:0  id:8
physical:0      core:1  id:9
physical:0      core:2  id:10
physical:0      core:3  id:11
physical:0      core:4  id:12
physical:0      core:5  id:13
physical:0      core:6  id:14
physical:0      core:7  id:15

VMへの設定

管理画面で設定。CPUアフィニティという欄で範囲指定に"-"と","が使用できる

0006-01-12 8.24.07.png

反映しているかの確認

VMのプロセスIDをまず特定する。引数にVMの名前が含まれているので、それを元に抽出。

root@sv01:~# ps ax | grep Windows10-Game
 929664 ?        SLl    5:21 /usr/bin/kvm -id 107 -name Windows10-Game,debug-threads=on -no-shutdown -chardev socket,id=qmp,path=/var/run/qemu-server/107.qmp,server=on,wait=off -mon chardev=qmp,mode=control -chardev socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5 -mon chardev=qmp-event,mode=control

混じっているが、/usr/bin/kvmのプロセスが該当のもの。この場合idは929664。
次にpinningの設定を確認する

root@sv01:~# taskset -p 929664
pid 929664's current affinity mask: fefe

fefeとなっている部分は16進数で、これを2進数にしたものが設定となる。変換サイトを利用して、1111111011111110ということがわかる。値は後ろから順番に並んでいる(一番右がid0で一番左がid15)
スクリーンショット 0006-01-16 4.57.27.png

試しにaffinityの欄を消して、再起動したところ下記の通り全体指定となった

root@sv01:~# taskset -p 926835
pid 926835's current affinity mask: ffff
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?