RyzenマシンにCentOS7を入れた話

Ryzen 7 1800XでCentOS7が一応動かせたのでメモがてら書いておきます。

  • H/W環境
    • CPU Ryzen 7 1800X
    • MEM Crucial W4U2400CM-8G(DDR4-2400 8GB x 2) CLはMBのAUTO。確か17-17-17とか。
    • MB ASRock FATALITY X370 GAMING K4
    • SSD Crucial CT275MX300SSD1
    • HDD Western Digital WD30EZRZ-RT/T
    • HLDS GH24NSD1.AXJU1LB (DVD/CD-R drive)
    • GPU ELSA GD1050-2GERS
  • OS
    • CentOS 7.3(インストール後にELRepoから4.10 Kernelにアップデート。理由は後述)

UEFI環境にLinuxを入れるのにあまり慣れていないのと、ASRockのマザーボードの使用経験が少なく(大体ASUSだった)のでそもそもCentOS7のインストールイメージを焼いたCD-Rから起動するのに若干手間取ったりしました。CSM(Compatibility Supported Module)とかFastBootとか意識する必要のある場面にこれまで遭遇していなかったため。。。

CentOS7のNetinstallからOSのインストールを行いました。Ryzenが出たての頃に海外サイトでLinuxRyzen環境で動かしてる情報を漁ってた頃はインストールでこけるように見えたのですが、インストール自体は何事もなく完了しました。

しかし、インストール直後のKernelのオプションで起動しようとすると以下のフォーラムのメッセージで起動処理が止まる状態となりました。
conflicting fb hw usage nouveaufb vs EFI VGA - removing generic driver

回答にある通り、 nomodeset を付けることでとりあえず起動する、ログイン可能な状態まで進めたのでELRepoをリポジトリに追加し、更新を行なっています。
そもそもの情報として以下サイトを見ていました。
STOP CONSTANT CENTOS 7.3 CRASHES WITH AMD RYZEN USING KERNEL 4.10

なお、上記を解消後にネットワーク設定を行い、さっさとKernel 4.10に上げましたが、これを書くために 3.10.0-514.10.2.el7.x86_64 で起動したらコンソールでは操作が出来ませんでしたが、リモートからsshで繋ぐ事が可能な状態でした。インストール直後の3.10.0-514.el7.x86_64とは挙動が違いましたので、このバージョン間での更新で多少良くなったのかもしれません。
3.10.0-514.10.2.el7.x86_64 であっても nomodeset を付ければコンソール操作は行える状態となりました。

初期状態の起動オプションは以下のようになっていました(UUIDは長いので{UUID}に省略)。

linuxefi /boot/vmlinuz-3.10.0-514.el7.x86_64 root=UUID={UUID} ro crashkernel=auto rhgb quiet LANG=en_US.UTF-8

ですので、起動時のgrubの画面でeで編集画面に入り、

linuxefi /boot/vmlinuz-3.10.0-514.el7.x86_64 root=UUID={UUID} ro crashkernel=auto rhgb quiet LANG=en_US.UTF-8 nomodeset

と編集して起動しています。rhgb quietがあると「conflicting fb〜」な画面が見れないので安定して操作が行えるようになるまではrhgb quietは消した方が良いかと思います。

Ryzenはメモリとか、まぁ相性やら性能やら癖があるようですので、同じ環境でもCentOS7が動くかは分かりませんが、上記のH/W環境ではとりあえず動かす事が出来ています。

MySQL 5.7.17(5.7.18出ちゃったけど。。。)にてsysbench 0.5のoltp.luaを使用し、point-selectのみのベンチマークを取った結果は1回のみの実行ですが以下のようになりました。cpupowerをperformanceにしてますが、UEFIにてCool'n'Quietは無効にしていません。この辺も差が出るのが今後試したいところ。

LD_PRELOAD=/usr/lib64/libjemalloc.so.1 \
      sysbench \
        --test=/path/to/lua/oltp.lua \
        --rand-init=on \
        --db-driver=mysql \
        --rand-type=uniform \
        --oltp-table-size=3000000 --oltp-tables-count=8 \
        --oltp_point_selects=1000 --oltp_sum_ranges=0 --oltp_simple_ranges=0 \
        --oltp_order_ranges=0 --oltp_distinct_ranges=0 \
        --oltp-read-only=on \
        --mysql-socket=/var/lib/mysql/mysql.sock \
        --mysql-db=sbtest5 \
        --mysql-user=sbtest --mysql-password=sbtest-pw \
        --max-time=90 --max-requests=0 \
        --num-threads=$thread \
        run 
スレッド数 qps
8 138244
16 205629
32 204006
64 201601
128 206409
256 206206
512 206378
1024 206656
2048 206306
4096 208140

搭載メモリの都合上、データ量に差があるのですが(今回は大体5.6GB)、Xeon E5-2630 x 2(2.3GHz, 2P12C24T)の環境よりはスコアが出ています。また、最近はNUMA環境(2CPU)でばかりベンチを取っていて、その場合は2048スレッドあたりから性能低下する傾向があったのですが、1CPUということもあるのか論理CPUコア数の16と同じスレッド数からは性能が安定するという違いが見られました。

なお、Ryzen環境でCentOS動いたー、というところでとりあえずベンチマークを流したのでモニタリングは一切していません。モニタリング設定をして、後日改めてベンチマーク取りたいと考えていますが、どうなるかは分かりません。

その他のMB(多分主に)でも同じようにしてCentOSが動くかは分かりませんが、Ryzen環境でLinuxを試したい場合はKernel4.10以上が良いように海外サイト見てると見受けられるのでそれを目安に導入を試してみると良いんじゃないかと思います。

なお、gistにcpupowerがデフォの状態(周波数が2.2GHzになってる)ですがcpuinfoとかの結果を載せてありますので興味のある方はご参照ください(Ryzen 7 1800X cpuinfo)