- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正致力于在我正在编写的使用 Intel VT-x 虚拟化的 VMM 中支持发布中断。启用发布中断的文档中指定的 VM 进入要求之一是“退出时确认中断”VM 退出控制必须设置为 1。
当我将此控件设置为 1 时,我的 guest 操作系统会在停止响应之前运行一小段时间。然后,主机操作系统也停止响应,并向主机内核日志打印一条消息,指出运行 guest 操作系统的 CPU 内核遇到硬锁定(NMI 看门狗:看门狗检测到硬锁定CPU 10
).
我正在阅读英特尔文档并试图仔细思考这个问题,但想知道是否还有其他人知道发生了什么。我现在的一般想法是主机操作系统必须向客户操作系统此时正在运行的核心发送中断(即我的客户操作系统不参与发送中断),这会导致虚拟机退出。由于我将“Acknowledge interrupt on exit”控件设置为 1,因此处理器向中断 Controller 确认已收到中断,并将向量放入 VM-exit interrupt-information 字段中。此外,由于我目前没有对我的 VMM 中的中断信息字段执行任何操作,因此中断不会被主机操作系统处理,这导致了问题。我的方向是否正确?
最佳答案
是的,不允许主机操作系统处理设备中断会是一个问题。与其将“退出时确认中断”控件设置为 1,不如将其设置为 0。然后,当您由于硬件中断而退出 VM 时,您应该设置处理器中断启用标志以允许中断被确认和服务通常在主机中。
来自 Intel 64 和 IA-32 架构软件开发人员手册:
33.2 INTERRUPT HANDLING IN VMX OPERATION
- Acknowledge interrupt on exit. The “acknowledge interrupt on exit” VM-exit control in the controlling VMCS controls processor behavior for external interrupt acknowledgement. If the control is 1, the processor acknowledges the interrupt controller to acquire the interrupt vector upon VM exit, and stores the vector in the VM-exit interruption-information field. If the control is 0, the external interrupt is not acknowledged during VM exit. Since RFLAGS.IF is automatically cleared on VM exits due to external interrupts, VMM re-enabling of interrupts (setting RFLAGS.IF = 1) initiates the external interrupt acknowledgement and vectoring of the external interrupt through the monitor/host IDT
或者,如果你有充分的理由设置这个位,比如你需要将某些硬件中断路由到客户机,那么你需要调用主机操作系统的中断处理程序,就好像它是由中央处理器。
关于linux - VT-x中的"Acknowledge interrupt on exit"控制导致CPU死机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48030293/
根据 /spring-kafka/docs/2.4.4.RELEASE/,关于 Kafka 的新功能,旨在否定确认,现在由 Spring-Kafka 支持。 “…… 从 2.3 版开始,Acknowl
我正在实现一个基于 kafka 的应用程序,我想在其中手动确认收到的消息。架构迫使我在一个单独的线程中完成它。 问题是:在与消费者不同的线程中执行 Acknowledgement.acknowledg
目前我使用服务器接收 GCP Pub/Sub 消息,我想执行 Purchase.Subscriptions:acknowledge调用以确认在服务器收到通知时尚未确认的订阅。 这是场景... 用户购
[!] 您的 Podfile 需要安装插件 cocoapods-acknowledgements。请安装它并再次尝试安装。 最佳答案 将其放入终端 gem install cocoapods-ackn
将我们的 Jenkins 主安装更新到最新的 LTS 版本 2.46.3 后,其从属设备之一(Windows 7 计算机,32 位)无法与主设备连接。 我们收到的错误是: java -jar slav
我想同时使用来自多个队列的jms消息。所有消息在长时间运行处理后都应该进入数据库,我无权丢失它们。 问题:是否可以保存消息以供将来确认,并在处理另一条消息时调用 oldMessage.acknowle
我有 N 个 tombcat 服务器监听一个 Tibco EMS 队列。我必须发送 N 条消息,每条消息必须由特定服务器处理(消息 1 必须由 tomcat 服务器 1 处理,...,消息 N 必须由
我一直在尝试提出一种 Camel 路线,可以从 activemq 中读取数据并将其写入 Oracle AQ。 但是,当消息成功写入 Oracle-aq 时,我必须将成功的消息写入另一个 Active
我是第一次使用 Spring Kafka,我无法在我的消费者代码中使用 Acknowledgement.acknowledge() 方法进行手动提交,如此处所述 https://docs.spring
我知道这个问题已经有人问过,但我找不到好的答案。每当我点击我制作的按钮时,一切似乎都正常,但我创建了多个 channel 。它应该只做一个。然后我得到这个错误。 代码: else if (intera
JMS session 到底意味着什么? JMS session 可以或不可以“事务处理”是什么意思? JMS session 可以或不可以“自动确认”是什么意思? 最佳答案 您可以将 JMS ses
private val DATABASE:String = config.getString("db.dbname") private val SERVER:ServerAddress = {
我已经在 MongoDB 数据库中存储了一个 pdf,我正在按如下方式访问它: dbPDFReports = client['pdfReports'] 客户端是我的 MongoClient 如下: c
CocoaPods 会自动为我使用过的所有项目生成一个很好的确认列表,以便我可以将这些信息包含在我的应用程序 UI 中。 整个 Android/Gradle 情况是否有类似的情况? 更一般地说,如何自
我正在开发一个连接到 Spring-MVC 服务器的 Java 应用程序,使用 Spring-Security 进行身份验证/授权。登录部分有效,我在 Java 应用程序中得到了一个 JSESSION
当在具有 AUTO_ACKNOWLEDGE 模式的 session 中调用 Message.acknowledge() 时,TIBCO 会发生什么情况? 我的意思是这个调用在客户端被忽略了吗?还是服务
我正在构建一个应用程序并希望将 cocoapods 自动生成的确认 Markdown 文件加载到一个 NSString 中以显示在我的应用程序中。我认为它会像这样做一样简单: NSString *pa
我正在使用 boost asio 通过 TCP 执行文件传输。文件传输有效,但是当我决定通过链接 async_write (在服务器上)和 async_read_until (在客户端上)实现从服务器
我正致力于在我正在编写的使用 Intel VT-x 虚拟化的 VMM 中支持发布中断。启用发布中断的文档中指定的 VM 进入要求之一是“退出时确认中断”VM 退出控制必须设置为 1。 当我将此控件设置
在我们的应用程序中,发布者创建一条消息并将其发送到一个主题。 然后它需要等待,当所有主题的订阅者都确认消息时。 它不会出现,消息总线实现可以自动执行此操作。因此,我们倾向于让每个订阅者在完成后向客户发
我是一名优秀的程序员,十分优秀!