关闭

使用事件通道

标签: 事件消息xen
319人阅读 评论(0) 收藏 举报
分类:
  1. 事件和中断

    事件是从Hypervisor到客户机,或者客户机之间传递消息的标准机制。从概念上类似于Unix的信号,每一个事件传递一位信息:也就是对应事件已经发生。信号传递标准方式是通过一个来自Hypervisor的向上调用(upcall),像信号一样,当另一个事件正在被处理时,消息任然能够被传递。因此在一个事件处理过程中国通常禁用事件传递。与UNIX不同的是,在传递被禁止时所发生的事件并不会发生丢失,在对应出过程被重新使用后,他们不会被传输,但是通过查询共享信息页面中的相关虚拟VCPU结构体可以检查到现有的尚未处理的事件。在很多情况下,Xen事件替代了硬件中断。中断是一种异步通信的事件,标识与机器硬件相关的一些事情发生。事件时一种异步传输的事件,标识和虚拟机相关的事件发生。一个实际的网卡在每次数据包到达的时候会发生一个信号,而虚拟接口会发送一个事件。

  2. 处理陷阱(Trap)

    除了事件之外,Xen还提供了一种异步通知的更底层形式-陷阱。和事件能够动态创建和绑定不同,Trap具有静态意义,直接对应于硬件中断。在IA32规范中将中断分为3大类:被使用的,未被是应该的,以及被保留的。最前面20个中断都是被使用的,接下来的11个中断是被保留的,剩余的则是未被是使用的。在未被使用的中断中,80h通常被用于系统调用。传递一个trap所需要的代码路径比传递时间所需的代码路径更加简单。当客户机运行在一个特定CPU上,Hypervisor为 guest Domain设置中断描述表(IDT),这意味着所有的中断都被客户机直接处理,从而中断处理路径将不再涉及Hypervisor。
    Xen guest Domain不能使用SYSCALL或SYSENTER来完成快速系统调用,应为他们将直接跳转到Hypervisor常驻的特权级0,接着必须返回guest OS kernel,而更多传统80h中断的方法被使用是通过该80h建立陷阱向量,使得guest Domain能够处理系统调用,而不需Hypervisor参与。与半虚拟化不通过,HVM guest kernel运行在ring0,而Hypervisor运行在一个新的模式中,对特权级0影藏,这意味着提供快速跳转到Ring 0功能的SYSCALL和SYSETER能够用于系统调用该。

  3. 事件类型
    事件分为3大类:域间事件(interdomain events)、物理IRQ、虚拟IRQ。
    物理IRQ:他们是实际的IRQ到事件通道的映射,与trap不同,即使Domain没有被调度运行时,事件也会别写入队列中,在Domain被调度运行时事件被传递,它们应该被用于与硬件设备通信中。
    虚拟IRQ:它们类似于物理IRQ,但是与虚拟设备相关。
    Domain间事件:它的定义更加模糊,它们由两个阶段过程创建出来,一个Domain分配一个新的未绑定通道,并允许其他Domain绑定到该通道。第二Domain分配一个新的未绑定通道到远端Domain端口处。

  4. 请求事件
    请求事件时一个相当简单的过程,所有需做的绑定一个事件通道到一个事件源。–实际的IRQ或者远端Domain的事件通道。
    一、绑定通道到一个事件源;
    二、为该事件分配一个处理程序。

  5. 绑定事件通道到VCPU上
    对于但处理器的guest Domain,事件被传递给唯一一个VCPU。对于SMP的guest Domain,可能给定事件对应的处理程序希望被绑定到特定VCPU。在非虚拟化客户机这更有用,应为这样可以更好的利用该处理器的缓冲;在虚拟化系统中同样有用,这样允许实现更加廉价的加锁操作,以及更加灵敏的调度决策。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:47044次
    • 积分:1240
    • 等级:
    • 排名:千里之外
    • 原创:75篇
    • 转载:24篇
    • 译文:2篇
    • 评论:5条
    文章分类
    最新评论