@无名啊,你两边的测试程序是同一个二进制吗?不会是一边-O2优化一边-O3优化产生的性能差异吧。应该在一边编译然后拿到另一边运行,确保跑的是同一个程序。甚至还可以WSL2直接挂载Linux分区,chroot到物理分区的Linux系统里,确保不是库版本不同产生了性能差异。
会不会是内存寻址多了几层,导致慢了。。
@无名啊,应该不会产生9%的差异才对。虚拟化是硬件执行的,实际上只是切换命名空间而已,只在切换的一瞬间有额外时间开销,切完了就和正常寻址一样了。
@无名啊,我大胆预测一下,Windows没有把最快的核心分配给计算任务,或者最快核心在Windows里频率比Linux里低,导致了性能差异。
@无名啊,哦对了,说起来,CPU密集型应用也不会受到虚拟化安全的性能影响啊。虚拟化安全影响的主要是系统调用速度和IO速度。。。
纯计算类应用在计算的时候根本不会经过任何安全检查代码。安全检查都是设置在系统调用和IO控制操作附近的。
@无名啊,> WSL1 / WSL2 运行,速度慢了 9%
这说明你的应用是一个存粹的CPU密集型应用啊,完全没有IO瓶颈,所以WSL1和WSL2的性能才接近。只要有一点IO压力,WSL1的性能就会远低于WSL2了,因为Windows/Linux翻译层的IO性能远低于虚拟机中的原生Linux内核,并且还有偶发的死锁问题。
@无名啊,你在BIOS里把虚拟化功能关闭,WSL1还是能用的,VBS也会变成未启用,你再去测一下就能知道hyper-v带来的影响是多大了。WSL1的问题在于微软写的Windows/Linux系统调用翻译层本来就性能不好,怪不了hyper-v。
WSL2是hyper-v中的虚拟机。“虚拟机平台”和“虚拟机监控平台”都是启用hyper-v。
启用hyper-v后,Windows本身也会变成一个运行在hyper-v中的虚拟机,只不过是特权虚拟机,可以直接访问硬件,还能管理其他虚拟机。
所以只要启用了WSL2,Windows本身的性能也会略微下降,因为从裸机运行变成虚拟机内运行加硬件直通了。
但是这就是使用WSL2的代价,这是无法避免的。而且性能下降程度应该不到1%
至于速度慢了 9%,那是因为Windows在和Linux交替运行,在抢走Linux的CPU时间嘛。hyper-v把9%的CPU时间分配给了Windows。
如果要使用Windows NTFS文件系统内的虚拟磁盘,那把CPU时间分配给Windows是不可避免的。除非hyper-v Linux里做硬盘直通,然后完全不和Windows交互,并且Windows直接注销,不登录到桌面,后台服务也尽可能停止运行,才能尽可能不抢走CPU时间,性能才可能和裸机运行Linux接近。
但少了和Windows的互通,就不是WSL2了。
所以WSL2必然是要比裸机运行Linux慢的。
@无名啊,同时运行两个系统肯定会比只运行一个系统慢啊,这不是理所当然的吗?除非你能完全关闭主控Windows,只在hyper-v里运行WSL2,才能达到和裸机运行Linux接近的性能(还是会有微量性能损失,因为hyper-v虚拟机监控程序也要分走一部分CPU)。
@无名啊,内核隔离是“基于虚拟化的安全”中唯一会影响性能的部分,关闭它就行了。其他功能主要是和固件签名验证、安全启动等有关,不会影响性能。
被个别媒体引述为“性能降低达37.7%”的也只是内核隔离功能,该功能会在新装的Windows里默认启用,带来了性能影响,媒体也只是将该功能关闭就恢复了性能。
参考文档:https://learn.microsoft.com/zh-cn/windows-hardware/design/device-experiences/oem-vbs
基于虚拟化的安全功能(VBS)使用硬件虚拟化和 Windows 虚拟机监控程序来创建独立的虚拟环境,该环境将成为假定内核遭到入侵的 OS 的信任根。
其中一个安全解决方案是内存完整性,它通过在 VBS 的隔离虚拟环境中运行内核模式代码完整性来保护和强化 Windows。
VBS 要求以下组件存在并得到正确配置:
安全启动:必须在利用 VBS 的设备上启用安全启动。
所以关闭核心隔离再关闭安全启动就不用担心VBS会生效了。
@无名啊,我确实以为你想关闭的是Visual Basic Script,所以我才一直没有回答。
图中这两个选项就是所谓的“基于虚拟化的安全”:
@无名啊,在Windows Defender里把“内核隔离”里面的“内存完整性”选项关闭就行了,找不到就在设置里搜“内核隔离”或者“核心隔离”(旧版本说法)。关了这个之后其他虚拟化安全功能都会被禁用,但是Hyper-V和WSL2都可以继续使用。
如果本来就处于关闭状态,说明你本来就没开基于虚拟化的安全。打开虚拟化和Hyper-V功能不代表打开了“基于虚拟化的安全”。后者只有全新安装才会自动启用,升级安装后默认是关闭的。
尝试在ARM Linux里启动:
#!/bin/bash export LD_LIBRARY_PATH=/usr/local/lib/aarch64-linux-gnu args=( -machine virt #-cpu cortex-a57 -cpu host -smp 8,sockets=1,cores=8,threads=1 -m 4096 -enable-kvm -kernel Image -initrd ramdisk.img -drive file=cache.img,format=raw,if=virtio -drive file=system.img,format=raw,if=virtio -drive file=vendor.img,format=raw,if=virtio -drive file=userdata.img,format=raw,if=virtio -drive file=sys_prod.img,format=raw,if=virtio -append "console=ttyAMA0 root=/dev/ram0" -serial stdio -device virtio-gpu #-device ramfb -display gtk ) exec /usr/local/bin/qemu-system-aarch64 "${args[@]}" "$@"
启动不了,kernel panic:
[ 1.523078][ T1] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000018 [ 1.524542][ T1] Mem abort info: [ 1.524914][ T1] ESR = 0x96000005 [ 1.525323][ T1] EC = 0x25: DABT (current EL), IL = 32 bits [ 1.525947][ T1] SET = 0, FnV = 0 [ 1.526341][ T1] EA = 0, S1PTW = 0 [ 1.526736][ T1] Data abort info: [ 1.527102][ T1] ISV = 0, ISS = 0x00000005 [ 1.527545][ T1] CM = 0, WnR = 0 [ 1.527927][ T1] [0000000000000018] user address but active_mm is swapper [ 1.528645][ T1] Internal error: Oops: 0000000096000005 [#1] SMP [ 1.529253][ T1] Modules linked in: [ 1.529631][ T1] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.10.210 #1 [ 1.530324][ T1] Hardware name: linux,dummy-virt (DT) [ 1.530877][ T1] pstate: 80c00005 (Nzcv daif +PAN +UAO -TCO BTYPE=--) [ 1.531586][ T1] pc : kmem_cache_alloc+0x17c/0x360 [ 1.532109][ T1] lr : kmem_cache_alloc+0x80/0x360 [ 1.532620][ T1] sp : ffffffc012e9bb40 [ 1.533047][ T1] x29: ffffffc012e9bb60 x28: 0000000000000000 [ 1.533728][ T1] x27: ffffffc011d27000 x26: ffffffffffffffff [ 1.534413][ T1] x25: 0000000000000000 x24: ffffffc01148a008 [ 1.535094][ T1] x23: ffffffc010af169c x22: 0000000000000000 [ 1.535737][ T1] x21: ffffffc010af169c x20: 0000000000000000 [ 1.536746][ T1] x19: 0000000000000cc0 x18: 0000000000000000 [ 1.538786][ T1] x17: 0000000000000002 x16: ffffff80fea34bf4 [ 1.539430][ T1] x15: ffffffc0112c9000 x14: 0000000000000000 [ 1.540060][ T1] x13: 0000000000000000 x12: 0000000000002735 [ 1.541875][ T1] x11: ffffff80faa60d60 x10: ffffffc01166f680 [ 1.542390][ T1] x9 : ffffffc011ce9000 x8 : 0000000000000027 [ 1.542990][ T1] x7 : 0000000000000000 x6 : ffffffc01020fd28 [ 1.543625][ T1] x5 : 0000000000000000 x4 : 0000000000000001 [ 1.544246][ T1] x3 : 0000000000000000 x2 : 0000000000000000 [ 1.545444][ T1] x1 : 0000000000000cc0 x0 : 0000000000000000 [ 1.546468][ T1] Call trace: [ 1.546811][ T1] kmem_cache_alloc+0x17c/0x360 [ 1.547331][ T1] alloc_flag_buf+0x3c/0x100 [ 1.547796][ T1] register_teleport_DMA_buffer+0x98/0x140 [ 1.548487][ T1] express_gps_probe+0x234/0x2e0 [ 1.549025][ T1] do_one_initcall+0x154/0x340 [ 1.549559][ T1] do_initcall_level+0x150/0x1a0 [ 1.550109][ T1] do_initcalls+0x58/0xa0 [ 1.550592][ T1] do_basic_setup+0x24/0x40 [ 1.551093][ T1] kernel_init_freeable+0x94/0xe0 [ 1.551634][ T1] kernel_init+0x18/0x1a0 [ 1.552136][ T1] ret_from_fork+0x10/0x1c [ 1.553054][ T1] Code: 94000645 f9400bf6 f9400b68 f000d609 (29430e84) [ 1.553835][ T1] ---[ end trace 1842fee6e94ffa1f ]--- [ 1.554410][ T1] Kernel panic - not syncing: Oops: Fatal exception [ 1.555098][ T1] SMP: stopping secondary CPUs [ 1.556506][ T1] Kernel Offset: disabled [ 1.557903][ T1] CPU features: 0x0c040006,6a80a218 [ 1.560608][ T1] Memory Limit: none [ 1.561203][ T1] ---[ end Kernel panic - not syncing: Oops: Fatal exception ]---
/Applications/DevEco-Studio.app/Contents/tools/emulator/Emulator -hvd Huawei_2in1 -path /Users/m1/.Huawei/Emulator/deployed -t trace_34110_commandPipe -imageRoot /Users/m1/Library/Huawei/Sdk
模拟器好像是基于qemu修改的,但参数和普通qemu不一样:
scaleway.com 的这个mac m1云电脑从 update.dbankcdn.com 下载的速度太慢了,还看不到模拟器的启动命令
销量比例:
37:3:3
维修比例:
18:2:2
维修率比例:
18/37 : 2/3 : 2/3
0.486 : 0.667 : 0.667
归一化
0.73 : 1 : 1
所以联想损坏率更低,别人修1台,联想修0.73台
@5258,完全可以