Windows版のパッケージで、PSOキャッシュのクリアと思われる処理で発生するヒッチについて

お世話になっております。

現在プロジェクトにて、Windows版パッケージを起動してから約2分後に500ms程度のヒッチが発生するという症状が起きています。

ヒッチ自体は添付画像のようにDeleteRHIResourcesという処理で発生しているようですが、少し追いかけてみたところ、PSOキャッシュ関連の処理で発生しているように見えました。

r.pso.evictiontimeという数値がデフォルト60になっていますが、こちらを10にすると起動後20秒後にヒッチが発生したため、このあたりの処理が影響していると考えられます。

発生するようになったタイミングとしては、UE5.5.1からUE5.5.4へアップしてから起きるようになったような気はしますが、定かではありません。

なお、UE5.5.4には、こちらのパッチも適用しております。https://dev.epicgames.com/documentation/ja\-jp/unreal\-engine/manually\-creating\-bundled\-pso\-caches\-in\-unreal\-engine?application\_version\=5\.5

この症状について、発生原因や対処方法など、何か情報はありますでしょうか。

お手数おかけしますが、ご確認のほどよろしくお願いいたします。

お世話になっております。

こちら確認させていただいておりますが、現状解決につながるような情報を見つけられていない状態でして2点ほど確認させていただきたい内容がございます。

1. 今回問題となっているヒッチは起動時の初回のみでしょうか?

もしくはr.pso.evictiontimeの時間毎に定期的にヒッチしてしまっている状態でしょうか?

2. 今回パッチを当てて頂いていると伺っておりますが、内容は以下のものでしょうか?

合わせてGPUドライバをアップデートすることで改善しないかご確認頂けますと幸いです。

https://dev.epicgames.com/community/learning/knowledge\-base/DBOL/tech\-note\-fix\-for\-pso\-management\-issue\-on\-nvidia\-hardware\-in\-unreal\-engine\-5\-5

お手数おかけしますが、よろしくお願いいたします。

お世話になっております。

ご確認いただきありがとうございます、回答させていただきます。​

>​1. 今回問題となっているヒッチは起動時の初回のみでしょうか?

>もしくはr.pso.evictiontimeの時間毎に定期的にヒッチしてしまっている状態でしょうか?

​時間毎に定期的にヒッチはせず、確定で発生するのは起動時の初回だけとなります。

その後も起動中にヒッチが起きることがありますが、それがr.pso.evictiontimeに関連するヒッチなのかどうかは不明です。

>​2. 今回パッチを当てて頂いていると伺っておりますが、内容は以下のものでしょうか?

>​合わせてGPUドライバをアップデートすることで改善しないかご確認頂けますと幸いです。

はい、パッチの内容はいただいたリンクのものになります。

​GPUのドライバは最新にしておりますが、発生しているようです。

ご確認のほど、よろしくお願いいたします。​

ご確認ありがとうございます。

最新のドライバをご利用いただいている旨承知いたしました。

今回問題が起きているのはTestパッケージ、及びShipping上でもヒッチが起きている状態でしょうか?

お手数ですがご確認頂けますと幸いです。​

はい、TestパッケージとShippingパッケージ両方で発生しております。

本件について、同様の症状の報告が他から無いようであれば、こちらのエンジン改造やパッチの当て方に問題があるかもしれません。

最小限のプロジェクトを作成してみたり、パッチを戻してみたりなどしてもう少し原因を調査してみようかと考えております。

お手数おかけしますが、よろしくお願いします。

お世話になっております。

こちらの件ですが、PSOのパッチを当てなければ発生しないようです。

また、パッチを当てていても、GLowLevelCacheKeepUsedPSOsがtrueになっていれば、ヒッチは発生しないようです。

GLowLevelCacheKeepUsedPSOsをtrueにしてしまうと、パッチを当てる前に発生していたメモリが解放されない問題が発生するということでしょうか?

また、パッチ情報のページにあります以下の文言があります。

While this patch does capture most of the functionality in the fix that will be released in 5.6, there is one key difference users should be aware of: the option to keep compute PSOs in memory is not a part of the patch, as this would require making changes to the public API. Users who will need this functionality should reach out via their preferred support channel to get assistance.

今のところパッチ情報のページからダウンロードできるpatchファイルの差分しか反映しておりませんが、別の変更も併せて反映させる必要があるのでしょうか?

お手数おかけしますが、ご確認のほどよろしくお願いいたします。

お世話になっております。

本件問題を切り分けて頂きありがとうございます。

GLowLevelCacheKeepUsedPSOsに関しては、PSOを開放するような処理が入るため、パッチを非適用、もしくはGLowLevelCacheKeepUsedPSOsをtrueにした場合、元の記事で言及されていたようなPipelineStateObjectによるメモリが残ってしまう懸念がございます。

PrecachedPSOに関する同様の設定(GLowLevelCacheKeepPrecachedPSOs)もデフォルトFalseとなっており、どちらの設定もメモリの増加を引き換えにStall(ヒッチ)を減らす設定となっておりますが、今回問題となっているPSO関連の処理を改めて確認したところ、ヒッチを削減するための対応として削除を遅延実行する変更がCL43368107として入っておりました。

お手数おかけしますが、上記CLの対応をお試し頂けますと幸いです。

よろしくお願いいたします。

お世話になっております。

​​

教えていただいたチェンジリストを反映したところ、ヒッチが発生しなくなりました。

この状態で様子を見させていただければと思います。​

ご対応いただきありがとうございました。​

ご対応頂きありがとうございます。

無事ヒッチが発生しなくなったとのことで安心いたしました。

本件はクローズとさせて頂きますが、また何かございましたらお気軽にご相談ください。

よろしくお願いいたします。