学习
实践
活动
专区
工具
TVP
写文章

PVPanic的实现原理以及应用

前言:

在虚拟化场景下,我们尽量会尝试使用带外监控的方式,来发现虚拟机的异常。pvpanic就是一种常见的方式,虚拟化场景的windows蓝屏检查也是基于如此。

有了检查的能力,可以快速处理,回复业务执行,或者启用HA等。

分析:

1,isa device

由QEMU虚拟化出来设备,接在ISA总线上,默认使用IO port 0x505。

2,guest

加载pvpanic driver的时候,向kernel注册一个notifier到panic_notifier_list上。

Guest中发生kernel panic的时候,会通知panic_notifier_list上的所有notifier。

pvpanic的notifier写IO port 0x505。

3,qemu

QEMU截获到IO port 0x505写操作,感知到Guest发生了kernel panic。

把消息发给libvirt。这样,libvirt就可以处理对应的事件,其他用户进程也可以通过长连接,监控guest的panic。

4,how to

config libvirt xml :

config guest boot arguments and reboot guest :

append “crash_kexec_post_notifiers” after linux boot arguments

listen guest panic event on host :

#virsh event INSTANCEID –all

trigger kernel panic on guest :

#echo 1 > /proc/sys/kernel/sysrq

#echo c > /proc/sysrq-trigger

5,about “crash_kexec_post_notifiers”

代码选自linux-4.4,如果没有配置“crash_kexec_post_notifiers”,那么,配置了kdump的情况下,会发生kdump,不会再继续执行到panic_notifier_list里面注册的notifier。

确认upstream,目前逻辑也是如此。

所以,需要在guest的boot args里面配置“crash_kexec_post_notifiers”确保带外可以监控到。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181109G20OKQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券