C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

AMD Ryzen Master vs. Microsoft Windows 10 WSL2 ( Hyper-V; Virtualization-Based Security(VBS) )

※この問題は本質的には未解決です。

もんだい

Ryzen MasterWSL2 を使用可能な Windows 10 環境で起動しません😂

f:id:USAGI-WRP:20200204195022p:plain

Ryzen Master can only run with Virtualization Based Security (VBS) disabled in the Windows operating system. Please disable VBS and re-start Ryzen Master. Virtualization-Based Security (VBS)!

訳:

Ryzen Master は Virtualization Based Security (VBS) を無効化した Windows じゃないと動作しません。VBSを無効化して Ryzen Master を再起動してね。 Virtualization-Based Security (VBS)!

無慈悲なエラーです😂 ここでいう VBS はこの問題への対処の上では事実上 Hyper-V と大雑把に読み替えてOKです。(正確にはそれぞれ別の機構ですが、この問題をユーザーが必要とする視点で考える上では"すなわち"的に結びつけてOKです。)

昨年末からわたしもWSLをWSL1からWSL2へ以降していました。1つ前のメモ CPUとMBの間にゴミが詰まっていてもPCは動く事がある。但し今回はメモリーの不調の原因でした。のメモ の事があり、モニタリング用に Ryzen Master を起動してこの問題へ対処する必要が生じている事に気づきました。既にWSL2をWSL1へ戻したくはありません…。

バイナリーパッチによる対策方法

根本的で本質的な解決とは言えませんが、 Ryzen Master の実効バイナリーへバイナリーパッチを充てて問題を解決できます。

Twitter に居るギークのひとり TOM_RUS の投稿より (†1)

Like this in version 2.1.0.1424

f:id:USAGI-WRP:20200204202338p:plain

Twitter に居るギークのひとり steeve の投稿より (†2)

Current status: reversing @AMD's Ryzen Master tool to make it work when Hyper-V is enabled...

f:id:USAGI-WRP:20200204203007p:plain f:id:USAGI-WRP:20200204203000p:plain

Found the culprit...

f:id:USAGI-WRP:20200204202908p:plain

0x0F84 is a conditional jump if zero to current program count + 0x000000F7. Basically, if the sub_14003CA80 method doesn't return 0, don't jump (continue), and display the nag screen. We're going to turn that into a unconditional jump (never display the nag screen).

f:id:USAGI-WRP:20200204202838p:plain

Now a unconditional jump (jmp) is 0xE9. One byte instead of two (0x0F84). No problem, we're just gonna pad it with a nop instruction (0x90). Let's patch it out.

f:id:USAGI-WRP:20200204202801p:plain

Success! For those who have a Ryzen CPU and WSL2, load "AMD Ryzen Master.exe" in you favorite hex editor, go at 0x014E67 and replace "0F 84" with "0x90 E9".

f:id:USAGI-WRP:20200204202813p:plain

私も試してみたのですが…

f:id:USAGI-WRP:20200204231737p:plain

問題の箇所はいまのところバージョンや実行環境が変わってもIDAでデバッグ実行すればすぐに見つかるものの…

f:id:USAGI-WRP:20200204232115p:plain

oops! 使用中に不意に緑画面で HYPERVISOR_ERROR が発生しました。これは HYPER-V とか VT-x とか今回の問題への関連性の疑いがとても強いBSOD(緑だけど)状況なので、少なくともいまは WSL2Ryzen Master の同時使用は諦める事にしました😅

この問題は Ryzen Master 側のソフトウェア開発に起因する課題のようですが、どうやら長年といえる程度にはAMDからは現実的な対応がされないまま、AMD公式フォーラムでの回答(†3)も

(意訳) 「Ryzen Master が Hyper-V/WSL2 と共存できるようにしたいけど、今のところ Ryzen Master を使いたい時は Hyper-V (VBS) を無効化してね。」

となったまま進展していないようです。WSLのイシュートラッカーでもAMDがどうにかしてくれるようにMicrosoftぱわーを借りられないか的な叫びが…ちょうどさきほど追加されていました(†4)…。

注意

この記事の内容を元にバイナリーパッチを施した Ryzen Master を実行して起こるあらゆる事態は実行した人の自己責任です。よくわからない場合はどちらかを諦めつつAMDの対応を祈って待ちつとしましょう…。AMDのフォーラムの関連スレッドへ👍しつつ…。

参考