プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

Hyper-VにUbuntu20.04を入れてから、 Mozilla rr を動かすまで

 Mozilla rr という、実行のイベントを保存して、プロセスの実行を再現するデバッガを今更最近知りました。 ステップ実行を逆方向に行えるので、とても便利ですね。

 仕組み的にはWSL2なら使えそうな気がしますが、WSL1の私は使えません。(ていうか、Windows 2004は一体いつなんだ…。)

 仕方がないので、Hyper-V上のUbuntuで動かそうとしましたが、はい、動きません。チキショウ。

 調べてみると、Wiki曰く 「Hyper-V does not seem to support PMU virtualization.」とのことで、 Hyper-V上では動かないのだ。

 マジかよー、と一度は諦めたのですが、もう一度よく調べたら何かできたのでここにメモしておきます。

 ちなみに、初めてUbuntu 20.04 も入れたので、そこからだぜ。

Ubuntu 20.04 のインストール

 実は初めてのUbuntu 20.04。サクッと Hyper-V クイック作成から突っ込みます。

f:id:nodamushi:20200702004506p:plain:w320

 プロセッサやメモリや統合サービス等の設定を適当にして、起動。

f:id:nodamushi:20200702004721p:plain:w320

 サクッとインストールして、起動したのがこちら。

 ………リージョンを日本語にしていますが、全然翻訳されてない。

f:id:nodamushi:20200702005210p:plain:w320

 翻訳はされていませんが、ディレクトリは「デスクトップ」とかいう日本語になってるので、「Desktop」に変更。

 最初からEnglishを選んだ方が楽だと思う。

LANG=C xdg-user-dirs-gtk-update

f:id:nodamushi:20200702005521p:plain:w320

拡張セッション

 このままじゃクリップボードの共有が出来なくて辛タンなので、Microsoft linux-vm-toolsでxrdpを入れて、拡張セッションを使えるようにします。

sudo apt install git
mkdir ws
cd ws
git clone https://github.com/microsoft/linux-vm-tools.git
cd linux-vm-tools/ubuntu

 20.04が…………ない?あれー?

f:id:nodamushi:20200702010041p:plain

 2020年7月現在だと、Ubuntu 20.04に対応していませんでした。

 20.04対応のプリリクを出して下さっている方が居るので、そっちで試してみます。

(※未来の方で20.04があるなら、それを利用して下さい。)

f:id:nodamushi:20200702010412p:plain:w320

git clone -b ubuntu20-04 https://github.com/Hinara/linux-vm-tools.git
cd linux-vm-tools/ubuntu/20.04
chmod +x install.sh

 で、 install.shを実行してreboot

sudo ./install.sh
sudo reboot

 rebootしたらもう一回 install.shを実行し、シャットダウンします。

cd ~/ws/linux-vm-tools/ubuntu/20.04
sudo ./install.sh
sudo shutdown now

 Windows上で管理者権限のPowerShellを起動し、以下を実行。 Ubuntu 20.04の所は自分の仮想マシン名に合わせてください。

Set-VM -VMName "Ubuntu 20.04" -EnhancedSessionTransportType HvSocket

 これで、一応拡張セッションは使えるようになったんですが、何かやたらと反応するかしないかが不安定です。4回に一回ぐらいしか、拡張セッションが有効にならない。よくわからん。なーんか、「ゲスト サービス」を有効にしてるとダメな感じがする…(不明)

Mozilla rr を使えるようにする

 Windows Server 2019 および Windows 10 バージョン1809以降のバージョンのみ可能です。IntelのCPU以外は知らない。Ryzen欲しい。

 先ずは Windows上で PowerShellを管理者権限で起動して、以下を実行。Ubuntu 20.04の部分は仮想マシン名に合わせてください。

 なお、たぶん、 PMUだけで十分だとは思われる。

Set-VMProcessor "Ubuntu 20.04" -Perfmon @("pmu", "lbr", "pebs")

t.co

 そして、Ubuntu20.04を起動して、rrをインストール

sudo apt install rr

 で、以下の様な適当なCコードを作成して、デバッグビルドしてrrで記録を取ってみる。

 初回は必ず /proc/sys/kernel/perf_event_paranoid が3だと怒られるので、1に変更しておきます。

 図のメッセージのように、 /etc/sysctl.conf にkernel.perf_event_paranoid = 1 を書くかどうかはご自由に。(私は面倒くさいので設定しましたが、どういう影響が出るのか良く分からないので…。まぁ、どうせ仮想マシンだし)

f:id:nodamushi:20200702023835p:plain

gcc -g3 foo.c
echo 1 | sudo tee /proc/sys/kernel/perf_event_paranoid
rr record ./a.out
rr replay

 これで上の図のようにちゃんとHyper-V上のUbuntu20.04でMozilla rrが動きました!やったね!