先日購入したゲーミングPCのメモリタイミングを調整してみて、メモリ設定によってゲーム性能が上がるのか見てみます。
ゲーム性能の指標としてはベンチマークのスコアとその際のFPS値を使用します。
またメモリの設定を行うにあたり調べ学習をしました。それらを引用しまくったメモを張り付けます。
実際に行ったのはメモリOCではないです(1.35VもOCっちゃOCなのだろうけど)。タイミング調整のみです。
参考資料
参考というかパクリ元です。ここら辺を読んで、ちょろっとまとめたメモを作成しました。
なのでここよりこっちを見るとよいと思いますよ。
メモリOC・タイミング調整
ハリフーン (hurriphoon)さんのゆっくり解説動画。動画なので気楽にメモリのタイミング調整について学べます。今回のFPS値検証はハリフーンさんの結果を再現させているだけではあります。
ゲーム向けのメモリ設定の最適化・選び方について述べられています。
メモリの設定手順について解説しています。大体これに従って設定してみています。
諸タイミングが何を指しているか等、メモリ設定を解説しています。
仮想メモリ・レジストリ
メモリ関連のレジストリ公式ドキュメント
メモリ関連のレジストリについてまとめられています。
DRAMのしくみ
メモリって何?なざっくりとした読み物です
メモリの仕組みからタイミングとは何か解説しています
メモリについてデジタルな話をしています。
- https://www.micron.com/-/media/client/global/documents/products/technical-note/dram/tned03_gddr6.pdf
micronのテクニカルノートで検索すると専門的な話をしたものがいろいろあります。
安定性テスト
不安定な設定だと完走できずに落ちることがあるので簡単なテストに使えます
高い負荷をメモリに長時間かけエラーが出ないかテストします。
ほかにもいろいろあるぽいけど一杯やるのめんどくさいしいいかになってしまった
メモリタイミングと設定方法等
上記参考資料をパクって自分用にまとめたのです。
値の設定はBiosで行います。PCを起動したらF2を押しDRAMの設定を行います。
不明な単語は上記参考資料見たりすればいいのではないだろうか
安定性
条件を厳しくしていき動作が不安定にならないところに決定します。
安定して動作する中での最良の条件を見つけます。
下記手順ごとにOSが起動したらベンチマークを回し安定性をテストする。
簡易的に安定性を見る。不安定だと落ちる。
- cinebench r23 multi
- FF15bench
条件が固まってきたらprime95で長時間高負荷時の安定性を見る。
メモリ情報の確認
Thaiphoon Burnerで見れるらしい(環境では動作しなかった)
biosでinfomationから一部確認することができる
ダイの種類で詰めやすさが変わるらしい
シングルランクよりデュアルランクのほうが高速らしい
Voltage
標準は1.2V、XMP適用で1.35Vのものが多いと思います。
~1.5VはOCと言ってよいのではないでしょうか(1.35VもOCではあるのでしょうけど)
GEAR MODE
メモリコントローラのクロックを決定します。GEARMODE1はDRAMと同じクロックで動作し、2は半分で動作するようです。
ますGEARMODE1にします。
Clock
言うまでもないですがクロックが高いほうが高速で動作します。
タイミングAutoでクロックを上げていき起動しなくなる周波数を探り、使用するクロックを決定します。
timing
タイミングの実時間速さは何クロック使用するか、であるのでクロックの高さに依存します。
primary timing
- tCL
CAS latency (Column Address Strobe)
アクティブ化した行でアクティブ化した要求列のアドレスを読み込みデータを取得するまでの時間
tCLを不安定になるまで下げていき値を決定し設定します。 |
サイクル実時間は下記から求められます |
$$\sf{timing}\ast\frac{2000}{clock} [ns]$$ |
- tRCD
Row to Column Delay
行をアクティブ化した後、列をアクティブにするまでの時間
行アクティブ後列データ読み込みまでにかかる時間はtCL+tRCD
- tRP
Row Precharge Time
プリチャージ=非アクティブ化してから次の読み込み行をアクティブ化するまでの時間
読み取り後、非アクティブにし次の列アドレスをアクティブしようとするまでの時間
tRCD, tRPを同値で不安定になるまで下げていき値を決定し設定します。 |
- tRAS
Row Active Time
行をアクティブ化してから非アクティブまでの、行がアクティブである最小時間
通常tCL+tRP |
tRAS=tCL+tRPを最小値として設定し不安定なら上げていき値を決定し設定します。 |
- CR
Command Rate
コマンド送信回数。少ないほうが高速だが、複数回コマンドを送信すれが当然エラー率は下がる
クロックが割と高くなければ1で通るらしい
1から設定し、不安定なら上げ値を決定し設定します。 |
secondary timing
- tWR
Write Recovery Time
書き込み回復時間
書き込み終了後にバンクが非アクティブ化されるまでの時間
- tRTP
Read to Precharge Delay
読み取りから非アクティブ化までの時間
tWR=2*tRTPとなります |
tWR | tRTP | |
safe | 20 | 10 |
tight | 16 | 8 |
extreme | 12 | 6 |
- tRRD_S
RAS to RAS Delay Different Bank Group
異なるバンクへグループの遅延時間。メモリは複数のバンクおよびバンクグループがある
RRDS分だけ待機する
- tRRD_L
RAS to RAS Delay Same Bank Group
- tFAW
Four Activate Window
同ランク内で4つの行のアクティブ化が発生できる時間
tRRDS | tRRDL | tFAW | |
safe | 6 | 6 | 24 |
tight | 4 | 6 | 16 |
extreme | 4 | 4 | 16 |
- tRFC
Refresh Cycle Time
メモリは一定期間でリフレッシュが入る。リフレッシュにかかる時間なので短いほど良い
周囲温度が高いときつくなるためややマージンを持つとよいかも
下記表のとおりに加減も決まってるようで台に応じて徐々に下げていくとよい |
$$\sf{tRFC timing}=\sf{tRFC[ns]}\ast\frac{clock}{2000}$$ |
IC | tRFC (ns) |
S8B | 120 – 180 |
N8B | 150 – 170 |
H8D | 240 – 260 |
H8A、H8C | 260 – 280 |
M8E、M16B | 280 – 310 |
S8C | 300 – 340 |
- tCWL
CAS Write Latency
CASの書き込み版。列アクティブから書き込みまでの時間
tCWL1 | |
safe | tCL |
tight | TCL-1 |
extreme | TCL-2 |
tCWL を変更すると tWRRD_dg/sg に影響し、したがって tWTR_S/L に影響します。 |
tCWL を 1 下げる場合、同じ tWTR 値を維持するには、tWRRD_dg/sg を 1 下げる必要があります |
- tWTR_S
Write to Read Delay Different Bank Group
異なるバンクグループでの書き込みから読み込みまでの待機時間
- tWTR_L
Write to Read Delay Same Bank Group
tWTRS | tWTRL | |
safe | 4 | 12 |
tight | 4 | 10 |
extreme | 4 | 8 |
tWTRS/L を auto のままにし、それぞれ tWRRD_dg/sg で制御する必要があります。 |
tWRRD_dg/sg を 1 下げると、tWTRS が 1 下がります。 |
tWRRD_sg も同様です。可能な限り低くなったら、tWTRS/L を手動で設定します |
tCWL→tWRRD→tWTRの順に設定 |
third timing
- tREFI
リフレッシュを行う間隔。リフレッシュ中は動作できないため間隔は長いほどよい
周囲温度が高いときつくなるためややマージンを持つとよいかも
tREFI | |
safe | 32768 |
tight | 4000 |
extreme | 65534 |
- tCKE
Clock Enable Time
- tRC
Row Cycle Time
RASは行がアクティブにされてから非アクティブにするまでの時間、
RPが非アクティブにされてから次の行をアクティブにするまでの時間
よって最小値は tRAS + tRP
tRAS+tRPを最小値として不安定なら増やす |
turn around timing
- tRDWR
Read Write Command Spacing
読み取りコマンド後書き込みコマンドまでの間隔
- tWRRD
Write Read Command Spacing
書き込みコマンド後読み取りコマンドまでの間隔
- tRDRD
- tWRWR
tRDRD | ||||
sg | dg | d r | dd | |
safe | 8 | 4 | 8 | 8 |
tight | 7 | 4 | 7 | 7 |
extreme | 6 | 4 | 6 | 6 |
tWRWR | ||||
sg | dg | dr | dd | |
safe | 8 | 4 | 8 | 8 |
tight | 7 | 4 | 7 | 7 |
extreme | 6 | 4 | 6 | 6 |
tWRRD_sg/dgは上記参照 |
tRDWRは9/9/9/9 のような感じで1ずつ下げていきます |
drはデュアルランクに関するもので、シングルランクでは無視できます。 |
メモリ設定の違いによるFPS値の変化
前回(HWiNFOとRTSSでPCのベンチマークを記録してGNU Octaveからグラフを出力してみる)作成したものを使用してベンチマーク中のFPS値を測定します。
使用するメモリはこちらです。XMP 3600MHz
Patriot Viper Steel DDR4 3600MHz 16GB x 2枚
余談ですがこのメモリXMPを適用するとやや不安定で、たまに落ちます。あまり良い個体を引けなかったようです。
XMP運用できません。最初からタイミング調整するつもりだったとはいえ設定されてるんだから動いてくれよなんですけど。XMPとの比較はできません。無意味では?
というわけでそもそもの目的としてOCして限界に挑むとかでなく1.35V3600MHzで安定動作する設定を探すという風です。
ついでに設定の差によるFPS値やスコアの変動も見てみます。
使用ベンチマーク
7zipベンチマークcompression
3D Mark Timespy
ff14ベンチマーク
条件
それぞれの条件で安定動作したものを使用しています。
clock MHz
- 2666(SPD)
- 3200
- 3400
- 3600
timing
- 自動
- 一次のみ
- その他も
結果
スコア
- 7zip comp
タイミングを設定するごとにスコアが上昇しています。一次のみで見てみると3200MHzがなんかスコア高いですね。
一次タイミング以降を設定するとスコアがめちゃくちゃ伸びています。
ゲームにおいてここまで差がつくかといわれるとですが、一次以降のタイミングも重要であることはわかります。
- timespy physics
こちらも同様の傾向です。
2666MHzとの差が大きく見え、クロックが高いほうが性能がよさそうです。
- ff14
ff14は一次タイミングでの伸びと+一次以降との伸びが同じくらいです。
fps
ff14の結果から
- 2666auto VS 3600 all
拡大しないと見づらいですが、どこの地点でも20fps程度の差があります。
SPDとの比較ですが、2666等の一番安いものを買うのと数千円盛って安いOCメモリを買うのとでこれぐらいの差がある感じでしょうか。
- 3200all VS 3400all VS 3600all
拡大しないと見えない。
3200と3400と3600とでそれぞれ調整しましたが、周波数は高いほうがFPSがちょっと高いです。
3200→3400の伸びは目に見えますが、3400→3600の伸びはそれに比べるとかなり小さいです。
- 3600 auto VS primary VS all
自動→一次のみ、一次のみ→全部 でそれぞれ10fps程度伸びています。
まとめと調整した感想
タイミングを手動調整することで、ちゃんとFPSが向上することがわかりました。
何よりBiosやメモリ設定をいじるという食わず嫌いがなくなるのがよいと思います。こうでもしなきゃめんどくさくて触ろうとすることなかったでしょうからね。
あとちゃんとOCメモリを安定させられるというのが性能面よりも大きいですよね
下記調べながら等環境でメモリを設定してみた結果です記録用。ちゃんとできてるのかは知らないけど。
Gear | 1 |
tCL | 19 |
tRCD | 21 |
tRP | 21 |
CR | 1 |
tWR | 12 |
tRFC | 549 |
tRRD_L | 6 |
tRRD_S | 4 |
tWTR_L | 6 |
tWTR_S | 4 |
tRTP | 6 |
tFAW | 16 |
tCWL | 17 |
tREFE | 65534 |
tCKE | 4 |
tRC | 61 |
tRDRD_sg | 7 |
tRDRD_dg | 4 |
tRDRD_dr | 7 |
tRDRDdd | 7 |
tRDWR_sg | 12 |
tRDWR_dg | 12 |
tRDWR_dr | 14 |
tRDWR_dd | 14 |
tWRRD_sg | 29 |
tWRRD_dg | 27 |
tWRRD_dr | 10 |
tWRRD_dd | 10 |
tWRWR_sg | 8 |
tWRWR_dg | 4 |
tWRWR_dr | 8 |
tWRWR_dd | 8 |
仮想メモリとレジストリ
レジストリ
参考資料のところで示しましたが
あたりを読んだり試してみたりしました。
これらレジストリ自体古くて機能していないものも多いようです。
Microsoftに高スぺの場合カーネルを物理メモリに常駐させるようレジストリをいじると性能が上がる可能性があると書いてあったりします。
インターネットでも見てるとレジストリからメモリの最適化できますというのはいっぱい出てきます。
まあ等環境では目に見えたfps向上などの変化は見られませんでしたので、わざわざレジストリをいじる必要性は感じられませんでした。とりあえずデフォルト推奨です。(そのうち要検証?)
ソフトウェアなどによって勝手にレジストリが変更されている、ということがあるというのも見ましたので、そういう場合は元に戻しておくのがよいかな。
仮想メモリ
仮想メモリもレジストリから編集することはできますがパフォーマンスオプションから設定することができます。
win+rからSystemPropertiesPerformanceを実行するか、ショートカットを作っておきましょう。
パフォーマンスオプション>詳細設定>仮想メモリ
仮想メモリのオンオフや割当量を設定することができます。
メモリ量が十分であれば仮想メモリをオフにする方がよい、ということも聞きますがどうなのでしょうか。fps値向上等の目に見えた変化は見られませんでした。好きな方でよさそう。仮想メモリ割り当てないと不安定になるゲームもあるとか聞いたことがあります。
確かに計算機等の基本的な本等に書いてある理屈の上では仮想メモリのデータにアクセスする際遅延が発生しそうですが、そのレベルが実際に影響を及ぼすのかは疑問です。逆に物理メモリのスペースを空けることで良い効果もあるとか。(そのうち要検証?なんかどうでもよさそう)
おわり
メモリタイミングを調整することで10程度規模のfps差が生じました。大きいか小さいかはちょっとの値段の差をどう捉えるか人それぞれでしょうか。
おすすめのメモリの買い方は自分で設定したくない人はネイティブ3200を買う。ちょっと安いし。OCメモリならXMP当てずにタイミングを手動設定する。です
ただ今回調整する中でBiosも立ち上がらなくなったのがありました(片方のメモリを抜き原因のタイミングを再設定し対処。ダメだったとしてもCMOSクリアすれば大丈夫かな?)。なのでまあなにかしらのリスクはあることは想定してやるべきなのだなあ。
……めんどくさいしネイティブでよくね?ちょっと安いし。
XMPは不安定だったのでゴミです。どこを見てもOCメモリが当たり前におすすめされててなんだかなあと思ったりしました。不安定なことはまれなのだろうか?それでも不安定な可能性を孕んでいるよなあ……など。
何より今回はメモリに関する知識が多少身についたことと、メモリタイミングの設定を実際に行ってみた経験が収穫です。
前回:HWiNFOとRTSSでPCのベンチマークを記録してGNU Octaveからグラフを出力してみる
次の記事:Windows11インストール後の初期設定(MS-settings)
コメント