guest内核不响应导致磁盘卸载问题排查

用户问题

客户报障磁盘卸载不了,而且是经常出现卸载不了的情况,客户比较着急,同时PDD也是大客户。

排查过程

查看宿主机上虚拟机信息

1、用户虚拟机有14块磁盘,而且这14块都是以legacypci的方式插入虚拟机,我印象中应该是12块盘是modern,其他才是legacypci。先不管legacy和modern,都应该要卸载成功。

guest内核不响应导致磁盘卸载问题排查_第1张图片 

pcie 走的 PCIe native hotplug机制,pci走的SHPC热插拔机制, root pci 支持的slot上限为32个

qemu里有三种hotplug实现:

1、ACPI (Advanced Configuration and Power Interface) ( for piix/q35的 cpu/mem 热插拔/ 2. piix的pci设备)

2、SHPC (Standard Hot Plug Controller) (for pci bridge/pcie-pci bridge)

3、PCIe native hotplug (for pcie port)

处理流程:

qemu流程: device_del → handler→request_unplug():

整体流程:

  • click attention button

  • 发送 SHPC interrupt

  • guest 内核取消设备配置,关闭设备slot 电源

客户虚机现象:

1、手动调用libvirt 执行挂卸载legacy设备,在虚拟机内部均不能生效

2、手动调用libvirt 执行挂卸载modern设备,都可以成功生效

查看guest内部

1、发现 pci 下没有 slot

2、发现/boot/config 文件里的 CONFIG_HOTPLUG_PCI_SHPC 没有设置

通过上面两个基本可以判断 guest 内部没有开启 shpc 机制。于是我们准备进行接下来的验证测试。

测试验证:

1、编译一个不设置 CONFIG_HOTPLUG_PCI_SHPC 的内核,并安装。结果是不能热插拔pci设备

2、编译一个设置 CONFIG_HOTPLUG_PCI_SHPC =Y 的内核,并安装。结果是能正常挂卸载设备

结论:

guest内核没有使能 shpc,导致卸载pci设备失败。

后续工作:

检查失败时检查下 /boot/config- 文件里的 CONFIG_HOTPLUG_PCI_SHPC 等相关配置项,这个值必须设置成 Y或者m,不能不设置,也不能设置成其他值。

镜像或者ts 检查这些问题的时候,可以查看 /boot/config- 下配置是否正确,参考其他云厂商的配置应该有如下配置项:

CONFIG_HOTPLUG_SMT=y

CONFIG_MEMORY_HOTPLUG=y

CONFIG_MEMORY_HOTPLUG_SPARSE=y

CONFIG_HOTPLUG_CPU=y

CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y

CONFIG_ACPI_HOTPLUG_CPU=y

CONFIG_ACPI_HOTPLUG_MEMORY=y

CONFIG_HOTPLUG_PCI_PCIE=y

CONFIG_HOTPLUG_PCI=y

CONFIG_HOTPLUG_PCI_ACPI=y

CONFIG_HOTPLUG_PCI_ACPI_IBM=m

CONFIG_HOTPLUG_PCI_SHPC=y

配置值为y的严格按照y来,配置值为m的 可以是m也可以是y。

你可能感兴趣的:(虚拟化,热插拔,hotplug)