VMware虚拟机在后台运行时性能下降

本文最后更新于:2024年7月16日 下午

前情提要

众所周知,World needs Windows. But Linux even matters. (Especially for developers)

鱼和熊掌能否兼得,也许可以小火慢煎

有的同学要说了:WSL!

WSL(Windows Subsystem for Linux),一听名字就感觉性能爆表

但是如果需要图形界面的话,WSL貌似不是特别方便

此时就需要经典虚拟机出场了,like VMware

主诉(性能下降)

一个经典的方案是:VSCode(Remote SSH)+ VMWare(Ubuntu)

我从没有发现其性能不佳,直到我开始怀念RustRover (Jetbrains),但被Jetbrains Gateway的远程开发体验击溃后,我在虚拟机里安装了Jetbrains for Linux

1
2
cargo clean
cargo build

看着缩短了5倍的编译时长,我陷入了沉思

都是Terminal,都是fish,难不成Jetbrains有魔法,还是Remote SSH有大坑

// 经测试:原生终端和Jetbrains终端性能一致 啊哈哈(尬)

我不经脊背发凉,没有了VSCode Remote SSH,我很难想象出一个替代方案进行远程开发

为此,我请到了著名Linux专家 - 侯同学,为大家进行WSL + Remote SSH的测试

Result:WSL原生终端与Remote SSH终端性能并无二异

看来VSCode不背这个锅,呼呼呼

先做个检查吧

盯——(望闻问切)

好的,请问,Jetbrains终端和VSCode Remote SSH终端有什么不同

即答:后者是Windows物理机应用,此时,虚拟机运行于后台

这点其实非常重要,后台进程的优先级显然是低于前台的,(被调度到小核上之类的,CPU片减少之类的)

切片(Test)

Okay,我们在Remote SSH终端中输入cargo build,然后回到虚拟机,使其时刻保持在前台

Result:编译时长大大缩短,与原生终端无异

破案

正如我们所猜想的,在后台时,进程优先级下降,导致性能下降(5倍)

药方

能否设置虚拟机的进程优先级呢?答案是(薛定谔的)

优先级

我们可以看到,右侧可以设置两种情况下的优先级:

  • 抓取的输入内容
  • 取消抓取的输入内容

好的,作为一个the local,我只能告诉你,我每个字都看得懂,But…

好吧,我们还是看看官方文档吧:

官方文档

这个就好理解多了

I Guess:

  • 已抓取输入时:前台,获取焦点时
  • 未抓取输入时:后台,无焦点时

前者默认是正常,设置为后,前台使用虚拟机的性能会提升

But,后者居然无法设置为

只有,正常两个选项,寄

// 可能是为了不抢占物理机,但是居然不给个选项

有办法吗?也许可以强制设置进程优先级(Windows API)

参见:还在为大小核调度困扰?教你如何优化性能! - 哔哩哔哩 (bilibili.com)

あの,我还是用Linux Jetbrains吧,(孩子们,我回来了)

Peace

Ref

还在为大小核调度困扰?教你如何优化性能! - 哔哩哔哩 (bilibili.com)


VMware虚拟机在后台运行时性能下降
https://mrbeancpp.github.io/2024/07/16/VMware-Background-Performance-Down/
作者
MrBeanC
发布于
2024年7月16日
许可协议