已知问题

本页面介绍了您在使用机密虚拟机时可能会遇到的已知问题,并尽可能介绍了解决方案。 如需了解可能影响所有 Compute Engine 虚拟机的一般问题,请参阅 Compute Engine 已知问题Compute Engine 问题排查。您可以通过支持渠道获得其他解决方法。

已知问题和限制

本部分介绍了您在使用机密虚拟机时可能会遇到的已知问题。

不支持实时迁移

机密虚拟机不支持实时迁移。 扩展会影响可用的主机维护政策设置

主机维护时必须设置为“终止”

主机维护政策有三个属性:

  • onHostMaintenance 必须设置为 TERMINATE,因为机密虚拟机不支持实时迁移。
  • automaticRestart 默认为 TRUE
  • hostErrorTimeoutSeconds 默认为在重启无响应的虚拟机之前等待 330 秒。

如果发生的维护事件可能导致重新启动,则具有默认维护政策设置的机密虚拟机设为 TERMINATED,然后在维护完成后自动重启。如需测试应用在机密虚拟机重启时的行为,您可以模拟主机维护事件

onHostMaintenance 错误

如果您尝试将机密虚拟机的 onHostMaintenance 设为 MIGRATE,则会收到以下错误响应:

{
  "error": {
    "code": 400,
    "message": "Invalid value for field '': '{  \"version\": \"v1\", \"eventId\": \"5E0E07E2CA1EF.9078046.AA02CFFD\", \"originalUrl\": \"https://www.googl...'. Confidential Instance Config is only supported when OnHostMaintenance is set to TERMINATE.",
    "errors": [
      {
        "message": "Invalid value for field '': '{  \"version\": \"v1\", \"eventId\": \"5E0E07E2CA1EF.9078046.AA02CFFD\", \"originalUrl\": \"https://www.googl...'. Confidential Instance Config is only supported when OnHostMaintenance is set to TERMINATE.",
        "domain": "global",
        "reason": "invalid"
      }
    ]
  }
}

启动延迟时间

您可能会注意到具有大量内存的机密虚拟机实例启动时间较长。启动时间与分配给实例的内存量成正比。

不支持将永久性磁盘格式化为 XFS 格式

机密虚拟机实例不支持将现有永久性磁盘设置为 XFS 文件系统格式。您可以创建新的 XFS 格式的永久性磁盘。

问题排查

本部分提供了有关如何解决使用机密虚拟机时可能遇到的问题的建议。

不支持挂接 40 个以上的永久性磁盘

不支持将 40 个以上的永久性磁盘 (PD) 挂接到机密虚拟机实例。

如果需要挂接 40 个以上的永久性磁盘,可以通过支持渠道申请此限制的例外情况。挂接 40 个以上的永久性磁盘时必须小心谨慎,因为具有 40 个以上的永久性磁盘的实例可能会启动但失败,且发不出任何提示。

I/O 操作超时错误

如果您遇到 I/O 超时错误,则延迟时间可能会超过提交到 NVMe 设备的 I/O 操作的默认超时参数。

如需解决此问题,您可以尝试增加超时参数的值。

如需增加提交到 NVMe 设备的 I/O 操作的超时参数值,请将以下行添加到 /lib/udev/rules.d/65-gce-disk-naming.rules 文件中,然后重新启动:

KERNEL=="nvme*n*", ENV{DEVTYPE}=="disk", ATTRS{model}=="nvme_card-pd",
ATTR{queue/io_timeout}="4294967295"

错误:SWIOTLB 缓冲区已满

对于磁盘和网络输入/输出操作,机密虚拟机会使用内存中名为 Software Input Output Translation LookaSide Buffer (SWIOTLB) 的特定区域,其默认大小为 64 MB。SWIOTLB 是客机中全部可用 RAM 的一部分。

如需检查机密虚拟机是否遇到 swiotlb buffer is full 错误,请连接到实例并运行以下命令来查询 dmesg 日志:

dmesg| grep 'swiotlb buffer is full'

如需解决此问题,您可以尝试增加 SWIOTLB 大小。在增加其大小之前,请确保客机已为 SWIOTLB 和操作系统留出足够的 RAM。

增加 SWIOTLB 的大小

  1. 如需增加 SWIOTLB 的大小,请将以下行附加到 /etc/default/grub 中:

    GRUB_CMDLINE_LINUX_DEFAULT=".... swiotlb=size_in_bytes"
    

    以下示例展示了如何将 SWIOTLB 的大小增加到 512 MB:

    GRUB_CMDLINE_LINUX_DEFAULT=".... swiotlb=262144"
    

    根据 Ubuntu 版本,您需要更新 grub 文件中的字符串。例如,如果您使用的是 Ubuntu 18.04,则需要更新 GRUB_CMDLINE_LINUX 字符串,而不是 GRUB_CMDLINE_LINUX_DEFAULT 字符串。

  2. 通过运行以下命令重新生成 grub.cfg,然后重新启动系统:

    Ubuntu

    sudo update-grub
    

    其他发行版

    grubcfg="/etc/grub2-efi.cfg"
    
    cp $grubcfg $grubcfg.bak
    
    grub2-mkconfig -o $grubcfg
    

    如需了解详情,请参阅 AMDSEV