前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[linux][qemu]PVPanic的实现原理以及应用

[linux][qemu]PVPanic的实现原理以及应用

作者头像
皮振伟
发布2018-12-07 09:39:04
2.8K0
发布2018-12-07 09:39:04
举报
文章被收录于专栏:皮振伟的专栏

前言:

在虚拟化场景下,我们尽量会尝试使用带外监控的方式,来发现虚拟机的异常。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 : <panic model='isa'> <address type='isa' iobase='0x505'/> </panic> 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”确保带外可以监控到。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AlwaysGeek 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档