Ryzen 5000シリーズのオーバークロックについて

# はじめに
Ryzen 5000シリーズのCPUはデフォルト状態で動かすのが余りにも惜しいCPUでした。
オーバークロックして本来の性能を引き出しましょう。

# 【注意】サーマルスロットリングについて
温度が上昇した場合にクロック数を落として温度上昇を和らげる保護機能です。
目安として70℃を超えたあたりから3~4℃上昇する毎にブーストクロックが25MHzずつ落ちていきます。
より高性能なCPUクーラーを用意する事で高クロックを維持することが可能になります。
リテールファンは非力なので[忍者 五](https://kakaku.com/item/K0001070077/)や[風魔 弐](https://kakaku.com/item/K0001150775/)以上の空冷クーラーやファン2個以上の水冷クーラーに交換してからOCしてください。
どのクーラーにするかは[レビューサイト](https://www.techpowerup.com/review/?category=CPU+Coolers)の記事を参考にすると良いかと思います。

# Precision Boost Overdrive
Ryzen 5000シリーズのCPUはデフォルトで`Precision Boost 2`という機能が有効になっています。
![pbo_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221440/2529c78c-4a47-c366-61e7-5392a214bb22.jpeg)
これは温度、電力、電流をモニタリングして自動的にOCするものです。
三角の内側に収まるようにコントロールする仕組みなのですが、この三角の閾値がかなり安全に設定されているため、本来の性能を十分に引き出すことは出来ません。
閾値の上限を上げる機能が`Precision Boost Overdrive(PBO)`になります。

# Precision Boost Overdrive 2
PBOに`Curve Optimizer`を追加したのが`Precision Boost Overdrive 2(PBO2)`です。
Curve Optimizerとは、コアに与える電圧を意図的に下げることで温度を低下させ更にクロック数を伸ばすための仕組みです。
![pbo_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221440/2290c299-b77d-d907-536f-2776488eeeac.jpeg)
CPUには個体差があり、一番最悪のケースを想定してデフォルトパラメータが設定されています。
このデフォルトが電圧高めに設定されているので、ユーザ側でCPUに合わせてチューニングを行うことが出来るのです。
PBO2を利用する条件は「Ryzen 5000シリーズ」「AMD 400/500シリーズチップセット」そして「AGESA 1.1.8.0以降のBIOS」の3つになります。
BIOSはマザボメーカー提供の最新のものを使いましょう。
※AGESAとは：AMDがマザボメーカーに提供するCPUファームウェアです。BIOSのコアになります。

# Windows10を利用する場合
１．Windows10はWindowsUpdateで最新とすること(20H2以上)
２．最新のAMDチップセットドライバーを導入すること
３．電源プランは「バランス」にすること
４．設定アプリ＞「システム」＞「電源とスリープ」の「パフォーマンスとエネルギー」スライダーは「高パフォーマンス」に設定すること
![plan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221440/e714e8a1-9411-deec-f222-632b72024e4a.png)

# パラメータチューニング(Precision Boost Overdrive)
BIOSのSettings > Advanced > AMD Overclocking > Precision Boost Overdriveを選択し、Precision Boost Overdriveを`Advanced`に変更すると各種設定項目が表示されます。

各設定項目はこちら。
`PBO Limits - Motherboard`
⇒電圧等の閾値をマザーボードの限界値に設定します。
`Precision Boost Overdrive Scalar - 10X`
⇒閾値に到達してからその状態を維持する時間を最大まで伸ばします。
`Max Boost Clock Override - 200MHz`
⇒最大200MHzまで最大クロックを上乗せ可能なので最大値にします。
`Thermal Throttle Limit - Auto`
⇒温度制限はデフォルトで95℃なのでそのままにしときます。
`Curve Optimizer`
⇒次に詳しく説明します。

その他設定項目
`CPU Load-Line Calibration(LLC)`
⇒高負荷になるとCPUで電圧降下が発生する事(Vdroop)により動作不良を起こすので、補正を行います。
メーカー毎の設定例
ASUS - Level 2 (+CPU Power Phase Control - Extreme)
MSI - Level 3以上
Gigabyte - Auto
ASRock - Auto ※Vdroopが発生しやすい傾向にあるのでオーバークロック不向きかも
Biostar - Level 4以上
`SVM - disable`
⇒VMwareなど仮想化ソフトウェアを利用する場合は必要になりますが、enableだとパフォーマンスが1%程度低下します。

# パラメータチューニング(Curve Optimizer)
AMDはPBO2をこのように設定してくれとガイドラインを出しています。
![5a11b2e6d2c10c96.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221440/7f5b2c45-b872-1bda-39c1-ee736298b124.jpeg)
Curve Optimizer以外はガイドライン通りの設定で良いです。
CCDの中の優秀なコア（Ryzen Masterで★や●が付くコア）に対しCurve Optimizerでコア電圧下げ（負のカウントを増やす）ことを試してみること、さらにCCDが2基あるRyzenは片方のCCD全体のコア電圧を下げてみると書いていますが、★●が付くコアの電圧を下げ過ぎると問題が発生します。
![rm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221440/f151e2e8-a467-50d3-f08a-d9b8baf4efa2.png)
私の5600XだとC01とC06が優秀なコアとして選定されています。
★●のコアはシングルスレッド時に優先して利用されるので、瞬間的な出力を求められます。
そのため、電圧を下げるとブラックアウトが発生してしまいます。(AMDのガイドラインとは真反対ですね。)
逆に無印のコアについては電圧を下げても動作しますが、下げすぎるとOCCTにてエラーが発生するので注意してください。
チューニングの方針としては
１．★●のコアは-5～-15の範囲でブラックアウトが発生しないように調整
２．無印のコアは-15～-30の範囲で[OCCT](https://www.ocbase.com/)(データセット大小)が通過するように調整
３．１、２でパラメータを決めたら[prime95](https://www.mersenne.org/download/)で最終調整
となります。

１と２に適合するようにしたパラメータは下記の通りとなりました。
core0 negative 7 ★
core1 negative 22
core2 negative 22
core3 negative 22
core4 negative 22
core5 negative 7 ●

最後にprime95で安定させるための調整を行います。
下記設定で10分間テストを実施し、エラーとなったコアのnegative値を減らしていきます。
Memory in useの項目は搭載メモリを4で割った数値を入力してください。例)8GB⇒2000MB 32GB⇒8000MB
![prime95_2048k.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221440/f2e501fc-0efa-f705-3de9-af30bb3aff90.png)

core2とcore3でエラーとなったので数値を調整し、最終的に下記のパラメータになりました。
core0 negative 7 ★
core1 negative 22
core2 negative 14
core3 negative 14
core4 negative 22
core5 negative 7 ●

Cinebench R20とCPU-Zで行ったベンチマークテストの結果は下記の通りとなりました。

## Cinebench R20
![CBR20_7_16_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221440/0d8efce3-6d64-9dac-ace2-a284136e0ffb.png)

## CPU-Z
定格 Single：637 Multi：4887 https://valid.x86.fr/ehnztc
OC Single：664(+4.2%) Multi：5173(+5.8%) https://valid.x86.fr/h0zfcx

# 最後に
以上でオーバークロックについての説明は終わりです。
Ryzen 5600X + 風魔弐の組み合わせで上記設定を利用してますが、最大温度が86℃程度とかなりいい感じです。
OCCTのデータセット大小それぞれ1時間のテストとprime95をクリアしてるので問題ないでしょう。

また、[神様(1usmus氏)](https://twitter.com/1usmus)がRyzenシリーズの自動オーバークロックを行うツールを開発中のようです。楽しみで仕方ありません。
![akaza.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221440/351e930c-0917-b8e3-9759-1eb19f233614.png)

# 余談#1
Ryzen 5000シリーズでSVMを有効にした状態でAvastをインストールするとaswVmm.sysってサービスが原因で起動出来なくなるから注意は必要です。
私はVMwareを動かしたかったのでAvastは諦めることにしました。。。

# 余談#2
Curve OptimizerはAGESA 1.1.8.0で初実装されました。その後、1.1.9.0、1.2.0.0とバージョンが上がる毎に安定性が増しているので有効にすると不安定になる人は最新BIOSを当てながら様子見するといいと思います。安定する＝電圧降下が緩やかになりクロック数の上昇も緩やかになっている為、スペックダウンに感じる人もいるかも知れません。その時はパラメータを再調整しましょう。