全国服务热线:13376400854

新闻中心 PRODUCT DISPLAY

罗定阿里云高版本内核热拔virtio设备Oops异常

来源: 发布时间:2024-07-17 5378 次浏览

本文介绍如何处理在部分高版本内核的ECS实例中热拔virtio设备时出现Oops异常的问题。

问题现象

在部分高版本内核的ECS实例中热拔virtio设备(例如磁盘、网卡)时,操作系统会发生如下Oops异常:

在配置了kernel.panic_on_oops = 1的实例中,会发生内核Panic异常。

在配置了kernel.panic_on_oops = 0的实例中,会出现hung错误。

说明

在Linux内核中,kernel.panic_on_oops是一个内核参数,用于控制当内核遇到Oops(一种内核错误,通常包括访问无效内存地址时发生的情况)时的行为。

如果内核出现Panic异常,系统会立即停止运行当前的所有任务,保存一些调试信息,然后重启或者关机,有助于快速响应问题并减少潜在的损害。

如果内核出现hung错误,内核可能会尝试继续运行,在生产环境中不推荐该配置,因为可能会进一步导致数据损坏或其他严重损害。

问题原因

Linux上游社区在内核社区中添加了对virtio设备Admin Virtqueue的支持:commit详情。

在该commit中:

阿里uc__<a href='https://aliyun.58g.com.cn' target='_blank' title='阿里云'><strong>阿里云</strong></a>服务器怎么重置__阿里云服务器租用

对virtio_pci_device的定义中添加了一个is_avq的函数指针,用于判断是否存在Admin Virtqueue。

在modern virtio设备的初始化函数virtio_pci_modern_probe中添加了对is_avq函数指针的赋值。

在热拔virtio设备时,代码会检查当前队列是否为Admin Virtqueue。

但是上游社区忽略了一个问题:如果该virtio设备不是一个modern virtio设备,而是一个legacy virtio设备时,并没有对is_avq函数指针进行赋值,导致legacy virtio设备中的virtio_pci_device结构体中的函数指针is_avq是一个空指针(NULL Pointer)。此时如果热拔virtio设备,调用到if (vp_dev->is_avq(vdev, vq->index)) 代码时,CPU的RIP寄存器执行了一个空指针地址,从而触发了空指针异常,也就是尝试执行一个无效的内存地址,这是操作系统不允许的,会导致程序崩溃或系统错误。

影响范围

Linux上游社区

上游社区已经针对该问题进行了修复:commit详情。在该commit中,对is_avq函数指针是否为空的情况进行了判断,修复了该问题。

操作系统

Ubuntu 24

其他内核版本在6.8左右的操作系统,且这些操作系统合入了Admin Virtqueue能力(virtio-pci: Introduce admin virtqueue),但是内核没有修复is_avq函数指针判断问题(virtio-pci: Check if is_avq is NULL)。

说明

您可以通过uname -r命令查询内核版本。

virtio设备

实例使用了legacy virtio设备,并在进行热拔操作。

解决方案

方案一:更换modern virtio设备的实例规格族。具体操作,请参见修改实例规格。

建议使用以下实例规格族,以下规格族是modern virtio设备,不受该问题影响。

ecs.c8i、ecs.g8i、ecs.r8i、ecs.hfg8i、ecs.hfc8i、ecs.hfr8i、ecs.g8ise、ecs.c8ae、ecs.g8ae、ecs.r8ae、ecs.c8a、ecs.g8a、ecs.r8a。更多信息,请参见实例规格族。

方案二

升级最新内核软件包,并确认最新软件包是否已合入is_avq函数指针判断的补丁包:virtio-pci: Check if is_avq is NULL。

(条件必选)如果最新的内核中没有合入is_avq函数指针判断的补丁包,请自行合入。

附录:名词解释

关于文档中涉及的virtio设备、Admin Virtqueue、virtio_pci_device等名词解释说明如下:

  名词 说明 

virtio设备 virtio是一种标准化的虚拟化设备通信框架,允许虚拟机高效地与宿主机上的虚拟硬件设备交互。virtio设备是在虚拟化环境中模拟出来的硬件设备(如磁盘、网卡),分为传统legacy virtio和现代modern virtio两类,主要区别在于使用的配置接口不同。 

Admin Virtqueue 是一个特殊的virtio队列,用于执行设备的管理操作,比如获取设备状态、配置设备等。并非所有virtio设备都支持Admin Virtqueue。 

virtio_pci_device 是在内核中表示一个virtio PCI设备的数据结构,包含了指向各种功能函数的指针,其中之一就是新添加的is_avq函数指针,用于判断给定的队列是否为Admin Virtqueue。 

is_avq 该函数用于判断给定的virtio队列是否为Admin Virtqueue。 




阿里云数据解决方案[39] 阿里云是什么[38] 阿里云产品报价[36] 阿里云产品介绍[35] 阿里云解决方案[35] 阿里公有云介绍[35] 云规划设计与实施服务[34] 阿里公有云产品[34] 云与计算培训服务[30] 阿里云优势[30] 阿里云官网登陆[30] 阿里云服务器配置[30] 阿里私有云搭建方案[30] 云与计算咨询服务[28] 阿里云服务器[28] 阿里云服务器成功案例[28] 公有云私有云混合云[27] 阿里云官网[27] 阿里公有云提供哪些计算服务[27] 阿里弹性云服务器[27] 阿里云智慧教育解决方案[26] 阿里公有云官网[26] 阿里公有云服务[26] 阿里私有云方案[26] 大数据使能服务[25] 阿里云园区解决方案[25] 阿里私有云平台[25] 阿里云服务器试用[24] 云迁移与运营支撑服务[21] 阿里私有云架构[20] 阿里私有云解决方案[20] 阿里云提供的服务[18] 阿里云智慧制造解决方案[18] 阿里云服务总代理[18] 阿里云云主机[17] 阿里云安全[17] 阿里私有云[17] 阿里云服务服务中心[16] 阿里云服务核心分销商[16] 阿里公有云架构解决方案[16] 阿里私有云搭建[16] 阿里云备份[15] 阿里云服务器ECS[15] 阿里云软件开发服务[15] 阿里公有云行业解决方案[15] 阿里私有云服务[15] 阿里私有云的搭建方案[15] 阿里私有云网格结构[15] 阿里私有云部署架构[15] 阿里云智慧校园解决方案[14] 阿里云漏洞扫描[14] 阿里云网站建设服务器[14] 阿里云邮箱[14] 阿里云块存储[13] 阿里云弹性云服务器应用[13] 阿里云数据库[13] 阿里云服务器应用[13] 阿里云桌面系统集成商[13] 阿里云迁移解决方案[13] 云与计算客户支持与运维使能服务[12] 阿里云桌面总代理商[12] 阿里云速建站[12] 阿里云产品服务[11] 智慧教育云平台解决方案[10] 阿里云场景化解决方案[10] 阿里云域名注册[10] 阿里云速智能客服[10] 阿里公有云架构[10] 阿里智慧云课堂解决方案[10] 阿里公有云视讯解决方案[9] 阿里私有云产品有哪些[9] 智慧教育云计算解决方案[8] 阿里公有云平台[8] 阿里公有云解决方案[8] 阿里公有云通用解决方案[8] 阿里私有云服务器[8] 阿里云智慧***解决方案[6] 阿里公有云和私有云区别[6] [5] 云与计算客户支持服务[5] 云盘基础操作[5] 阿里公有云是什么[5] 阿里公有云解决方案服务定制领导者[5] 阿里私有云解决方案服务定制领导者[5] 阿里虚拟私有云vpc[5] 扩容云盘[4] 阿里云HTTPS加密访问[4] 阿里云共建智能世界云底座[4] 阿里云域名解析[4] 阿里云应用镜像(13款)[4] 阿里公有云[4] 大数据使能服务[3] 阿里云园区解决方案[3] 阿里公有云产品[3] 加密云盘[3] 阿里云代理公司有哪些[3] 阿里云官网网站[3] 阿里云手机代理加盟[3] 阿里云经销商[3] 阿里公有云专属云主机DeH服务[3] 阿里云官网[2] 阿里云解决方案[2] 阿里公有云架构[2] 阿里私有云搭建[2] 云规划设计与实施服[2] 阿里云企业邮箱服务[2] 阿里云企业邮箱服务 (SAAS,云邮箱)[2] 阿里云数据解决方案 [2] 智慧教育云计算解决方案[1] 阿里云产品服务[1] 阿里云域名注册[1] 云与计算咨询服务[1] 阿里云云主机[1] 阿里云产品报价[1] 阿里云产品服务[1] 阿里云优势[1] 阿里云智慧制造解决方案[1] 阿里云智慧校园解决方案[1] 阿里云服务器ECS[1] 阿里云服务器应用[1] 阿里云服务器成功案例[1] 阿里云服务器试用[1] 阿里云服务器配置[1] 阿里云服务核心分销商 [1] 阿里云速智能客服[1] 阿里公有云平台[1] 阿里私有云搭建方案[1] HTTPS加密访问(CA证书)[1] 专属块存储集群[1] 专属块存储集群概述[1] 主机新用户使用指南[1] 云盘加密概述[1] 云盘扩容指引[1] 修改云盘标签[1] 加密数据盘[1] 加密系统盘[1] 单实例[1] 卸载或挂载系统盘[1] 卸载数据盘[1] 基础环境配置[1] 如何选购云虚拟主机[1] 快照灵活易用[1] 扩容云盘容量[1] 扩容分区和文件系统(Windows)[1] 提供DDoS防护[1] 撒[1] 最新一代CIPU网络[1] 查看磁盘序列号[1] 网站开通要素[1] 腾讯云园区解决方案[1] 腾讯云数据解决方案[1] 腾讯云解决方案[1] 转换MBR分区为GPT分区[1] 释放云盘[1] 镜像跨地域无缝迁移[1] 阿里云[1] 阿里云主备架构[1] 阿里云产品报价 云规划设计与实施服务[1] 阿里云企业级能力[1] 阿里云原生MySQL生态[1] 阿里云原生数据库 PolarDB[1] 阿里云备份恢复[1] 阿里云官方网站,网络安全隔离[1] 阿里云客户端[1] 阿里云故障切换[1] 阿里云数据传输服务 DTS[1] 阿里云数据库 MongoDB 版[1] 阿里云数据库 RDS MySQL 版[1] 阿里云数据库自治服务 DAS[1] 阿里云数据管理 DMS[1] 阿里云智慧解决方案[1] 阿里云智慧***解决方案[1] 阿里云服务器ECS[1] 阿里云自动分区[1] 阿里云解决方案 [1] 阿里云速智能客服 阿里私有云 阿里私有云解决方案[1] 阿里公有云架[1] 阿里私有云产品有什么[1] 阿里私有云搭建 [1] 高级环境配置(Linux操作系统)[1] 高级环境配置(Windows操作系统)[1]