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-generic
Code 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 lowlatency
Code language: Bash (bash)

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

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

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

$ sudo reboot
Code language: Bash (bash)

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

1. Msr-tools

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

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

Msrを実行します。

$ sudo modprobe msr
Code language: Bash (bash)

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

$ sudo nano /etc/modules-load.d/modules.conf
Code 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. msr
Code language: plaintext (plaintext)

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

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

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

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

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

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

$ sudo nano /etc/systemd/system/disable-c6.service
Code 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.service
Code language: Bash (bash)

3. Grub設定

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

$ sudo nano /etc/default/grub
Code 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-grub
Code language: Bash (bash)

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

$ sudo reboot
Code 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-cli
Code language: Bash (bash)

2. Grub設定

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

$ sudo nano /etc/default/grub
Code 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-grub
Code language: Bash (bash)

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

$ sudo reboot
Code 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をコピーしました