June 17, 2021

关于proxintosh

由于B550这块板子对PCIE设备存在限速 盘阵在上面掉盘 所以换了个更新到最新agesa软件的X570 一切正常了,一个盘都不少

不过之前在proxmox上部署的catalina由于更新,显卡的帧缓存一直无法正常初始化内核

Backtrace (CPU 1), Frame : Return Address
0xffffff813e4f3740 : 0xffffff8014b1763d mach_kernel : _handle_debugger_trap + 0x49d
0xffffff813e4f3790 : 0xffffff8014c51b25 mach_kernel : _kdp_i386_trap + 0x155
0xffffff813e4f37d0 : 0xffffff8014c436ae mach_kernel : _kernel_trap + 0x4ee
0xffffff813e4f3820 : 0xffffff8014abda40 mach_kernel : _return_from_trap + 0xe0
0xffffff813e4f3840 : 0xffffff8014b16d07 mach_kernel : _DebuggerTrapWithState + 0x17
0xffffff813e4f3940 : 0xffffff8014b170f7 mach_kernel : _panic_trap_to_debugger + 0x227
0xffffff813e4f3990 : 0xffffff80152be82c mach_kernel : _panic + 0x54
0xffffff813e4f3a00 : 0xffffff8014c43a5a mach_kernel : _sync_iss_to_iks + 0x2aa
0xffffff813e4f3b80 : 0xffffff8014c43758 mach_kernel : _kernel_trap + 0x598
0xffffff813e4f3bd0 : 0xffffff8014abda40 mach_kernel : _return_from_trap + 0xe0
0xffffff813e4f3bf0 : 0xffffff7f98bcd275 com.apple.kext.AMDRadeonX6000Framebuffer : __ZN37AMDRadeonX6000_AmdDeviceMemoryManager12initWithInfoEPK13PciBARMappingP35AMDRadeonX6000_IAmdRadeonController + 0xd7
0xffffff813e4f3d00 : 0xffffff7f98be02ac com.apple.kext.AMDRadeonX6000Framebuffer : __ZN41AMDRadeonX6000_AmdDeviceMemoryManagerNavi25createDeviceMemoryManagerEPK13PciBARMappingP35AMDRadeonX6000_IAmdRadeonController + 0x60
0xffffff813e4f3d30 : 0xffffff7f98bc8a55 com.apple.kext.AMDRadeonX6000Framebuffer : __ZN40AMDRadeonX6000_AmdRadeonControllerNavi1428createControllerCoreServicesEv + 0x2d
0xffffff813e4f3d80 : 0xffffff7f98bf6306 com.apple.kext.AMDRadeonX6000Framebuffer : __ZN34AMDRadeonX6000_AmdRadeonController5startEP9IOService + 0x204
0xffffff813e4f3db0 : 0xffffff7f98bbfc72 com.apple.kext.AMDRadeonX6000Framebuffer : __ZN38AMDRadeonX6000_AmdRadeonControllerNavi5startEP9IOService + 0x40
0xffffff813e4f3de0 : 0xffffff8015204336 mach_kernel : __ZN9IOService14startCandidateEPS_ + 0xf6
0xffffff813e4f3e40 : 0xffffff8015203e71 mach_kernel : __ZN9IOService15probeCandidatesEP12OSOrderedSet + 0xad1
0xffffff813e4f3ef0 : 0xffffff801520320e mach_kernel : __ZN9IOService14doServiceMatchEj + 0x2de
0xffffff813e4f3f50 : 0xffffff80152059c6 mach_kernel : __ZN15_IOConfigThread4mainEPvi + 0x186
0xffffff813e4f3fa0 : 0xffffff8014abd13e mach_kernel : _call_continuation + 0x2e
      Kernel Extensions in backtrace:
         com.apple.kext.AMDRadeonX6000Framebuffer(3.1)[8F60256D-9E57-3355-8EDB-0D3602692FA5]@0xffffff7f98bb7000->0xffffff7f98fecfff
            dependency: com.apple.iokit.IOACPIFamily(1.4)[0BC116A3-534A-3990-99CB-09DB34A5EFAA]@0xffffff7f95509000
            dependency: com.apple.iokit.IOPCIFamily(2.9)[B4389948-0918-363E-8E70-0FBC89B384CA]@0xffffff7f95512000
            dependency: com.apple.iokit.IOGraphicsFamily(576.1)[5FD30AFD-9512-3600-AD94-7048F96F8951]@0xffffff7f9880e000
            dependency: com.apple.AppleGraphicsDeviceControl(5.2.7)[C485E8F6-6C46-3E79-B04F-0D8A354DD2C0]@0xffffff7f9885f000

发到电报群里问了问有人冷回是否是被SAM影响 我一愣,直通显卡在KVM环境也受SAM 影响?reddit上有人贴出kvm的代码

size = vfio_ext_cap_max_size(config, next);
    /* Use emulated next pointer to allow dropping extended caps */
    pci_long_test_and_set_mask(vdev->emulated_config_bits + next,
                               PCI_EXT_CAP_NEXT_MASK);
    switch (cap_id) {
    case 0: /* kernel masked capability */
    case PCI_EXT_CAP_ID_SRIOV: /* Read-only VF BARs confuse OVMF */
    case PCI_EXT_CAP_ID_ARI: /* XXX Needs next function virtualization */
    case PCI_EXT_CAP_ID_REBAR: /* Can't expose read-only */
        trace_vfio_add_ext_cap_dropped(vdev->vbasedev.name, cap_id, next);
        break;
    default:
        pcie_add_capability(pdev, cap_id, cap_ver, next, size);
    }

看上去应该不影响虚拟机才对,但是实际上我去BIOS关掉 SAM相关的Above4Gdecoding和ResizeableBar 这2点与Opencore dortania的建议是截然不同的。重启proxintosh发现:果然没有再崩溃了。看起来苹果内核对于映射直通的GPU仍然是不支持这种新特性的,低端显卡就不要介意这么多了 能启动加速就行。

另外,proxmox直通AMDGPU的时候有时加上了amdgpu到/etc/modprobe/blacklist.conf里的时候系统仍然傻呵呵地加载着amdgpu这个kmod,所以手动modinfo找到这个kmod,然后从改目录移除到备份目录下 下一次启动就不会加载它了 当启动虚拟机的时候vfio-pci会自动挂到kernel变成kernel drive in use : vfio-pci

同时由于Mac系统非常严格地要求显卡必须支持uefi启动 所以从某些厂商的AMD卡直接dump出来的vbios.rom是不符合MacOS的要求的 所以opencore回反复重启也不给出错提示 那么只需要从techpowerup.com的VBIOS DB里下载到你的卡对应的型号的VBIOS通过romfile=/usr/share/kvm/vbios.download.rom 来侧加载就能让opencore顺利被骗进入MacOS

另外使用Cascade-Server模拟的Ryzen 3000系列可以直接用hostCPU无需伪装或者在Opencore里打CPU补丁 也是个进步,跑完Geekbench发现原生用起来性能就是流畅啊,未来长期就可以跑4.4G了

记录下来 之后再去了解为啥。