Openstack: live-migration SRIOV的一个问题(1)

ops/2024/10/19 1:25:13/

​去年分析的一个问题:Openstack: migration 虚拟机热迁移 失败的注意点。里面有很多未知答案的问题。最近再总结一下,可能会有几篇,算是一个系列。

在这两天又遇到,继续看了一下。找到了之前一直没有搞明白的一个问题:refcount到底是被谁占,用没有释放?这里说一下大概。详细的热迁移步骤,请参阅下面两个说明和文档:

https://specs.openstack.org/openstack/nova-specs/specs/train/implemented/libvirt-neutron-sriov-livemigration.html
https://docs.openstack.org/nova/latest//reference/live-migration.html

是在Openstack的新版本里加进来,对有SRIOV设备的虚拟机进行热迁移功能。测试的时候又碰到了这个错误:
Linux: unregister_netdevice: waiting for eth0 to become free. Usage count = 1

这次是没跑了,也算是有机会继续看,继续学习。一开始以为是内核的问题,后来在网上查了很多资料:在Linux内核早期比较老的版本,确实是有几个这种泄漏ref的bug。但是在新版本都已经解决了。中间又看到几个例子是说,私有的内核模块也可能引入这个问题。

经过认真分析,明确了,自己产品里的一个内核模块是会将net_device的refcount的值hold一下,因为要用net_device的指针。调用的接口是:dev_get_by_name。这个函数就非常的具有滑稽性,如果调用,而且可以找到相应的设备,就会dev_hold设备;如果调用者不想hold,要单独执行dev_put,这就形成字面意义的不对称,dev_get_by_name和dev_put,明眼看就不是一对。所以要有意识,在调用了dev_get_by_name之后,要仔细考虑是否真的需要hold dev,如果不需要,要记得dev_put一下。当然本文要说的问题不是出在这里。

问题是在live-migration的过程中nova的调用链里,会将原有instance的设备detach掉,在detach的时候,没有设置udev规则来删除这个内核模块,导致这个内核模块对net_device一直有占用refcount,从而产生这个错误日志。

这里的一个问题,在做detach的时候,内核具体会做哪些操作?


http://www.ppmy.cn/ops/25669.html

相关文章

pytest系列——allure之在测试用例添加标题(@allure.title())

前言 通过使用装饰器allure.title可以为测试用例自定义一个更具有阅读性的易读的标题。 allure.title的三种使用方式: 直接使用allure.title为测试用例自定义标题;allure.title支持通过占位符的方式传递参数,可以实现测试用例标题参数化&a…

Vue项目中引入高德地图步骤详解,附示例代码

vue中如何使用高德地图,下面为您详解。 步骤一:安装高德地图的JavaScript API 在Vue项目的根目录下打开终端,执行以下命令安装高德地图的JavaScript API: npm install amap/amap-jsapi-loader --save 步骤二:创建地…

设计模式-命令模式(Command Pattern)结构|原理|优缺点|场景|示例

设计模式(分类) 设计模式(六大原则) 创建型(5种) 工厂方法 抽象工厂模式 单例模式 建造者模式 原型模式 结构型(7种) 适配器…

【ubuntu下fsearch查找工具的安装】

目录 ubuntu下安装fsearch查找工具安装步骤安装fsearch查找工具时碰到这个提示 ubuntu下安装fsearch查找工具 fsearch是ubuntu系统下的文件搜索工具,类似于windows系统下的everything工具。 安装步骤 终端里依次输入下面的命令 sudo add-apt-repository ppa:chr…

235 基于matlab的时频盲源分离(TFBSS)算法

基于matlab的时频盲源分离(TFBSS)算法,TFBSS用空间频率分布来分离非平稳信号,可以分离具有不同时频分布的源信号,也能够分离具有相同谱密度但时频分布不同的高斯源。同时,该算法在时频域上局域化源信号能量…

Git分支策略与工作流

Git分支策略与工作流 - GitFlow工作流介绍 GitFlow工作流是一种在软件开发中广泛使用的Git分支策略和工作流。它在2010年由Vincent Driessen提出,并在开源社区中广泛接受和采用。 GitFlow工作流使用两个主要分支——master和develop。master分支用于发布稳定的版…

力扣经典150题第四十五题:存在重复元素 II

目录 力扣经典150题第四十五题:存在重复元素 II介绍题目分析解题思路算法实现总结 当然,以下是使用Java语言实现的解法,并将整篇文章以Markdown格式呈现: 力扣经典150题第四十五题:存在重复元素 II 介绍 在本文中&am…

如何防止黑客恶意的刷端口

我们可以在把这个端口作为Redis的一个key,(Redis是kv结构的,v具有类型结构)我们可以约定1秒钟超过多少次就算攻击(比如1秒钟十次),当一秒钟刷新超过十次我们就认为是在刷新我们的接口&#xff0…