AMD Ryzen 9 5900XでUbuntu 21.10を動かす

AMD Ryzen 9 5900Xのpassmarkスコアが約4万!、AMDいいなーと思っていましたが、Ubuntuで不安定との記事をちらほら見かけて、躊躇していました。あるとき、AMDとUbuntuを安定動作させているという記事を見かけて、よし、なんとかなりそうと、ポチっとしました。

Ubuntu 21.10

AMD Ryzen にはkernel 5.8以上が必要とのこと。Ubuntuバージョンの選択肢は2つです。

1つ目は、20.04 LTS。kernel 5.4なので、別途kernel 5.8以上にアップデートしなければいけません。

2つ目は、21.10。kernel 5.13ですが、サポート期間が9ヶ月しかなく、半年リリースごとにアップグレードしなければいけません。

20.04 LTSですが、これまで、LTSの2年ごとのアップグレードのたびにクリーンインストールしてきました。どういうことかというと、14→16へアップグレードしたところ起動しなくなり、16をクリーンインストール。16→18へのアップグレードも起動しなくなり、18をクリーンインストール。

いま、20.04 LTSをインストールすると、来年4月には 22.04 LTS がリリースされて、またクリーンインストールか?と少し憂鬱です。

21.10は、もしかしたら半年リリースのバージョンのほうが、クリーンインストールせずに、アップグレードできるかもという期待もあって、最新の21.10を選びました。

AMD Ryzen向けの設定

BIOSのアップデート

BIOSバージョンは最新でした。

BIOSに入り、Advanced>CPU Configurationで、「SVM Mode」を「Enabled」に設定します。

Kernelのアップデート

AMD Ryzenには、kernel 5.8以上が必要です。

Ubuntu 21.10は、kernel 5.13 なので、これもスキップ。以下、手順だけ記載。

現在のKernelのバージョンを確認します。

$ uname -r
5.13.0-21-genericCode language: Bash (bash)

インストール可能なKernelのバージョンを確認します。

$ sudo apt-cache search linux-image-5
linux-image-5.13.0-1004-kvm - Signed kernel image kvm
linux-image-5.13.0-1005-aws - Linux kernel image for version 5.13.0 on 64 bit x86 SMP
linux-image-5.13.0-1005-gcp - Signed kernel image GCP
linux-image-5.13.0-1006-azure - Signed kernel image azure
linux-image-5.13.0-1008-oracle - Signed kernel image oracle
linux-image-5.13.0-19-generic - Signed kernel image generic
linux-image-5.13.0-19-lowlatency - Signed kernel image lowlatency
linux-image-5.13.0-1005-kvm - Signed kernel image kvm
linux-image-5.13.0-1006-aws - Linux kernel image for version 5.13.0 on 64 bit x86 SMP
linux-image-5.13.0-1006-gcp - Signed kernel image GCP
linux-image-5.13.0-1007-azure - Signed kernel image azure
linux-image-5.13.0-1009-oracle - Signed kernel image oracle
linux-image-5.13.0-20-generic - Signed kernel image generic
linux-image-5.13.0-20-lowlatency - Signed kernel image lowlatency
linux-image-5.13.0-21-generic - Signed kernel image generic
linux-image-5.13.0-21-lowlatency - Signed kernel image lowlatencyCode language: Bash (bash)

任意のバージョンのKernelをインストールします。

$ sudo apt install linux-image-5.13.0-21-genericCode language: Bash (bash)

インストールが完了したらサーバーを再起動します。

$ sudo rebootCode language: Bash (bash)

CPUのC6ステート(省電力設定)を無効化します

1. Msr-tools

Msr-toolsをインストールします。

$ sudo apt install msr-toolsCode language: Bash (bash)

Msrを実行します。

$ sudo modprobe msrCode language: Bash (bash)

サーバーの起動時にmsrが実行されるようにするため、設定ファイルにmsrと追記します。

$ sudo nano /etc/modules-load.d/modules.confCode language: Bash (bash)
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
msrCode language: plaintext (plaintext)

2. C6ステートを無効化するスクリプト

C6ステートを無効化するスクリプトをダウンロードします。

$ cd ~/Downloads
$ git clone https://github.com/r4m0n/ZenStates-Linux.gitCode language: Bash (bash)

入手したスクリプトをbinディレクトリにコピーします。

$ sudo cp ZenStates-Linux/zenstates.py /usr/local/bin/zenstates.pyCode language: Bash (bash)

サーバーの起動時にスクリプトが実行されるための設定ファイルを作成します。

$ sudo nano /etc/systemd/system/disable-c6.serviceCode language: Bash (bash)
[Unit]
Description=Ryzen Disable C6
DefaultDependencies=no
After=sysinit.target local-fs.target suspend.target hibernate.target
Before=basic.target

[Service]
Type=oneshot
ExecStart=python3 /usr/local/bin/zenstates.py --c6-disable

[Install]
WantedBy=basic.target suspend.target hibernate.target
Code language: plaintext (plaintext)

サーバーの起動時にスクリプトが実行されるようにします。

$ sudo systemctl enable disable-c6.serviceCode language: Bash (bash)

3. Grub設定

Grubの設定ファイルを編集します。

$ sudo nano /etc/default/grubCode language: Bash (bash)

C6ステートを無効化するパラメータをGRUB_CMDLINE_LINUX_DEFAULTに追記し、保存します。

編集前

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"Code language: Bash (bash)

編集後

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash processor.max_cstate=1 intel_idle.max_cstate=0"Code language: plaintext (plaintext)

Grubを更新します。

$ sudo update-grubCode language: Bash (bash)

サーバーを再起動します。

$ sudo rebootCode language: Bash (bash)

C6ステートが無効化されていることを確認する。(「C6 State – Package」と「C6 State – Core」がDisabledになっていればOK)

$ sudo python3 /usr/local/bin/zenstates.py -l
P0 - Enabled - FID = 94 - DID = 8 - VID = 48 - Ratio = 37.00 - vCore = 1.10000
P1 - Enabled - FID = 8C - DID = A - VID = 58 - Ratio = 28.00 - vCore = 1.00000
P2 - Enabled - FID = 84 - DID = C - VID = 68 - Ratio = 22.00 - vCore = 0.90000
P3 - Disabled
P4 - Disabled
P5 - Disabled
P6 - Disabled
P7 - Disabled
C6 State - Package - Disabled
C6 State - Core - Disabled
Code language: Bash (bash)

NVMeのAPST(省電力設定)を無効化する

1. NVME-cliをインストールします

$ sudo apt install nvme-cliCode language: Bash (bash)

2. Grub設定

Grub(OS起動時に実行されるプログラム)の設定ファイルを編集します。

$ sudo nano /etc/default/grubCode language: Bash (bash)

APSTを無効化するパラメータをGRUB_CMDLINE_LINUX_DEFAULTに追記し、保存します。

編集前

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash processor.max_cstate=1 intel_idle.max_cstate=0"Code language: Bash (bash)

編集後

$ GRUB_CMDLINE_LINUX_DEFAULT="quiet splash processor.max_cstate=1 intel_idle.max_cstate=0 nvme_core.default_ps_max_latency_us=0"Code language: Bash (bash)

Grubを更新します。

$ sudo update-grubCode language: Bash (bash)

サーバーを再起動します。

$ sudo rebootCode language: Bash (bash)

パラメータが反映されているか確認します。

$ cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.13.0-21-generic root=UUID=198727da-3014-4f2b-ac63-a6a2d706d6da ro quiet splash processor.max_cstate=1 intel_idle.max_cstate=0 nvme_core.default_ps_max_latency_us=0 vt.handoff=7
Code language: Bash (bash)

参考記事

AMDとLinuxの相性が悪い問題 – ぐれメモ

いまのところ、安定して動いているよ。

旧PCと比べて、passmark値は4倍、SSDのread値は10倍になったんでしょ、速くなったの?

ものすごい期待したけど、普通に速くなった感じかな

「速くなった感じ」ではなくて、アプリのビルド時間で言ってよね

タイトルとURLをコピーしました