2022/06/13(月)Ubuntu LinuxでVMware Workstation pro/playerを使うときの注意

割と長いこと(15年くらい?)、windowsにVMwareを入れて(というかVMwareしか入れない)、そこにFreeBSDやLinuxを入れて、その中で生活する、という生活を続けてきました。LinuxなどのPC-UNIXはハードウェアの違いを吸収する力が弱く、windowsをハードウェアの違いを吸収するためだけに使う、という考え方でした。しかし、ここ2年くらい、Linux (Ubuntu) の完成度は十分高くなり、デスクトップなら当然、ノートPCでも、普通にインストールすれば大体普通に動くようになってきました。そこで、ホストとゲストを逆転させて、PCには基本的にUbuntuを入れてそこにLinux版のVMwareを入れ、どうしてもwindowsを使いたいときだけ仮想で飼っているwindowsを使うようになりました。

UbuntuでVMwareを使うときの特別な設定を備忘録も兼ねて書いておきます。誰かの役に立つかもしれないので。

ゲストが異常に重くなる現象への対策

特に複数ゲストを起動したときなどに、ゲストがほとんど操作不能なレベルで重くなってしまい、そのときホストではkcompactd0というプロセスのCPU使用率が100%になっている、という現象が見られることがあります。数分待つと解消しますが、またすぐに再発します。これは多くの人が悩まされ決定的な対策はなかなか見つからなかったのですが、
にあるように最近対策が見つかりました。rootで(sudo suとかした後に)、
echo 0 > /proc/sys/vm/compaction_proactiveness
とすると立ちどころに収まります。永続的にこれを設定するには、/etc/sysctl.confに
vm.compaction_proactiveness=0
と書き加えて再起動すればいいようです。

Ubuntu 22.04でVMware Workstationを使う

現時点でVMware Workstationの最新版は16.2.3-19376536ですが、これはまだUbuntu 22.04の新しいカーネルに対応していないようで、初回起動時のカーネルモジュールのコンパイルでエラーになってしまい、起動することができません。そのうち対応するでしょうけど、とりあえず、
にあるように、
git clone https://github.com/mkubecek/vmware-host-modules
cd vmware-host-modules
git checkout workstation-16.2.3
make clean
make
sudo make install
sudo modprobe -a vmw_vmci vmmon vmnet
sudo service vmware restart
で起動するようになりました。

NATを使ったとき、断続的にネットワークがON/OFFを繰り返す

ゲストOSのネットワークをNATにしたとき、ゲストOSの種類には関係なく、断続的に(10秒周期くらい?)ゲストのネットワークがON/OFFを繰り返す、という困った現象に遭遇しました。Ubuntu 22.04にVMware Workstationを入れたときに発生したのですが、別のマシンにUbuntu 22.04とVMware Workstationを入れて発生しないケースもあったので、発生する条件はよく分かりません。 (2022/6/15追記: その別のマシンでもこの現象を確認しました。当方の環境では、Ubuntu 22.04にしたことで2/2で発生。) 検索してみると、
このようにかなり以前からこの現象は発生していたようです。いろいろ検索したところ、解決策を見つけました。
によれば、vmware-natdがDHCPのleaseを頻繁に行っており、それ自身はIPが変わらなければ問題ないが、それが仮想マシンのネットワークの頻繁な切断を引き起こしてしまうのが原因らしい。実際、ホストの/var/log/syslogにはゲストのネットワーク切断と同期して
May 21 17:43:44 exa kernel: [14661.785888] userif-3: sent link up event.
May 21 17:43:47 exa kernel: [14664.977941] userif-3: sent link down event.
May 21 17:43:47 exa kernel: [14664.977949] userif-3: sent link up event.
May 21 17:43:52 exa kernel: [14669.758177] userif-3: sent link down event.
May 21 17:43:52 exa kernel: [14669.758186] userif-3: sent link up event.
May 21 17:44:00 exa kernel: [14677.442456] userif-3: sent link down event.
May 21 17:44:00 exa kernel: [14677.442465] userif-3: sent link up event.
May 21 17:44:03 exa kernel: [14680.650489] userif-3: sent link down event.
のようなログが残っていました。そこで、前の節で入れたカーネルモジュールのvmware-host-modules/vmnet-only/userif.cに、強引ですが
*** userif.c.original   2022-05-15 22:05:24.140904301 +0900
--- userif.c    2022-05-21 17:43:37.199281561 +0900
***************
*** 1002,1007 ****
--- 1002,1010 ----
        return -EINVAL;
     }
  
+    /* never send link down events */
+    if (!linkUp) return 0;
+ 
     if (userIf->eventSender == NULL) {
        /* create event sender */
        retval = VNetHub_CreateSender(hubJack, &userIf->eventSender);
のようにlink downイベントを発生しないようにパッチを当ててモジュールを再インストールしたら、問題は解決しました。

おわりに

おそらく、VMwareがバージョンアップしたら不要になる情報かもしれませんが、自分がこれらの情報に行き着くまでに結構苦労したので、こうしてまとめておけば誰かの役に立つかもしれないと思い、こうして情報を残しておきます。
OK キャンセル 確認 その他