• 作成:

Threadripper 1950XとGTX 1080 Tiで新しいPCを組みました, 詰まったところなどメモ

買い物メモ.

Ryzen Threadripper 1950X, GTX 1080 TiなどのPCパーツを購入して30万円ほど貯金を吹き飛ばしました - ncaq

  • CPU: Intel Core i5-3570 4-Core capacity: 3800MHz
  • CPUクーラー: Intelの付属品
  • マザーボード: Gigabyte H77-DS3H
  • メモリ: DIMM DDR3 Synchronous 1600 MHz 4GiB の2枚で8GiB
  • SSD: Intel SSDSC2CW12(111GiBでLinuxに回していたのは34GiB)
  • GPU: GTX-480 リファレンスモデル

HDD, 電源, ケースなどは前のものを流用しました.

新しいパーツ群

詰まったところをメモしたりします.

Threadripper 1950Xが手に入らない

どこも入荷待ちの状態になっていて, とりあえずソフマップ・ドットコムに注文してみたのですが, 1週間後に問い合わせてみたら入荷するのは来年になるかもしれないと言われました.

キャンセルしても良いということだったので, ソフマップの実店舗に在庫がないか聞いてみたら, ソフマップ大宮店に在庫があると言われました.

そこでソフマップ・ドットコムの価格になりませんか? と聞いてみたところ, なるようだったので, そこで購入しました. ソフマップ・ドットコムの価格はほぼ最安値に近かったので.

その後ソフマップ・ドットコムへの注文はキャンセルしました.

ポイントが付くと思っていたのですが, 後でこの買い方だと付かないことが判明しました. 特価商品だったからですかね.

後Threadripperのスリッパが未だに残っていたようで貰うことが可能でした. 私はいらないので, これは友人に譲る予定です.

Z9 U3から前のマザーボードが取り外せない

PCケースは先程述べた通り, 前に組んだ時に買ったZ9 U3を流用したのですが, 着けたマザーボードのネジが1つ外れなくて困りました.

抜く方に回しても, 一定緩めたら「バキッ」という音が鳴って, 元に戻らなくて, ネジが外せませんでした.

調べてみたところ, 価格.com - 『マザーボードのねじがスペーサーから取れなくなりました。』 ZALMAN Z9 U3 のクチコミ掲示板と同じ症状だったようなので, ここのアドバイスに従うことにしました.

まずネジを一度締め直します. 反対側からペンチでネジを掴みます. ネジを緩めます.

この手順でネジを抜くことが出来ました.

Windows 10のインストールディスクがUSBメモリに作れない

前のマザーボードとCPUは使う予定はなく, もし使うとしてもLinuxでサーバー用途に使うぐらいでゲームには使わないので, Windowsのライセンスは新しいPCに移行させようとしました. インストール済みのWindows OSのプロダクトキーを調べる:Tech TIPS - @IT でプロダクトキーを控えて, Microsoft公式のメディア作成ツールでUSBストレージ上にインストールメディアを作成しようとしました. しかし, エラーにより作成できませんでした. デスクトップPCの環境が悪いのかと思ってラップトップPC上のWindowsでも試しましたが, 同じく失敗しました. Linuxでddを使ってISOファイルをUSBメモリに書き写してみましたが, UEFIは認識すらしませんでした. USBメモリが壊れているのかと思って他のを試そうとしてみましたが, ISOファイルの容量に耐えうるUSBメモリはこのトランセンドの1つしか存在しませんでした.

仕方がないのでISOファイルをDVDに書き込んだらあっさりインストールメディアが作れました. 未だに光学メディアに頼る必要があるとは…

なお, Windows 10 Fall Creators Updateではインストール後に, 「トラブルシューティング→このデバイス上のハードウェアを最近変更しました」で前のデバイスからプロダクトキーを移せます. 多分プロダクトキーを控える必要はありません.

Threadripperのネジが締まらない

MSIの取り付け動画を見てThreadripperの取り付けは完璧. と思ったのですが, 取り付けた後2番3番のネジがどうやっても締まらなくて焦りました. しかし, カバーを手で押さえつけたら締めることが出来ました.

クーラーのネジがTR4と一致しない

H80i V2に付いているネジやブラケットに, AMDとかAM4とか書いているので惑わされました. これは罠で, 使いません. 説明書も一致しません.

Threadripperに付属してあるブラケットがあるので, それだけで設置できます.

Threadripperにブラケットが付属してあることを, パーツの山に埋もれてすっかり忘れてしまいました.

Threadripper CPU and Cooler Installation が参考になることでしょう.

これらはみんな使わない

クーラーがケースの中に入らない

Z9 U3は所詮ATXまでの対応でそこまで大きなケースではないので, クーラーが入らなくて焦りました.

しかし, 割と線が曲がることと, 上部天板のクーラーが引っかかっていることに気がついたので, 天板のクーラーを取り外してねじ込みました.

Z9 U3にもH80i V2はぎりぎり入る

しかしギリギリでかなりきついことは変わらないので, 出来ればもっと大きいケースに買い替えたいですね.

CPUケーブルが1つ足りない

電源はとりあえずRA-750で引き続き行くことにしたのですが, これはEPS 12Vケーブルが1つしかなく, ThreadripperのEPS 12Vを2つ要求するというスペックに満たないことがわかりました.

なのでビックカメラ新宿店でペリフェラルコネクタ2つをEPS 12Vケーブルに変換するコネクタを買ってきたのですが, これ違うケーブルから電源を引けと書いているんですね.

RA-750にはペリフェラルコネクタのあるケーブルが1つしかない…

とりあえず繋いだら動きました.

変換ケーブル

GPUに負荷をかけると強制終了する(未解決)

MSI AfterburnerのKombustor Benchmarkingをかけたらシステムが強制終了することに気がつきました. やはり変換ケーブルを買う必要があるような電源だと容量が足りませんでしたかね…

このベンチマークの時だけ強制終了するなら問題ないのですが, 実際ゲームを行うときなどに強制終了したら電源を買い換えようと思います.

Power Supply Calculator - PSU Calculator | OuterVisionで計算してみたら, 足りてるし推奨もされてるみたいなのですが…

電源計算結果

買うとしたらCorsair RM1000x CP-9020094-JPあたりでしょうか. 1000Wあってピークが70%の消費で済んで安心ですし, Corsairはそこそこ名の知れたメーカーですし.

Windows 10をDvorak設定にできない

これは新しいPC関係ないんですが. Cortanaが導入されたあたりのWindows 10の新しいバージョンから一部の入力欄でDvorakに出来ない問題が発生していました. 以前はレジストリをDvorakにして日本語入力を使うという技法が使えたのですが, これだと一部の入力欄だと有効になりません.

当時 Windows 10 - Win10 1607でDvorakにするレジストリがストアアプリに効かない(44008)|teratail を見て, 他にも同じ症状で苦しんでいる人が居るんだなと思ったのですが, 2016/09/04の質問者自身の回答で解決していました. すごい.

WindowsがデフォルトインストールだとMBRでインストールする

Windowsをインストールしてある程度セットアップが終わってGentoo/Linuxをインストールしようとして気がついたのですが, デフォルトインストールでMBRでインストールが行われていたようです. 変換もうまいことパーティション分けがいかなかったので, 再インストールすることになりました.

なぜMBRでインストールされたのでしょう? 出荷前にNVMe SSDがMBRでフォーマットされてたりしたのでしょうか? なんにせよ, Windowsにインストール作業を任せずに手動でやるべきでしたね.

SystemRescueCDがbcacheを読みこまない

私はインストールをSystemRescueCd - System Rescue Cd Homepageで行っているのですが, 今回bcacheを有効にしてインストールするにあたって, bcache-toolsが入ってなくて困りました. emerge --syncからpackage.keywordsを編集してemerge bcache-toolsをすることによってインストールは出来ました.

bcacheのセットアップはBcache - ArchWikiに従いました.

そのあとbcacheで作業をして, 深夜に及びあまりにも眠くなったので, 一回インストール作業を中断して, 次の日に再起動をしました. そうするとbcacheのデバイスが読み込まれません.

ディスク一覧に出てきませんし, /sys/fs以下にbcacheディレクトリも存在しません. もう一度bcache-toolsをインストールし直して, bcache-statusを実行しても, bcache is not loadedと言われます. bcache-supor-showを実行するとデバイスの設定は正常に出力されるので, デバイスの方は正しいのだと思われます.

多分bcacheのモジュールがカーネル外部モジュールとなっていて, それが読み込まれていないんですね.

bcacheのモジュールを読み込むにはどうするか… ってモジュールを読み込むのだからmodprobeすれば良いですね, 簡単でした.

と思ってmodprobe bcacheしてみたのですが, デバイス一覧にbcacheは現れず.bcache-statusはエラーも何も出力しないようになりました. udevルールで再起動時は自動で読み込まれるんじゃなかったんですかーやだー.

トラブルシューティングに従って/sys/fs/bcache/registerにキャッシュデバイスとバッキングデバイスを書き込んだところ正常に読み込まれました. 良かった.

emergeによるビルドが多くのスレッドで行われない

Gentooをインストールするときの最初のemerge -uDN worldで気がついたのですが, MAKEOPTS='-j32'していてもせいぜい実行されるスレッド数は多くて10ぐらいで, せっかくのスレッド数が活かせていませんでした. モジュールの依存関係の問題でそんなに並列化出来ないのかな, これならRyzen 7で十分だったか… と後悔のツイートをしていたら, こんなご指摘がありました.

--jobsオプション全く知りませんでした. これが私が欲しかったものです. 割と昔からあったんですね…

emergeの日本語manページには書いていませんでした. 私は日本語manページは隅々まで読んだのですが, 英語版はあまり読んでなかったので, 知らなかったんですね.

あと, llvmのビルドに入ったら普通に32スレッド使ったので, 対象次第で普通にスレッドはたくさん使うようでした.

gccのビルドがだいたい10スレッドぐらいしか回らないのに比べてllvmは32スレッド常に回るので, そういう所にllvmの先進性を感じます.

systemd-233-r6のビルドに失敗する

何故かsystemdのビルドに失敗します.

先にLinuxカーネルをビルドしないとダメなのかなと思ってビルドしてみたのですがダメ.

portageのワーキングディレクトリに行ってビルドしてみるとxlocale.hが見つからないとエラーになるので, xlocale.hを持ってるらしきx11-libs/wxGTKを入れようと試みてみる. しかしそれにはまずemerge -uDN worldが必要のようで堂々巡り.

とりあえずUSEフラグを全無効にした上でwxGTKを2スロット入れてみたのですがコンパイルエラーのまま. 薄々気がついていましたがやはり関係ないようですね.

なんでだろうなあ, ラップトップの既存環境ではビルド成功するのになあと思ってリビルドかけてみたら成功しませんでした. 同じくxlocale.hが存在しないというエラーで終了します.

調べてみたら似たようなエラーで困っている人が存在するみたいですね. Gentoo Forums :: View topic - >=glibc-2.26 related patches 4 stable amd64 pkg

Portage File Listで調べてみたところ, glibcがxlocale.hを持っていて, どうも最近の更新で消滅したようです.

新しいバージョンのglibcでエラーが出るということは, 新しいsystemdならビルドできるんじゃないかなと思ってsys-apps/systemd-236-r1をビルドしてみたらビルド出来ました. 不安定版のglibcには, 不安定版のsystemdを使えということですね.

bcacheを使いました

前のPCのSSDは120GBしかなく, しかもWindowsに多くのディスクを食われていたため, Linuxに割り当てられていたのは実質40GBぐらいでした. なので, 本来SSDにマウントしているホームディレクトリなどにたくさんのシンボリックリンクが貼られて, 実質HDD上で作業をしていました.

これは繰り返したくないなと思ったので, 200GBのNVMe SSDをbcacheのキャッシュに使って, HDDは2Tパーティションを確保してバッキングデバイスに指定しました.

200GBもあるのならbcacheを使わなくてもSSDにインストールして一部の動画だけをHDDに置けば良いのでは? という考えも少しよぎりました. しかし, 何をダウンロードしたりインストールしても容量の事を考えなくて済むというのは大きな利点です. ブロックチェーンもシンボリックリンクとか貼らずに適当にやれる.

セットアップはBcache - ArchWikiを見てやっていきました. bootパーティションには別のパーティションを200MB用意してそちらでブートするようにしています.

パーティーションは以下のような感じになりました.

  • NVMe
    • 1: 500M: Windows回復パーティション
    • 2: 100M: EFI パーティション
    • 3: 16M: Windowsによる予約(謎)
    • 4: 683G: Windows用メインパーティション
    • 5: 270G: bcacheキャッシュパーティション
  • HDD
    • 1: 200M: ブートパーティション(Ext4)
    • 2: 2T: bcacheバッキングパーティション
    • 3: 746G: Windows向けデータパーティションswap

Windowsにもbcacheのような機構があれば良いんですけどね.

そしたらNVMe SSDはキャッシュ専用になってSSDもHDDもほぼ2分割できて, シンボリックリンクだとかドライブだとかのことを考えずにスッキリします.

Intel SRTがそれに値しそうですが, AMDなので使えません.(使えないよね?)

Windows自体にbcacheのような機構があれば, Intel Optane MemoryのようなものをWindowsでもLinuxでもキャッシュに使って, こんなに大容量のSSDを買う必要は無かったんですが.

純粋なCLI環境でUUIDをコピーするのが面倒くさい

bcache-super-show|grep cset.uuidのUUIDをコピーするのが面倒くさかったです. パイプで流し込めばいいでしょという指摘を受けて, そりゃそうだとcutで出力しようとしましたがうまくいきませんでした. タブではなく空白で区切られていたからでしょうね. awk '{print $2}'で解決しました.

awkとかperl5とかちゃんと覚えたいんですが, こういう時に少し使って忘却してしまいます.

ファイルシステムにはBtrfsを選びました

Ext4の方がシンプルでBtrfsと同等レベルに速いのにBtrfsを選ぶ必要はない. と思っていましたが, 最近透過圧縮が欲しくなってきました. 透過圧縮に劇的な圧縮効果は求めていませんが, 0fillされた大容量のファイルを作ることが最近多いので, それらを圧縮してもらうことを求めています. 最近zstdという速度も圧縮効率もイカした圧縮方式をサポートしたので, それにも心惹かれました.

grub-installでCould not delete variable: Read-only file systemというエラーが出る

Installing for x86_64-efi platform.
Could not delete variable: Read-only file system
efibootmgr: ** Warning ** : Boot0002 has same label gentoo
Could not prepare Boot variable: Read-only file system
Installation finished. No error repored.

失敗してるのにno error reported.はおかしいんじゃないですかね. 一応ブートの順序には失敗してますがEFIブートの1つとしては追加できたようなので成功扱いになるのでしょうか.

chroot環境でmount -o remount,rw /sys/firmware/efi/efivarsすることでgrub-installのエラーは出なくなるんですが, efibootmgrで確認するとWindowsが優先されたままなんですよね.

この問題は一度起動してからefibootmgr -o 0002を直接実行することで解決したように見えたのですが, それは錯覚でした.

UEFI の実装によっては efibootmgr を使用して NVRAM を編集できないことがあります。efibootmgr でエントリを作成できない場合、UEFI Shell v2 の bcfg コマンドを使用する方法があります。

EFISTUB - ArchWiki

どうやらこの事案のようです.

ただ, 別にUEFI シェルを使わなくても, UEFIのGUIから設定→ブートでブート順を変更することが出来ました.

普通にOSからいじれるようになっていてほしいですが…

bcacheのルートパーティションのmountが失敗して起動しない

一通り作業を行ってさあブートだと再起動したらmountあたりでコケてるのかカーネル起動画面でtraceが出て起動しませんでした.

Archにはmkinitcpioというツールがあってセットアップを自動化してくれるので, Gentooで必要な作業を行っていないのかと思いました.

NVMe - Gentoo Wiki とか見てみたら, NVMe SSDを動かすのに必要っぽいOpen-Channel SSD target supportを有効にしていなかったようですね. これを有効にして再起動, はい変わらずエラー.

必要なconfigが有効にされてないのかなと思ってlocalyesconfigをかけてみましたが, そうするとトレースすら表示されずにカーネルがLoadingされている状態で止まりました.

UUIDが良くないのか? マウントオプションが良くないのか? と思って色々削除してみましたがやはり変わらず.

他に検索してみると

Root partition on bcache

In order to have the root partition under bcache you may have to add (e.g.) rootdelay=3 as a boot parameter to allow for the udev rules to run before the system attempts to mount the root filesystem.

ルートパーティションをbcacheの下に置くには、システムがルートファイルシステムをマウントしようとする前にudevルールを実行できるように、ブートパラメータとしてrootdelay = 3を追加する必要があります。

bcache

という記述を書いているページが. grubの設定変更で試してみましょう.

ここに書かれている通りrootdelay=3を指定しても起動しません. delayが足りないのかなと思ってrootderay=90を指定しても同じく起動しません.

他のbcacheのセットアップチュートリアルを見ると, みんなmake-bcacheの時にキャッシュデバイスとバッキングデバイスを両方指定しているので, 一つ一つ指定してattachで結びつけたやり方がダメだったのかなと思いました. しかしそのままmake-bcacheコマンドを叩いても, Device or resource busyと言われるだけなので, 一度キャッシュデバイスを取り外してみることにしました.

echo 1 > /sys/block/sda/sda2/bcache/detachを実行してキャッシュデバイスの登録を解除. もう一度make-bcache -B /dev/sda2 -C /dev/nvme0n1p5を実行してもやはり`Device or resource busy**.

停止, 登録解除, 除去, 開放の手順を取ったらbcacheの動作が止まったようなので, もう一度実行してみます.

既に登録されていると言われてbcache0は出現しますが, nvme0n1p5以下にbcache0は現れないんですよね.

もしかしたらこっちが正常な動作で, これまで設定したbcacheの設定が間違っているのかと思ってこれでブートしてみましたがやはりダメですね, mountで失敗しているようです.

いくつかの説明を見るとinitramfsという単語がたくさん出てきて, Gentooのハンドブックによると,

いくつかの特別なケースでinitramfs(起動時のRAMベースのファイルシステム)のビルドが必要になります。最もよくある理由は、重要なディレクトリ(/usr/、/var/等)が別パーティションにある場合です。initramfsがあれば、initramfsの中にあるツールを使うことで、これらのパーティションをマウントすることができます。

任意自由選択: initramfsのビルド

だそうです.

多分これが必要なんでしょう. genkernelはあまり使いたくありませんでしたが, 使わざるを得ないようですね.

genkernel --install initramfsを使うことでashが起動するという変化がありました. 起動しないのは変わらないままです.

しかしashが動いたので, /sys/fs/bcache/registerに書き込んで/newrootのfstabを記述することで起動することに成功しました. やったあ, 普通に起動させてくれ.

genkernelの設定をざっと見たのですが, bcacheの設定は無いようですね.

どうもInitramfs/Guide - Gentoo Wikiに載っているdracutというものはbcacheの設定があるようですので使ってみます.

dracutをインストールして実行してみたら, 設定レスでbcacheが必要であることを見抜き, bcacheモジュールを認識してbcache有効のinitramfsを作ってくれました.

dracut最高! みんなもブートできない時はとりあえずdracutを使いましょう!

インストールした後にBtrfsの再圧縮をかける

このインストール当時はSystemRescueCDのLinuxカーネルバージョンが4.9.60だったため, 4.14から追加されたBtrfsのzstd圧縮機能は有効にしてmount出来ませんでした. でも大丈夫, Btrfsは後から圧縮をかけ直すことができます. btrfs filesystem defragment -r -v -czstd /でかけ直しました.

dev-libs/mpc-1.0.3のビルドに失敗する

gccがビルドに失敗していて, それがmpcのビルドをやり直していないことに関わっているようなので, dev-libs/mpcをビルドし直してみようとしたら失敗しました.

ラップトップ上では同じバージョンのmpcのビルドに成功するので謎です.

どうも repo/gentoo.git - Official Gentoo ebuild repository (formerly known as gentoo-x86 in CVS) を見るに, ついちょっと前に加えられた変更が関係しているようです. (これを書いているのは2017-12-27T2:19:00+0900, コミットされたのは2017-12-27T01:39:56+0900)

つい最近の問題なら放って置いてもすぐ治るだろうと思ってdev-libs/mpc-1.0.2-r1をインストールしておいてしまおうと思ったのですが, それのビルドも失敗します. ええ…

フォーラム 642300 – dev-libs/mpc-1.0.3 fails to build against dev-libs/mpfr-4.0.0 を見るに, この問題はmpfr-4.0.0において引き起こされるようですね. ならば治るまでしばらく安定版のmpfr-3.1.6を使えば解決ですね.

GTX 1080 TiがBad TLPというエラーを頻繁に出す

GTX 1080やGTX 1070でも同じエラーが出るらしいですね. 回答によるとpci=nommconfをカーネルパラメータに指定すれば問題ないらしいです. しかしgrubで素起動しているならともかく, dracutを使っている場合はどう指定するんだろう… と思いましたが, よく考えたらgrubはgrubで動いているわけで, 普通にgrubで指定すれば良いですね. dracutもカーネル設定を読み込んでくれるでしょう.

grubへの指定でうまく行きました.

swapファイルでlosetupを自動化する方法がわからないのでパーティションを使う

swapパーティションを使うかswapファイルを使うかで迷いましたが, swapもbcacheの対象にしたほうがうまく回りそうだったので, swapファイルを使うことにしました.

Btrfsは直接swapファイルをサポートしていないので, loopbackデバイスをエミュレートする形でswapファイルを作ることになります.

パフォーマンスは低下しますが基本的にスワップは使わずにtmpfs上でのビルドファイルが溢れた時のみ使うような形のため問題ありません.

sudo fallocate -l 100g /swapfile
sudo losetup /dev/loop0 /swapfile
sudo swapon /dev/loop0

でswapが有効になります.

ちょっとまってfstabでの設定じゃないから自動的に有効にならないじゃないですか.

losetupをfstabから設定する方法がわからない. fstabに感覚で書いてみて再起動してみたのですがsystemdのサービスが途中で止まってしまいます.

swaponはともかく, losetupをfstab上で自動実行する方法がわかりませんでした. systemdのサービスとしてスクリプトを書くという手段もありましたが, もうわからないのでひとまず使う予定のないWindows向けに確保していたパーティションをまるごとswapにしてしまうことにしました.

746Gものの広大なswap空間が誕生してしまいました.

HDDに直接アクセスするためbcacheが効きませんが, bcacheによって普通の読み書きはSSDを介して, swapはHDDを読み書きして丁度よいのではないでしょうか. 元々このBtrfs用のワークアラウンドは効率があまり良くありませんしね. これで良いのかもしれません.

Windowsが容量足りないとか言ってきたらSwapパーティションを縮小することにしましょう.

Linux環境でPrecision Boostが動いていないように見えて負荷をかけても周波数が3.4GHzより上昇しない

ThreadripperはPrecision Boost機能によって4GHzまで周波数が上昇すると書いてあるのですが, 実際こちらの環境で負荷をかけても周波数が3.4GHzより上昇しません. Precision Boost機能がデフォルトでは無効になっているのでしょうか? Game Boostのつまみを回して手動でオーバークロックする方法を使えば明示的にオーバークロックが出来るわけですが, それはやりたくありません. Game Boostを無効にして負荷に応じた自動周波数変更機能を有効にしたいのですが… 要するにPrecision Boost機能を有効にしたい. BIOSの設定を見渡しても, それ関連の設定は無いようでした.

Ryzen Masterからしか変更できなかったりするのでしょうか? と思ってWindowsからRyzen Masterを起動して, 一度Ryzen Masterの「Reset」ボタンを押して再起動したあと, Ryzen Masterを「Creator Mode」に設定して「Apply」を押して再起動してみたら, 3.4Ghz以上に周波数が変化しました. Windows上では. Linux上では依然3.4GHzが上限になってしまいます.

Linuxカーネルの設定が悪いのか? と思って調べてみます.

experimentalのUSEフラグを有効にして, Processor familyをAMD Zenに設定してみます. nvidia-driversが動かなくなりました. 再ビルドしたら動きました.

私が欲しいのはCPUによる自動ブーストなんですよねえと思いつつも, Game Boostを試しに有効にしてみたのですが, 最大のスイッチ11にセットしてカーネルビルドを動かしてみたらシステムが途中で止まりました. 電源ユニットの性能が足りてないってことなんでしょうね. それとも冷却?

スイッチ10の4GHzなら動くか? と思って動かしましたがダメです止まります. スイッチ8の3.95GHzなら動くか? と思って動かしますがやはり止まります. 私の環境で動くのはスイッチ6の3.9Ghzが限度のようですね. これ以上の性能を求めるなら電源容量1000Wぐらい用意しろということでしょう.

なんとなくオーバークロックの限度を探索してしまいましたが, オーバークロックはしないようにします. 電源も冷却ユニットも貧弱なのになんでやろうと思ったのでしょう.

AMD's Ryzen Threadripper 1950X, Threadripper 1920X, and Threadripper 1900X CPUs revealed - The Tech Report - Page 1によるとブーストできるのは4コアだけというように見えますね. それなら全てのコアに負荷をかけると3.4GHzで固定されてたのも納得がいきます.

何か私は勘違いしていたようですね, 全てのコアが4GHzで動くと思っていましたが, そんな事実はない. Precision BoostはIntelで言うTurbo Boostのようなものでなので, マルチスレッドでブーストはされない. 素で勘違いしていたようで結構恥ずかしいです.

LinuxでPrecision Boostが動いていないように見えるのはなんででしょう? Ryzen Masterもメモリアクセス方式を自由に弄れなかったりよくわからない. Windowsだと一部のコアのクロックが3.4Ghzを超えるので, 電圧が足りないということはないと思うのですが. 単に1つのコアにだけ負荷をかけていないだけ?

Linuxカーネルのビルド

Intel(R) Core(TM) i5-3570 CPU @ 3.40GHzによるlinux-4.14.6-gentooのビルド時間はsudo make -j5 1052.38s user 63.36s system 385% cpu 4:49.66 totalでした. zshのtimeの見方が今ひとつよくわからな無いのですが, 5分弱ということですね.

Threadripper 1950Xによるlinux-4.14.8-gentoo-r1のビルド時間はsudo make -j32 1746.47s user 194.00s system 2699% cpu 1.11.89で, 1分強でした. カーネルのconfigが異なるどころか, バージョンすら異なるので単純に比較は出来ませんが, おおよそ5分の1ということですね.

カーネルのソースをtmpfsに置くとか, メモリをグレードアップするとか, bcacheを使わずにSSDを直接使うとか, 他のプログラムを動かさないようにするなどの工夫を行えば, 1分は余裕で切れそうですね. そもそもCPUをちゃんと使い切っていないので, そこに改善余地が大いにありそうです. 真面目に計測する気は全くありません, そういうのはベンチマークサイトに任せます.

真面目な調査をする気がないとは言っても流石に雑すぎるだろと思ったのでカーネルのソースをtmpfsに置いて計測しました. sudo make -j32 1413.01s user 154.60s system 2597% cpu 1:00.35 total だそうです. メモリのクロックが高ければ1分は切れるでしょうね.

感想

普通のマルチスレッドビルドでは32スレッドも使わないという問題があります. emergeをマルチジョブで回しても依存関係からそんなにマルチスレッドにならないという問題もあります.

現実的に考えると, 私程度の資金力の人はRyzen 7 1800Xを買ったほうが良いと思います. Ryzen 7でも16スレッドあって十分マルチスレッド性能があります. マザーボードも普通のRyzen 7の方が安いですし, 消費電力も少ないです.

普段頻繁にllvmなどをビルドする人のように, 最高峰のマルチスレッド性能を求めたいという人は別でしょうけど.

お金が余っている人なら何も問題ないんでしょうし, 豪華な周辺機器でThreadripperのIOポートの多さを活かせるのでしょう. しかし, 私のようにメインメモリやSSDをケチってお金を節約しているのにThreadripperを買うのは賢い行いではないでしょう. Ryzen 7 1800Xを購入して浮いたお金をメモリやディスプレイにつぎ込んだほうが良かったかもしれません. 完全にThreadripperというモンスターCPUを持て余しています. メモリや電源などの周辺機器が足りてないので窮屈感がありますね.

うまく並列処理ができる依存関係が出来たときに, 並列ビルドを回しているとわかるのですが, 16GBではメモリが全然足りていません. swapをガンガン消費して, せっかくの32スレッドなのに他のプロセスがプチフリーズしてしまってもったいない. CPU方面のボトルネックを無くしてみて気がついたことは, メモリが足りないということでした. 私のようなそんなにお金持ってない人が無理して買うのではなく, メモリを十分用意できる人が買えば, Threadripperのマルチスレッド性能をちゃんと活かせるのでしょう.

ええっと, これから頑張って稼いでいって, 色々買い足して, Threadripperを選んでいて良かったと言えるようになろうと思います.

これから自作する人はRyzenの2世代目が, 2018年2月頃に発表されるという噂があるので, それを待ったほうが良いかもしれません.