English日本語

文档 · 1.0

配置:设备直通与硬件

这一章讲 配置 菜单里的三个页面:PCI 直通(把整块设备交给一台虚拟机)、SR-IOV(把一个网口或核显切成几个虚拟口分给几台虚拟机)和 硬件(这台机器由什么组成、各部件的健康)。存储和网络的页面见存储、网络。

注意:改直通设置要有主机写权限(管理员令牌);只读账户只能看。

1. 直通是怎么回事

  • PCI 直通:整块设备(NVMe、SATA/SAS 控制器、网口、显卡、USB 控制器……)交给一台虚拟机,虚拟机里用设备的原生驱动,主机不再碰它。适合 NAS(控制器带着盘一起给)、需要原生性能的显卡和网卡。
  • SR-IOV:支持它的网口(和部分核显)能切出若干个 VF(虚拟口),每个 VF 分给一台虚拟机,物理口(PF)仍归主机。
  • keelOS 用设备本身(厂商号、设备号、序列号、功能号)认设备,不按插槽认:换了插槽也能找到,不会把系统盘交出去。主机正在用的设备(启动盘所在的控制器、存储池的盘、管理口……)不能保留。

一个设备在同一时刻只能被一台运行中的虚拟机使用。同一块设备可以写进几台虚拟机的设置里,但先启动的那台拿到,其他的在它运行期间启动不了。

2. PCI 直通页

打开 配置 → PCI 直通。

页面最上面是 IOMMU(VT-d) 的状态(已开启、未开启,或"还没有直通设备用过")。没有 IOMMU 就不能直通:到 BIOS 里打开 VT-d(AMD 是 IOMMU),见硬件要求。接着是两行:这次开机保留的 和 下次开机/reload 保留的;两者不同时提示"keel.json 改过:下次 root reload 或开机时生效"。

设备表每个 PCI 功能一行,列有 地址、设备、驱动 / 状态、主机在用、guest(哪台虚拟机在用或配置了它)、隔离。默认隐藏芯片组和系统设备、VF,勾 显示芯片组和系统设备、显示 VF 才列出来。

驱动 / 状态 的含义:

  • 主机:驱动名:主机的驱动在用,可以保留。主机不认识的网卡和存储控制器写 不支持(主机没有驱动),可直通给虚拟机:主机用不了,但可以整块给虚拟机。
  • 已保留(keelppt,开机起):开机时就留给了直通,主机的驱动碰不到。
  • 直通(ppt):现在已经交给直通。
  • 已保留:下次开机或 reload 生效、已还给主机:下次开机或 reload 生效:设置已保存,还没生效。

主机在用 一栏说明为什么某个设备不能保留,例如主机地址、交换机的上行口、网桥成员、启动分区、存储池、开着 VF、主机屏幕。

隔离 一栏提醒:同一张卡的几个口,或同一个没有 ACS 的 PCIe 桥后面的设备,在 IOMMU 上没有互相隔离,按 Linux VFIO 的规则它们是一组:应该一起给同一台虚拟机,或者都留给主机。keel 只提醒,不强制。

2.1 保留一个设备

  1. 在设备那一行点 保留。
  2. 对话框 保留 … 给直通 里填 名字(虚拟机的设置里用它引用这个设备,默认按设备起好)和 备注。
  3. 立即生效 勾上:现在就把设备交给直通,主机的驱动马上放手,所以它后面的盘必须都没被打开(keel 会检查)。不勾:下次 root reload 或开机时接管。
  4. 保存。

设置写进 keel.json 和启动分区;keelOS 的 root reload(升级、重启底层)和固件重启都会按它接管。

注意:把主机屏幕所在的显卡(核显)交给虚拟机以后,主机自己的显示器不再显示主机的画面,直到整机重启;网页和 ssh 照常。核显的情况见 §5。

2.2 还给主机

点 还给主机,对话框 把 … 还给主机。如果有虚拟机的设置里写着这个设备,要先到虚拟机的编辑页去掉它。勾 立即生效 时,主机的驱动马上重新接手:NVMe、AHCI、USB 控制器这几类 keel 能直接指定驱动,别的类别要等下次开机或 reload。

2.3 把设备加到虚拟机

  1. 点 加到 guest…,选 加到哪个 guest?。
  2. 页面跳到那台虚拟机的编辑页,设备已经加在 设备 里的 PCI 设备 一栏里;保存后在虚拟机下次冷启动时生效。

也可以直接在虚拟机的编辑页 设备 → PCI 设备 里选一个已保留的设备点 添加;还没有保留的设备时那里写"还没有留给直通的设备",链接回本页。

2.4 直通和主机升级、重启

主机做 root reload(升级、重启 keelOS 的底层)时:整块设备直通的虚拟机被挂起再恢复,里面的程序不重启;用 VF 的虚拟机默认改为关机再启动(每台可以在 自定义 里改 主机 reload 时),见虚拟机 §4。NAS 虚拟机在 reload 期间对外的共享会停 20 多秒,客户端靠重传撑过去。

3. SR-IOV 页

打开 配置 → SR-IOV。主机的驱动管物理口(PF),keel 建出虚拟口(VF)直通给虚拟机,每个 VF 的 MAC 地址固定。没有支持 SR-IOV 的设备时页面写"这台主机没有支持 SR-IOV 的设备"。

每个物理口一行:网口、设备、链路、用途(主机在用它做什么)和 VF:已建 N 个 / 最多 M 个,点 设置 VF… 改个数;展开能看到每个 VF 的 MAC、VLAN、guest 和 网络。

设置 VF…(对话框 {口} 的 VF 个数):

  1. 填个数。0 = 删除这个口的所有 VF;有虚拟机的设置写着这些 VF 时不能删。
  2. 保存。keel 马上用 iovctl 重建这个口的 VF。要没有虚拟机正在用这个口的 VF。
  3. 如果主机自己也在用这个口(它的地址、一个交换机的上行口),重建会让主机在这个口上断网约 30 秒,keel 会先问你。端口链路重新协商时,交换机上的 STP 也可能让网络约 30 秒不通。
  4. 某些口出现过 "Failed to add VF",运行中改 VF 数可能让主机 panic:这时新个数只保存,要经固件重启主机才生效,keel 会问是否现在重启(正在跑的虚拟机先关机,重启后自动启动的会再起来)。

ix 口(X5xx/X7xx 系列) 的 VF 数受队列限制:不重启最多 N 个,点 改设置(重启后生效) 把主机所有 ix 口的 PF 队列从 4 个减到 2 个,重启后可以多建一些 VF;取消设置 恢复。

I350、82576 这类网卡由 keelOS 自带的驱动接管才能建 VF;页面提示"驱动不能建 VF"时,说明这个口现在不在这个驱动下。

虚拟机怎么用 VF:在虚拟机的网卡里选接法 SR-IOV VF,或选 自动(虚拟机在 reload 时是关机的、而且网络上有空闲 VF 时用 VF),见虚拟机 §2.4;也可以在 PCI 设备 里指定某个 VF 或 "auto"。整块网口直通则选 整口直通,那个口主机就不能再用。

4. 硬件页

打开 配置 → 硬件。这一页大多只读,列出这台机器的构成。数据读一次缓存 30 秒;右上角 复制为文本 把整页复制成文字,报告问题时很有用。页面最上面如果有 需要注意 的内容(磁盘 SMART 故障、传感器超出范围、CMOS 电池没电、NVMe 严重警告、内存错误),先列在这里。

从上到下:

  • 整机:厂商、型号、序列号、主板、BIOS、UUID。
  • 处理器:每个插槽的型号、核数和线程数、最高频率。
  • 内存:已用插槽、每根内存条的容量、类型、速率、是否 ECC,以及它的内存错误:可纠正 的错误说明 ECC 修好了、偶尔出现是正常的,一直有就是这条在坏;不可纠正 的错误要换内存条。有错误记录时可以展开看最新 50 条。
  • 虚拟化:CPU 厂商、虚拟化扩展、IOMMU、Hypervisor 层。如果主机没有运行 keelOS 自己的 hypervisor 层("原生模式"),虚拟机仍能跑,但主机重启或升级时所有虚拟机都要先关机,没有内存池和零页回收;原因(例如固件里 VT-x 或 AMD-V 关着)写在这一栏,到 BIOS 里打开后重启。
  • 磁盘:每块盘的型号、序列号、健康(SMART 判定)、通电 时间、寿命已用、重映射/待映射 扇区和 介质错误;点一块盘看它自己报告的全部信息。NVMe 盘按控制器列出,下面缩进的是它的命名空间。
  • 体检:直通、装系统或放数据之前检查一块盘:盘自己的短自检(几分钟)和读取测速(约 1 分钟,只读,不改盘上的数据),结论分 正常、注意、有问题,历史结果留着。盘正在被使用时,测试期间虚拟机读写会变慢。
  • 格式化…:NVMe 盘可以改 LBA 格式(512 字节或 4Kn 扇区),盘上的东西全部清除;启动盘和正在使用的盘不能格式化。支持命名空间管理的控制器还可以在这里新建和删除命名空间。
  • 网口:每个口的 MAC、连接状态、速率、芯片。
  • 温度:主机自己读的传感器(CPU、ACPI 热区、PCH),离降频点不到 15 °C 时提示。曲线在概览的 监控 子页。
  • 内存带宽:每个内存通道现在的读写量(内存控制器的性能计数器;别的工具占着的通道 keel 不碰)。
  • Intel AMT(vPro):支持的机器上,显示 AMT 的状态、版本、地址和远程功能。1.0 里 keel 只读 AMT 的状态,不能一键开启:要开,需要在开机时按 Ctrl-P 进 MEBx 手动配置,页面的"怎么开"一栏有步骤。AMT 能在系统之外控制整台机器:密码一定要强,不要把 AMT 的端口映射到外网。
  • BMC(IPMI):有 BMC 的机器上显示它的管理地址、固件、功耗、传感器和 BMC 事件日志(最近 20 条)。在这里可以:
  • 编辑:改 BMC 的网络(固定地址或 DHCP、子网掩码、网关、VLAN、IPv6)、断电恢复后 的行为(总是开机、恢复断电前的状态、保持关机)和 风扇模式(目前只支持 Supermicro,列出的是这块 BMC 自己提供的模式)。改地址或 VLAN 后 BMC 自己的网页可能有几秒到几十秒打不开;不会把你锁在外面,因为 keel 在主机里直接和 BMC 通信,不需要它的密码。
  • 用户…:管理 BMC 的用户,忘了 BMC 密码就在这里设新的(只有管理员令牌 * 能改)。
  • 风扇下限…:换了慢速、安静的风扇以后,把低于下限就被 BMC 判成"坏了"并拉到全速的下限调低。
  • 接手检查…:检查前任留下的 BMC 设置:启用的用户、网络、SNMP community、报警目的地、事件日志。
  • UID 灯:点亮或熄灭机箱上的蓝色识别灯,在机房里找到这台机器。
  • 重启 BMC…:BMC 在主机里不应答时用;重启期间(1–2 分钟)BMC 的网页、远程控制台和风扇调速暂停,主机和虚拟机不受影响。

没有 BMC、没有 AMT 的机器,相应的部分不显示。直通给虚拟机的磁盘和网口由虚拟机自己管,不在这里列出。

5. 核显

把整块核显直通给一台虚拟机:在 PCI 直通 页保留核显(通常是 00:02.0),再加到虚拟机上。Windows 和 Linux 的虚拟机能用核显做渲染和硬件转码,虚拟机里用 Intel 的原生驱动;核显接着显示器时,显示器显示的是那台虚拟机的画面,主机自己的画面不再显示(网页和 ssh 照常)。

  • 12 代以后的 Intel 核显(UHD 770/730、Iris Xe 等)上,Linux 虚拟机需要在内核参数里加 xe.enable_dsb=0(用 i915 驱动时是 i915.enable_dsb=0),否则每次换画面都要等 10 秒超时。
  • 直通了核显的虚拟机,网页的图形控制台只显示核显的画面,每秒约 10 帧;要流畅请用 RDP,见控制台与远程桌面。
  • SeaBIOS(老系统,例如 Windows 7)的虚拟机加直通设备在部分主机上起不来;核显直通请用 UEFI 虚拟机。

把核显切成 VF 分给几台虚拟机(12 代及以后的核显,最多 7 个 VF):核显的 PF 驱动在 keelOS 的显示虚拟机里运行。先在 PCI 直通 页把核显保留给直通,经固件重启主机,然后到 SR-IOV 页给核显设 VF 个数(页面上这一行写着"PF 驱动 = 显示虚拟机(xe):改 VF 数会重启它,核显复位")。虚拟机拿到的 VF 没有显示输出:Windows 里是一块"没接显示器"的 Intel 显卡,用来渲染、转码,画面经 RDP 看(guest 里运行 keelagent)。这一项只在少数机型上测过(12 代 UHD 770),使用前请先在不重要的虚拟机上试。

6. 1.0 还不支持什么

  • 直通的设备不能热插拔:加减设备要在虚拟机下次冷启动时才生效。
  • SR-IOV 只做网口和核显;其他种类的 VF 不管。
  • 老系统(Windows XP、Windows 7)用 SeaBIOS,和直通设备同用在部分主机上起不来。
  • AMT 只读,不能在网页上开启;BMC 的风扇模式只认 Supermicro。
  • 嵌套虚拟化的虚拟机不能同时直通 PCI 设备,见嵌套虚拟化。