专栏首页皮振伟的专栏[linux][qemu]PVPanic的缺陷和完善

[linux][qemu]PVPanic的缺陷和完善

前言

前文《[linux][qemu]PVPanic的实现原理以及应用》中,介绍了pvpanic的原理和基本的使用方法,KVM虚拟化场景下,使用pvpanic驱动可以监控到Guest的panic。

但是实际的应用场景中,pvpanic实际上和kdump工具冲突。下面我们来分析一下为什么冲突,以及如何解决。

分析

pvpanic和kdump为什么冲突

在配置了kdump的情况下,panic发生之后,内核会尝试加载新的内核,根据配置参数dump内存到磁盘中。那么,也就不会调用pvpanic注册的callback函数,从而导致pvpanic没法收到通知。

如果配置crash_kexec_post_notifiers,那么guest发生了kernel panic之后,会调用pvpanic的callback函数,就会写io port 0x505(默认地址),qemu监控到之后,qemu停止虚拟机 ,并向libvirt进行post消息,我们可以得到通知。那么,guest内部的kdump得不到运行。

所以,kdump和pvpanic不能够同时生效运行。引入的另外一个问题是,配置了kdump之后,发生了panic的话,guest内部发生重启,而我们无法区分是guest内部的正常重启还是kdump重启,会给我们的监控带来很大的困难。

解决办法

我们希望这样的逻辑:

1,如果guest希望自己handle住panic,那么我们只要接收pvpanic的通知即可,让guest继续运行。我们监控到这次guest panic就足够了。

2,如果guest自己不能handle住panic,那么就让qemu甚至上层的软件继续处理。

所以,解决办法就是在pvpanic中增加新的逻辑:

如果没有加载kexec crash loaded,那么写原来的BIT 0。如果加载了kexec crash loaded,那么写新定义的BIT 1。

在qemu侧,对于pvpanic设备的BIT 0操作,还是维持原来的逻辑。对于BIT 1的操作,则post消息给libvirt,然后虚拟机可以继续执行。

在libvirt侧,适配新的消息。更高层次的软件可以适配libvirt新的事件。这样,兼容了原有的逻辑,也可以解决上述的kdump和pvpanic冲突的问题。

在完整功能的upstream过程中,得到了Paolo的支持,感谢Paolo。

patch列表

Linux

e0b9a42735f2672ca2764cfbea6e55a81098d5ba

191941692a3d1b6a9614502b279be062926b70f5

QEMU

600d7b47e8f5085919fd1d1157f25950ea8dbc11

7dc58deea79a343ac3adc5cadb97215086054c86

Libvirt

26badd13e8f1931a9a03e3b1ca0620bb0063b856

本文分享自微信公众号 - AlwaysGeek(gh_d0972b1eeb60),作者:AlwaysGeek

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ​[qemu][http]qemu的网络类型disk技术分析

    前言: qemu的disk设备后端存储支持了多种类型。 本文简单简单列举几种,对比一下其中的特点。再重点分析http类型。 分析: 1,disk types ...

    皮振伟
  • Linux Lab v0.5 正式发布,功能强大,用法简单

    Linux Lab 是一套用于 Linux 内核学习、开发和测试的即时实验室,可以极速搭建和使用,功能强大,用法简单!

    IT大咖说
  • KVMSEC:一个Linux内核虚拟机的安全扩展

    以虚拟化PC为应用的数据中心服务器群增长很快。本文介绍的这个架构,优点是增加全局系统安全。

    FB客服
  • riscv64架构上运行rt-thread

    本文主要描述如何在riscv64 的qemu上运行rt-thread。该项目大部分工作借鉴中科院的点亮计划的项目,为这些不断贡献开源的同学点赞。项目地址如下:

    bigmagic
  • KVM之CPU虚拟化

    虚拟化技术是指在x86的系统中,一个或以上的客操作系统(Guest Operating System,简称:Guest OS)在一个主操作系统(Host Ope...

    惨绿少年
  • LINUX 的 XEN 和 KVM 到底区别在什么地方

    kvm 是 linux 的内核的一个 module,而 xen 是一个 linux 的应用。

    明哥的运维笔记
  • 嵌入式编程中使用qemu能够做什么?

    嵌入式开发的过程中,很多时间都是要和硬件设备打交道,通过程序控制硬件的具体行为,这些往往是单片机延续下来的开发模式,在目前复杂的嵌入式系统中,很多都需要借助设计...

    bigmagic
  • [kvm][qemu]CPU虚拟化

    前言: 这里作者再次自不量力了,以一点微末的道行分析一下KVM的CPU虚拟化部分的代码。 分析: 1,分析具体代码逻辑之前,可以先使用strace大致看一下...

    皮振伟
  • 懂了!VMware/KVM/Docker原来是这么回事儿

    虚拟主机、web服务器、数据库、对象存储等等各种服务我们都可以通过各种各样的云平台来完成。

    轩辕之风
  • 懂了!VMware/KVM/Docker原来是这么回事儿

    虚拟主机、web服务器、数据库、对象存储等等各种服务我们都可以通过各种各样的云平台来完成。

    用户8851537
  • 热迁移、RTC 计时与安全增强…腾讯云 KVM 性能优化实践经验谈

    腾讯云的虚拟机热迁移过程和具体方法是什么?腾讯云又如何看待 KVM 技术开源?KVM 现在面临着哪些新的挑战?

    腾讯云计算产品团队
  • KVM详解,学习kvm系列文章

    其中,KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是一个 Linux 的一个内核模块,该内核模块使得 Lin...

    菲宇
  • uniFuzzer:一款基于Unicorn和LibFuzzer的闭源模糊测试工具

    uniFuzzer是一款基于Unicorn和LibFuzzer的闭源模糊测试工具,该工具当前支持对ARM/MIPS架构的32位LSB ELF文件进行模糊测试,而...

    FB客服
  • ubuntu14.04编译android4.4对应的linux内核

    参考资料: [google官方资料] 官方是最权威的,但会有细节缺失。 [如何下载编译android内核] 可以参考别人的动手实践,弥补缺失的细节。

    用户2930595
  • Ovs+Dpdk简单实践

    一、Dpdk简介 Dpdk是X86平台报文快速处理的库和驱动的集合,不是网络协议栈,不提供二层,三层转发功能,不具备防火墙ACL功能,但通过DPDK可以轻松的开...

    SDNLAB
  • SUSE就SLE与openSUSE应对Meltdown和Spectre CPU漏洞发布声明

    SUSE的Matthias G. Eckermann和Marcus Meissner发表了关于最近公布的影响我们大家的Meltdown 和 Spectre CP...

    企鹅号小编
  • RISC-V64 opensbi启动过程

    最近有一些riscv的项目做,虽然以前也用过例如k210之类的riscv架构的芯片,但是都止于能够做一些应用,并未特别关注其芯片的体系架构方面的东西,但是随着接...

    bigmagic
  • KVM 初探

    KVM 是业界最为流行的 Hypervisor,全称是 Kernel-based Virtual Machine。它是作为 Linux kernel 中的一个内...

    猿大白
  • (转)为什么计算机的学生要学习Linux开源技术

    Linux 相关的开源技术对于学生来说,特别是计算机专业的学生来说,非常重要,下面就几个方面进行讨论:

    Fisherman渔夫

扫码关注云+社区

领取腾讯云代金券