コンテンツへスキップ

AMDとLinuxの相性が悪い問題

AMDのRyzenはIntelのCoreシリーズに比べてコスパが滅茶苦茶よいですが、未だにLinuxとの相性は悪いです。。。(2021年2月現在)
自分は以下の設定をすることで問題なく動くようになりました。

BIOSのアップデート

  1. マザーボードの公式サイトから最新のBIOS firmwareをダウンロードしてUSBに入れる。
    例:AsusのPN50はPN50のサイトに行けばBIOS firmwareをダウンロードできます。
  1. USBをパソコンに刺して再起動し、BIOS設定画面を開く。
  1. BIOS設定画面からEzFlashなど(マザボによる)の機能を使ってBIOSをアップデートする。

AMDGPUのfirmwareを入手する

  1. AMDGPUのfirmwareが入っているリポジトリをクローンする。
cd ~

git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/firmware/linux-firmware.git
  1. AMDGPUのfirmwareをコピーしてカーネルに適応する。
sudo cp ~/linux-firmware/amdgpu/* /lib/firmware/amdgpu

sudo update-initramfs -k all -u -v

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

  1. Msr-toolsをインストールする。
sudo apt install msr-tools
  1. Msrを実行する。
sudo modprobe msr
  1. サーバーの起動時にmsrが実行されるようにするため、設定ファイルにmsrと追記する。
sudo nano /etc/modules-load.d/modules.conf
  1. C6ステートを無効化するスクリプトをダウンロードする。
cd ~

git clone https://github.com/r4m0n/ZenStates-Linux.git
  1. 入手したスクリプトをbinディレクトリにコピーする。
sudo cp ~/ZenStates-Linux/zenstates.py /usr/local/bin/zenstates.py
  1. サーバーの起動時にスクリプトが実行されるための設定ファイルを作成する。
sudo nano /etc/systemd/system/disable-c6.service
  1. 設定ファイルに以下を入力し、保存する。
[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
  1. サーバーの起動時にスクリプトが実行されるようにする。
sudo systemctl enable disable-c6.service
  1. Grub(OS起動時に実行されるプログラム)の設定ファイルを開く。
sudo nano /etc/default/grub
  1. C6ステートを無効化するパラメータをGRUB_CMDLINE_LINUX_DEFAULTに追記し、保存する。
GRUB_CMDLINE_LINUX_DEFAULT="processor.max_cstate=1 intel_idle.max_cstate=0"
  1. Grubを更新する。
sudo update-grub
  1. サーバーを再起動し、C6ステートが無効化されていることを確認する。(「C6 State – Package」と「C6 State – Core」がDisabledになっていればOK)
sudo reboot

cd ~/ZenStates-Linux

sudo python3 zenstates.py -l

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

  1. NVME-cliをインストールする。
sudo apt install nvme-cli
  1. Grub(OS起動時に実行されるプログラム)の設定ファイルを開く。
sudo nano /etc/default/grub
  1. APSTを無効化するパラメータをGRUB_CMDLINE_LINUX_DEFAULTに追記し、保存する。
GRUB_CMDLINE_LINUX_DEFAULT="nvme_core.default_ps_max_latency_us=0"
  1. Grubを更新する。
sudo update-grub
  1. サーバーを再起動し、パラメータが反映されているか確認する。
sudo reboot

cat /proc/cmdline

Kernelのアップグレード

※Kernelをアップグレードすることによってさらにエラーが出る場合があるので、ここら辺に詳しくなければアップグレードするのは避けてください。

  1. 現在のKernelのバージョンを確認する。
uname -r
  1. インストール可能なKernelのバージョンを確認する。
sudo apt-cache search linux-image-5.4
  1. 任意のバージョンのKernelをインストールする。
sudo apt install linux-image-5.8.0-44-generic
  1. インストールが完了したらサーバーを再起動する。
sudo reboot
タグ: