
手里这台AMD Ryzen AI Max 395迷你主机我拿来当家里的常驻服务器已经有段时间了。16核心32线程的Zen 5、128GB LPDDR5X统一内存、40CU的Radeon 8060S核显外加50 TOPS的XDNA 2 NPU这套硬件用来跑虚拟化是真的舒服。系统我选的是Ubuntu Server 24.04 LTS然后在里面跑Windows 10虚拟机用来处理网银、Office全家桶和那些只有Windows才有的行业软件。这篇文章就是把整个安装过程、踩坑记录和调优思路完整写出来给大家留个参考。为什么装虚拟机而不是直接搞双系统原因很直接我大部分时间在Linux环境里干活但偶尔必须切到Windows环境下跑一些小软件。双系统来回重启太折腾远程访问也不方便虚拟机不但可以随时开随时关还能做快照备份系统坏了十分钟就能恢复。对刚入手Strix Halo系列主机、又想在Ubuntu下保留一个Windows环境的朋友这篇记录的参考价值应该不小。1. 为什么这台机器天生适合跑Win10虚拟机1.1 Ryzen AI Max 395的虚拟化家底有多厚AMD Ryzen AI Max 395属于Strix Halo平台严格说它不算传统意义上的CPU而是把CPU、GPU、NPU全部封装在一起的巨型APU。从虚拟化角度来说它有四个非常关键的点。第一是核心数。16核32线程的Zen 5哪怕分出8核给虚拟机宿主机还剩8核16线程干活两边互不挤兑。x86虚拟化最怕的就是CPU资源不足核心多了以后你甚至可以同时跑两三个虚拟机不卡顿。第二是统一内存架构。Strix Halo的内存是焊在封装旁边的LPDDR5XCPU和GPU共享同一片物理内存没有传统独显那种“显存隔离”问题。128GB容量意味着宿主机留32GB虚拟机还能分到96GBWindows 10给32GB都算非常宽裕剩下的留给宿主跑服务、缓存、快照都没压力。第三是40CU的Radeon 8060S核显。虽然核显直通给Windows虚拟机比较麻烦但配合SPICE协议做2D桌面加速、视频解码非常流畅。日常办公、看视频、跑网页应用完全够用不需要额外插独立显卡。第四是IOMMU和AMD-V虚拟化扩展。AMD平台的SVMSecure Virtual Machine虚拟化支持很成熟IOMMU分组也比较规整后续想直通PCIe设备、USB控制器都有底子。这一套组合拳打下来Ryzen AI Max 395几乎是目前x86迷你主机里最适合当虚拟化宿主的平台。比我之前用的老款Ryzen小主机强太多核心多了两倍内存带宽也从双通道DDR4提升到了LPDDR5X 256-bit虚拟机里的CPU密集型任务体感好了不少。1.2 宿主机选Ubuntu Server 24.04而不是桌面版有人问我为什么不用带桌面的Ubuntu Desktop非要装Server版。其实原因很朴素这台机器装好以后根本不会接显示器我全程通过SSH和Web管理面板操作桌面环境装上去纯属浪费内存和磁盘。Ubuntu Server 24.04 LTS用的是Linux 6.8内核KVM/QEMU虚拟化栈在这个内核版本上非常成熟virtio驱动、IOMMU、cgroup v2这些都开箱即用。加上24.04是LTS版本有五年安全更新支持放在家里7x24小时跑服务很让人放心。Server版安装时还能顺手把OpenSSH Server勾上装完就能远程登录。对于虚拟机管理来说命令行才是主战场virt-install、virsh这些工具全是CLI图形界面反而多余。1.3 KVM/QEMU 与 VirtualBox、VMware 的取舍在Linux宿主机上跑Windows虚拟机主流方案就三个KVM/QEMU、VirtualBox、VMware Workstation Player。三者的差异我列个表方便对比。对比项KVM/QEMU libvirtVirtualBoxVMware Workstation性能接近原生virtio磁盘/网卡很猛中等偶尔有CPU虚拟化开销较好但对Linux 6.8内核适配有点慢命令行支持非常强virt-install/virsh全场景覆盖一般主要靠GUI一般CLI工具没那么好用显卡直通支持PCIe直通流程成熟支持度较弱支持度一般嵌套虚拟化支持好host-passthrough直接暴露SVM支持有限支持但依赖特定版本开源免费完全开源开源免费版限制较多个人免费版有功能裁剪远程管理virt-manager/Cockpit/WebVirtMgr都行弱弱结论没有悬念直接用KVM/QEMU。我选它的核心原因有两个一是virtio半虚拟化驱动带来的性能收益太明显磁盘和网卡的吞吐量比模拟设备高出一大截二是整个栈完全开源出了问题能查的资料最多遇到报错也方便看日志。2. 装完系统先别急把虚拟化地基打牢2.1 确认AMD SVM虚拟化已经开启在安装KVM之前先确认CPU虚拟化扩展有没有打开。AMD平台叫SVMIntel平台叫VT-x。在Ubuntu Server里执行下面这条命令egrep -c (vmx|svm) /proc/cpuinfo如果输出结果大于0说明虚拟化扩展已经开启。如果输出是0就要进BIOS找SVM Mode、Virtualization或者AMD-V相关的选项把它改成Enabled。不同主板的叫法不太一样有的叫“SVM Support”有的叫“Virtualization Technology”本质上是一个东西。另外再把IOMMU也顺手打开。很多主板BIOS里叫IOMMU或AMD CBS里如果要用PCIe直通这个必须开。在GRUB配置里确保有GRUB_CMDLINE_LINUX_DEFAULTquiet splash iommupt修改后执行update-grub再重启。iommupt模式可以让直通设备的IOMMU翻译开销小一些宿主系统自己也少一些DMA重映射的延迟。如果你只是装个虚拟机跑普通应用不打算直通显卡或网卡IOMMU开不开影响不大但既然以后可能要用建议一步到位。2.2 安装KVM/QEMU/libvirt全套组件Ubuntu Server 24.04安装KVM栈非常省事一条命令就能装齐apt update apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager ovmf逐个解释一下这些包是干嘛的。qemu-kvm是QEMU配合KVM加速的核心模拟器libvirt-daemon-system负责提供libvirtd守护进程和默认网络配置libvirt-clients提供virsh命令行工具bridge-utils用来管理网桥virtinst提供virt-install命令这是命令行创建虚拟机的核心工具virt-manager是图形化管理界面服务器端不带桌面也可以装后面通过SSH X11转发或单独在另一台机器上用客户端连接ovmf是UEFI固件给虚拟机用UEFI引导时就靠它。装完以后启用并启动libvirtd服务systemctl enable --now libvirtd systemctl status libvirtd然后把当前用户加进libvirt和kvm用户组否则普通用户操作virsh会遇到权限问题usermod -aG libvirt $USER usermod -aG kvm $USER newgrp libvirt验证一下libvirt是否正常工作virsh list --all如果能列出空的虚拟机列表说明运行正常。这里我踩过一个坑如果之前装过虚拟化平台或系统自带了一些冲突服务libvirtd可能起不来。查看日志用journalctl -u libvirtd最常见的问题是/var/run/libvirt目录权限不对或者默认的virbr0网桥跟别的服务冲突。2.3 网络方案我为什么直接上BridgeKVM装好后默认会创建一个NAT网桥virbr0虚拟机通过这个网桥共享宿主机的IP出网。好处是零配置虚拟机只要选择默认网络就能上网缺点是外部设备没法直接访问虚拟机每次想连Windows的远程桌面都要做端口转发麻烦。我的做法是一开始就建Bridge桥接网络让Windows虚拟机在局域网里拿到一个独立IP。这样我在任何一台电脑上都能直接远程桌面连过去虚拟机就跟局域网里的普通电脑一样。Ubuntu Server 24.04默认用Netplan管理网络。假设宿主机物理网卡是enp3s0插在路由器上IP是192.168.1.10/24配置网桥如下network: version: 2 ethernets: enp3s0: dhcp4: no bridges: br0: interfaces: [enp3s0] addresses: [192.168.1.10/24] routes: - to: default via: 192.168.1.1 nameservers: addresses: [192.168.1.1, 223.5.5.5]保存后执行netplan apply。这里有几个容易踩坑的地方。第一写网桥配置时注意不要同时给物理网卡配IPIP要配在br0上物理网卡只作为桥接成员。第二如果你是通过SSH远程改网络配置改完先等几秒再确认SSH没断断了说明配置有问题要通过物理终端改回来。第三如果宿主机有多个网口可以把虚拟机流量绑到单独网口上避免和宿主服务争带宽。2.4 存储规划给虚机镜像单独安排一块盘存储这块我特别想多说几句。很多人装完KVM图省事直接把虚拟机镜像放在系统盘上后面很容易被磁盘IO拖垮。我这边宿主机用的是NVMe系统盘另外挂了一块SATA SSD专门放虚拟机镜像。如果你有两块盘以上建议给虚拟机镜像规划独立分区或独立盘。系统盘的IO要应付宿主机自身服务再叠加虚拟机的频繁读写延迟会明显上升。如果只有一块盘至少把虚拟机镜像放在单独的分区别和系统根目录挤在一起。热门搜索里提到了soft raid1如果你有多块机械盘或SSD可以用mdadm做一层软RAID1给虚拟机镜像用冗余性会好很多。不过LPDDR5X统一内存的机器通常配的是NVMe单盘性能已经够强RAID更多是为了防数据丢失不是提升性能。我的建议是单NVMe就老老实实单盘重要数据靠qemu-img的快照和备份解决别为了RAID而RAID。虚拟机磁盘格式我选qcow2。它支持精简分配创建120GB的磁盘文件开头只有几百KB实际用多少占多少还支持快照安装完Windows打好补丁后做个快照以后系统坏了能秒回滚。如果特别在意IO性能可以用raw格式预分配性能略好但放弃快照和精简看个人取舍。mkdir -p /var/lib/libvirt/images qemu-img create -f qcow2 /var/lib/libvirt/images/win10.qcow2 120G3. Windows 10虚拟机安装全程实录3.1 准备Windows 10镜像与VirtIO驱动安装Windows 10虚拟机两样东西最关键Windows 10安装镜像和VirtIO驱动。系统的ISO建议直接从微软官方渠道下载原版镜像尽量不要用网上第三方精简版。精简版确实省资源但很难说里面动过什么虚拟机上跑网银、办公软件稳定性优先系统越纯净越好。VirtIO驱动是KVM虚拟机的灵魂。Windows默认不认virtio虚拟磁盘和virtio虚拟网卡没有它Windows安装程序连硬盘都识别不到。virtio-win驱动镜像可以从Fedora的官方镜像站下载文件名类似virtio-win-0.1.xxx.iso几百MB里面包含了磁盘、网卡、气球、串口等全套Windows驱动。准备文件列表如下Win10_22H2_Chinese_x64.iso官方原版镜像virtio-win-0.1.240.isoVirtIO驱动镜像版本号按最新即可win10.qcow2刚创建好的120GB虚拟磁盘3.2 用virt-install命令行创建虚拟机virt-install是命令行创建虚拟机的核心工具参数多但逻辑清晰。我实际用的命令如下virt-install \ --name win10 \ --memory 32768 \ --vcpus 8 \ --cpu host-passthrough \ --os-variant windows10 \ --disk path/var/lib/libvirt/images/win10.qcow2,formatqcow2,busvirtio \ --cdrom /var/lib/libvirt/images/Win10_22H2_Chinese_x64.iso \ --disk path/var/lib/libvirt/images/virtio-win-0.1.240.iso,devicecdrom \ --network bridgebr0,modelvirtio \ --graphics spice \ --video qxl \ --boot cdrom,hd逐个参数说。--memory 32768是给Windows 10分配32GB内存。对于这个128GB内存的宿主机32GB属于“舒服”档位能同时跑IDE、浏览器、办公套件还有富余。如果虚拟机内存占用没这么大可以之后调整。--vcpus 8分配8个虚拟CPU。16核32线程的物理机给8个vCPU很合理既保证虚拟机性能又不会让宿主机没有余力处理其他任务。vCPU数最好不超过物理线程数的一半留出余地过了某个点反而让调度器产生额外开销。--cpu host-passthrough让虚拟机直接暴露宿主CPU的所有特性不用QEMU做指令集翻译。Windows里的任务管理器会直接认出AMD Ryzen AI Max 395而不是一个通用的QEMU CPU型号。性能损失最小兼容性反而最好前提是宿主机CPU足够新。这个参数强烈推荐。--os-variant windows10作用是告诉libvirt和QEMU去适配Windows 10的特性包括ACPI表、键盘鼠标、时间同步等。可用osinfo-query os来查看支持的列表。--disk ... busvirtio第一块磁盘是刚才创建的系统盘用virtio控制器后面再用一个devicecdrom参数挂载VirtIO驱动ISO。这里用了两次--disk第一次挂虚拟磁盘第二次挂驱动光盘注意顺序不能乱Windows安装时要在驱动光盘里找viostor驱动。--graphics spice和--video qxlSPICE是KVM下体验最好的显示协议配合QXL显卡能给Windows提供流畅的2D桌面体验。直接用VNC也行但SPICE的鼠标响应和画面流畅度更好。--boot cdrom,hd表示优先从光驱启动安装装完再改成硬盘启动。创建后可以用virt-install自动连带启动虚拟机。如果没有图形环境可以用virt-viewer或virt-manager连接查看屏幕。远程环境里我一般用SSH X11转发把virt-manager窗口拉出来操作。3.3 安装Windows时手动加载VirtIO驱动虚拟机启动后Windows安装程序会正常进入但到了选择磁盘那一步界面上看不到任何磁盘原因是Windows不认virtio-blk控制器。解决办法是在安装界面点“加载驱动程序”然后浏览VirtIO驱动ISO。驱动目录结构大致是amd64/w10/viostor针对64位Windows 10选这个目录确认即可。加载后磁盘就出现了正常分区、格式化、安装。另外提醒一下引导方式。我的虚拟机用OVMF UEFI固件启动所以磁盘分区建议用GPT。如果你用默认的SeaBIOS那是模拟传统BIOS磁盘要用MBR分区。GPT和UEFI现在是主流方案兼容性也不差推荐照着这个来。3.4 进入系统后的驱动与基础优化Windows 10装完第一次进桌面设备管理器里会有一堆带感叹号的设备。这时候把VirtIO驱动ISO插到虚拟光驱里如果虚拟光驱已经断开可以在virt-manager里重新挂载运行里面的virtio-win-guest-tools.exe它会一次性把网卡、磁盘、内存气球、串口、准虚拟化时钟等所有驱动都装上。装完驱动的顺序很重要记得先装磁盘和网卡驱动再做系统优化。网络通了以后Windows会自动更新补丁这个过程比较长耐心等就好。关于系统优化很多人喜欢把网上流传的“关闭安全中心、关闭Defender、关闭更新”全套照做我强烈不建议。在虚拟机里跑日常应用安全中心的资源占用其实很低关掉它带来的性能提升微乎其微但失去的是整体安全性。我的做法是关闭休眠文件、关闭系统还原、把虚拟内存固定到C盘、关闭索引服务这些对性能体验影响明显又不会破坏安全性。安全中心和自动更新保持默认开启。远程桌面也要顺手打开之后日常使用就靠RDP连进去SPICE控制台只是应急用。打开“设置-系统-远程桌面”启用后从局域网任意电脑用mstsc连接虚拟机的IP即可。4. 性能调优与排坑实录4.1 把CPU和内存的账算清楚虚拟机装好能跑跟“跑得爽”是两回事。要把Ryzen AI Max 395这颗U的算力真正榨出来CPU和内存需要仔细调。CPU这块最重要的是平衡vCPU数量和宿主余量。我一开始图省事直接分了12个vCPU结果Windows里的CPUZ跑分多核不错但宿主机的其他服务响应明显变慢。后来调回8个vCPU虚拟机单核性能和宿主几乎一致多核也够用宿主机总算恢复了从容。内存方面建议启用内存气球balloon。virtio驱动里自带的Balloon服务可以让宿主按需回收虚拟机未使用的内存虚拟机空闲时宿主能把内存拿去做缓存虚拟机需要时再还回去。Win10里将virtio驱动里的balloon服务设为自动启动即可。还有一个很多人忽略的点不要给宿主机和虚拟机同时开启swap到同一块盘上。宿主机如果开了swap虚拟机镜像又在同一块盘上内存抖动会造成双重IO压力。我这个机器内存128GB宿主swap基本用不上索性把swap降得很低虚拟机里直接禁用页面文件整体体验反而更稳定。4.2 磁盘、网卡与PCIe设备的细节优化磁盘这块virtio-blk和virtio-scsi都可以用。我最终选择virtio-scsi因为它的队列机制更成熟支持多队列高IO场景下延迟更平稳。如果是在virt-install里没指定bus默认是virtio-blk后面可以手动编辑虚拟机XML改掉。网卡走virtio-net多队列也有收益。编辑虚拟机配置给interface添加驱动队列参数interface typebridge source bridgebr0/ model typevirtio/ driver namevhost queues4/ /interfacequeues数量一般不超过4个多队列能利用多核处理网络包对虚拟机的千兆/万兆吞吐有明显帮助。USB设备直通我提一下。如果你要在Win10虚拟机里用USB转串口比如调试CP210x芯片的设备直接在virt-manager里给虚拟机添加USB Host Device把宿主上插的那个USB设备直通过去Windows里就能直接识别。注意直通前宿主不要占用该设备比如ModemManager可能会抢占串口需要把相关服务屏蔽掉。4.3 嵌套虚拟化Win10里再跑安卓模拟器/WSL2这个属于进阶玩法但既然CPU支持就必须提一下。因为KVM默认的CPU模型可能会把SVM标志隐藏掉导致Windows虚拟机里看不到“虚拟机监控程序”功能安卓模拟器或WSL2会启动失败。解决办法是确保虚拟机使用host-passthrough CPU模式这个模式下SVM标志通常会自动暴露。可以在Windows里用系统信息查看“固件中已启用虚拟化”是否为“是”如果是说明嵌套虚拟化已经可用。实测下来在Ryzen AI Max 395的Win10虚拟机里跑WSL2和Android模拟器都是可行的。不过性能肯定有折损毕竟两层虚拟化叠加CPU指令翻译开销躲不掉。作为偶尔调试用没问题天天在虚拟机里跑Android模拟器还是太累了。4.4 核显直通为什么难搞3D需求怎么办这是很多人想搞但最容易翻车的环节。Ryzen AI Max 395的Radeon 8060S是核显共享系统内存AMD并没有提供类似Intel GVT-g那样的核显虚拟化拆分方案所以靠内置核显给Windows虚拟机提供GPU直通基本行不通。那有3D加速需求怎么办我整理了三档方案。第一档是日常办公和视频场景用SPICEQXL完全够了Windows桌面体验流畅视频播放靠CPU软解也没问题。第二档是对3D渲染有要求但不太高可以给虚拟机加一块真正的独立显卡做直通比如RX 6600或更低端的RX 6400把显卡通过vfio-pci隔离后直通给Windows虚拟机。这套流程在AMD平台上很成熟需要额外插卡也牺牲宿主上这块显卡的使用权。第三档是极端性能需求那不该用虚拟机直接物理机跑Windows更合理。所以如果有重度GPU需求别在核显虚拟化上死磕要么上独显直通要么直接物理切换系统。这也是Strix Halo这种APU在虚拟化场景下为数不多的短板。4.5 常见问题速查表把安装和调优过程中遇到的问题整理成一张速查表方便后面参考。问题现象原因分析解决方法Windows安装时看不到磁盘没加载VirtIO磁盘驱动安装界面手动加载amd64/w10/viostor驱动虚拟机关机后无法启动报找不到启动设备引导模式与分区表不匹配UEFIGPT或BIOSMBR不要混用virt-install报错说不认识windows10缺libosinfo数据安装libosinfo-bin虚拟机里网络丢包严重bridge配置错误或网卡队列没开启检查br0绑定给virtio网卡开多队列创建虚拟机时提示权限不足当前用户不在libvirt组usermod -aG libvirt, 重新登录SPICE连接黑屏QXL驱动没装或被系统更新覆盖重新安装virtio-win-guest-toolsWin10里虚拟机监控程序功能不可用CPU标志没透传SVM使用host-passthrough模式时间经常走不准缺少准虚拟化时钟驱动安装virtio驱动后重启虚拟机磁盘IO低但宿主CPU不高缓存模式不适合用virtio-scsi缓存模式配合none/unsafe按需选还有一个不是问题但值得提醒的点不要妄想在KVM虚拟机里再装VMware Workstation来跑虚拟机虽然技术上行得通但三层虚拟化的CPU开销和内存压力会让体验变得非常差。嵌套虚拟化这种事干一次验证功能就够了日常用还是老老实实单层。最后再分享一个我踩过的坑。第一次给Windows 10做快照后没有及时做合并blockcommit结果磁盘文件越来越大宿主机磁盘空间告急。后来养成习惯快照用完就删需要保留的状态直接整盘备份qcow2文件。这个机器虽然内存大、核心多但存储空间还是要精打细算虚拟机镜像、快照、备份之间要有清晰规划。这台Ryzen AI Max 395主机现在稳定跑了两个多月Windows 10虚拟机平时开着远程桌面需要处理网银、Office文档或者跑行业软件时直接连过去体验和一台物理Windows电脑几乎没有差别。Ubuntu Server 24.04的宿主机则继续承担文件服务、开发环境、容器等一摊子活儿两边各司其职互不干扰。这套方案对于想在Linux环境下保留Windows生产力环境的用户来说确实值得一试。