首页
学习
活动
专区
圈层
工具
发布

KVM虚拟化的中断系统

继续执行cat /proc/ioports | grep pic 实际上,主板上来连接这两颗pic设备,也就是两个i8259,分别是i8259 master和i8259 slave。...vda是virtio-blk,它是一个pci设备,它的中断是msi信号。 net0也是pci设备,中断也是msi信号。 2,irq routing 物理环境上,irq是由硬件产生的。...尽管经过irq routing产生了i8259 master和io apic两个中断,但是Linux选择io apic上的中断。 同理,如果是virtio-blk产生了中断,则路由到msi处理。...默认使用内核态的实现。在host上执行ps,就可以看到[kvm-pit/1234]类似的进程,后面的数字是qemu进程的pid。...停止i8254,kvm-pit停止周期性的注入中断,但是并不会退出。所以看到kvm-pit内核线程,但是它并不一定是在工作的。

5.7K90

Linux中断机制:硬件处理,初始化和中断处理

5、 在CPU可以处理下一个中断的时候,从IRR中选取最高优先级的中断,清0 IRR中的对应位,并设置ISR中的对应位,然后ISR中最高优先级的中断被发送到CPU执行(如果其它优先级和屏蔽检查通过)。...,还会向所有的I/O APIC发送EOI message,通告中断处理已经完成。...说明: 1、 关于Local APIC的IRR和ISR 寄存器interrupt request register (IRR) 和 in-service register (ISR),都是256bit...寄存器,每个bit对应一个中断(其中[0-15]不能使用,SMI/NMI/INIT/ExtINT/SIPI的发送和执行不经过ISR和IRR) 。...需要说明的是:该irq最终可以运行的cpu数量并不完全由用户指定,还与apic的模式相关,对于apic_physflat,实际上只为该irq分配了一个cpu核心,该irq只能运行在用户指定的cpu中的一个

9.1K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    内核中断子系统介绍

    中断触发时,x86 核根据寄存器 IDTR 记录的基址和中断控制器的寄存器 ISR 提供的中断向量号找到 IDT 表中对应的 Interrupt Gate 表项,跳转到相应的地址。...,同一中断号的 SPI 在不同 CPU 均指相同的中断源;LPI 的区分是中断路由上的不同,主要是在 IRI 中由 ITS 路由的中断,其余 3 种中断均不经过 ITS;某些实现下还有直接在 Redistributor...同一时间,CPU interface 上只能存在一个待处理的中断,对于多个中断被发送到 CPU interface 上,gic 引入优先级的机制来决定如何选择保留的中断;这个优先级的机制还被运用在 IRI...上,优先级更高的中断会被优先发送到 CPU interface。...I/O APIC 根据内部 PRT table 中的 RTE 发送中断消息给 Local APIC。

    1.7K21

    Linux内核21-Linux内核的中断处理过程

    增强中断处理程序的灵活性,有下面两种方式: IRQ共享 在每个中断处理程序中罗列所有共享该IRQ的设备的中断服务例程(ISR)。每次轮询一遍这些服务例程,判断是哪个设备发送的中断请求。...给PIC控制器发送应答,告知正在响应IRQ请求线,允许继续发送中断。 执行中断服务例程(ISR)。 从中断返回(跳转到ret_from_intr()函数地址)。...就是那些可能没有中断服务例程(ISR)或者中断服务例程和中断请求线不匹配的中断。...至于实现循环,前面我们讲过了,请参考之前的文章。 简而言之,设备发出IRQ信号,多APIC系统选择一个CPU,并把中断信号发送给响应的私有APIC,继而,私有APIC中断CPU。...内核线程使用多APIC系统一个很棒的功能,叫做CPU的IRQ亲和力:通过修改I/O-APIC的中断重定向表,将中断信号指定到新的CPU上。

    3.3K20

    xv6(4) 中断理论部分

    $8259A$ 的引脚 $IRQ$ 是有优先级的,编号越低,优先级越高,$vector=IRQ编号+32$,前 32 个是留给异常使用和架构保留的。...关于 APIC 的内容很多也很复杂,详细描述的可以参考 $intel$ 开发手册卷三,本文不探讨其中的细节,只在上层较为抽象的层面讲述,理清 APIC 模式下中断的过程。...$),每个表项都是一个 64 位的寄存器 一些可编程寄存器,例如窗口寄存器,版本寄存器等等 通过 $APIC$ 总线发送和接收 $APIC$ 信息的一个信息单元 我们了解一个硬件主要就是了解它的寄存器,...当 $IRR$ 中某个中断请求发送给 $CPU$ 时,$ISR$ 对应的位上便置 1,相应的 $IRR$ 位清零,表示 CPU 正在处理该中断。...有着很详细的讲解,这里不赘述。

    72900

    clocksource的管理和虚拟化

    所以,先不管这些名词是什么东西,怎么实现的,起码kvm-clock、tsc、hpet、acpi_pm是同一类的东西;并且,在Linux上,统一管理它们,并叫“clocksource”。...3,kvmclock kvmclock比较特殊,是在kvm虚拟化的时候使用的,物理机上并没有---这也是和其他的timer很大的一个差别。...设置了tsc之后,apic会产生timer的irq。 5, hpet hpet是纯粹的qemu在用户态模拟出来的。...这里多说一句哈,在Guest Linux上,虽然创建了kvm-pit线程,但是却没有跑;在Guest windows上,kvm-pit线程周期性的执行work。...KVM虚拟化CPU和管理内存,qemu虚拟化设备,加上上述的timer,还有就是apic,那么龙珠就集齐了,可以召唤神龙了~

    5.4K61

    Linux 内核如何处理中断

    中断服务程序(ISR)是一个小的程序,用来处理具体的数据,其具体的处理方式依赖于造成中断请求(IRQ)的原因。之前正在运行的进程在中断服务程序(ISR)运行结束前都会被中断。...现如今,中断请求(IRQ)由 CPU 中的 高级可编程中断控制器(advanced programmable interrupt controller)(APIC)部分来处理。...硬件中断 当一个硬件设备想要告诉 CPU 某一需要处理的数据已经准备好后(例如:当键盘被按下或者一个数据包到了网络接口处),它将会发送一个中断请求(IRQ)来告诉 CPU 数据是可用的。...接下来会调用在内核启动时设备驱动注册的对应的中断服务程序(ISR)。 软件中断 当你在播放一个视频时,音频和视频是同步播放是相当重要的,这样音乐的速度才不会变化。...中断描述表(interrupt descriptor table)(IDT)中记录了中断请求(IRQ)和中断服务程序(ISR)的对应关系。Linux 中定义了从 0 到 256 的 IRQ 向量。

    3K40

    张高兴的 MicroPython 入门指南:(二)GPIO 的使用

    输出模式类似于一个电源,Pico 可以控制这个电源是否向外供电,比如打开外部的 LED 小灯,当然最有用的还是向外部设备发送信号。和输出模式相反,输入模式是接收外部设备发来的信号。...输入模式还包含两种特殊的输入模式:上拉输入(INPUT_PULLUP)和下拉输入(INPUT_PULLDOWN)。上拉输入就是芯片内部的电阻连接 VCC ,将该引脚设置为高电平状态。...Pin.PULL_UP 上拉输入,Pin.PULL_DOWN 下拉输入,None 不设置。 value 设置输出引脚的默认状态。...硬件需求 名称 数量 微动开关 x1 杜邦线 若干 电路 微动开关 引脚 1 - GP2 引脚 2 - GND 代码 将 Pico 的 GP2 引脚配置成上拉输入模模式,将开关的一端与 GP2 连接。...由于上拉输入在没有外部输入时读取始终为高电平信号,因此开关的另一段需要连接 GND。当按下开关时 GP2 引脚会检测到低电平信号。那么怎样去不断检测开关是否被按下?

    66520

    ​vm exit的优化

    分析: 1,网卡虚拟化 初始条件: a,为了避免外部中断带来的干扰,把物理网卡的中断绑定到物理机的CPU0上,让虚拟机跑在物理机的CPU2和CPU3上。...这种情况,配置irq affinity,让网卡的irq发送到物理机的CPU0上,就可以避免这种external interrupt引起的vm exit。...Timer:在Host上,Linux在启动阶段,如果发现了apic timer,会优先使用精度更高的apic timer,并关闭掉i8254,也就是PIT。这个对虚拟机的vm exit没有影响。...这个原因是:vCPU在Host是一个task,在Host上的CFS调度上,周期性产生irq,在处理irq的时候,就会从CFS中选择vRuntime最少的task来执行。...0x830 和0x80b 都是APIC_BASE_MSR~APIC_BASE_MSR + 0x3ff范围内的数据。

    7.4K131

    Linux中断虚拟化(二)

    图5 8259A和CPU连接 片选和地址译码器相连,当CPU准备访问8259A前,需要向地址总线发送8259A对应的地址,经过译码器后,译码器发现是8259A对应的地址,因此会拉低与8259A的CS连接的管脚的电平...读者不要将屏蔽和CPU通过cli命令关中断混淆,CPU关中断时,中断还会发送给CPU,只是在关中断期间CPU不处理中断。...= val & 0xf8; … } } 后来,随着APIC和MSI的出现,中断向量设置的更为灵活,可以为每个PCI设置其中断向量,这个中断向量存储在PCI设备的配置空间中。...设置ISR的一个典型作用是中断的作用是当ISR处理完中断,向8259A发送EOI时,8259A知道正在处理的IRn,比如说如果8259A使用的是循环优先级,那么需要最高优先级为当前处理的IRn的下一个。...事实上,目标CPU无须执行任何callback,也无须等待IPI返回,所以也无须使用smp_call_function_single,而是直接发送一个请求目标CPU重新调度的IPI即可,因此后来直接调用了函数

    7.3K10

    计算机中断浅析

    下面详细讲解中断的工作原理、类型、中断处理流程以及中断设计的关键组件,并附上逻辑示意图。 1. 中断的工作原理 当外部设备或内部事件需要处理器的注意时,它们会发送一个信号称为“中断信号”给处理器。...中断设计的关键组件 中断控制器(Interrupt Controller):管理多个中断源,决定哪个中断优先处理。常见的中断控制器包括 Intel 的 8259 PIC、APIC 等。...ISR的执行时间和复杂度直接影响CPU的资源占用。较长或复杂的ISR会消耗更多的CPU时间。 中断优先级和嵌套中断: 多个中断源可能同时发生,中断控制器会根据优先级决定处理的顺序。...中断屏蔽和恢复: 在某些关键任务执行期间,需要屏蔽特定中断以避免被打断。屏蔽和恢复中断的过程也会消耗CPU资源。...方法: 使用irqbalance服务:irqbalance是一个用户空间的守护进程,它自动分配中断请求(IRQ)到不同的CPU核上。

    97310

    一文完全读懂 | Linux中断处理

    什么是中断 中断 是为了解决外部设备完成某些工作后通知CPU的一种机制(譬如硬盘完成读写操作后通过中断告知CPU已经完成)。...另外一个重要的部分是 I/O APIC,主要是收集来自 I/O 装置的 Interrupt 信号且在当那些装置需要中断时发送信号到本地 APIC,系统中最多可拥有 8 个 I/O APIC。...每个本地 APIC 都有 32 位的寄存器,一个内部时钟,一个本地定时设备以及为本地中断保留的两条额外的 IRQ 线 LINT0 和 LINT1。...从广义上讲,中断可分为四类:中断、故障、陷阱、终止。这些类别之间的异同点请参看 表。...handler: 类型为 hw_interrupt_type 结构,表示IRQ线对应的硬件相关处理函数,比如 8259A中断控制器 接收到一个中断信号时,需要发送一个确认信号才会继续接收中断信号的,发送确认信号的函数就是

    4.2K21

    Linux内核17-硬件如何处理中断和异常

    x86架构中,每个处理器包含自己的APIC,每个APIC具有32位的寄存器,内部时钟,内部定时器以及2个额外的IRQ线,LINT0和LINT1,用作APIC的中断。...也就是说,中断重定向表就是外部IRQ到私有APIC的映射关系。 中断请求被分配到CPU上的方式有两种: 静态分配 按照重定向表中的定义把IRQ请求分配到相应的私有APIC高级可编程中断控制器上。...动态分配 IRQ请求被发送给正在运行低优先级进程的处理器的私有APIC中断控制器上。通俗地说,就是哪个处理器正在运行低优先级任务,IRQ请求就发送给谁。...当一个CPU想给另一个CPU发送中断时,它就会把目标CPU的私有APIC的标识符和中断号存储到自己APIC的中断命令寄存器(ICR)中。...私有APIC被禁止,LINT0和LINT1这两个IRQ请求线被分别配置为INTR和NMI管脚。 作为标准的I/O-APIC使用,只不过只有一个CPU而已。 2 异常 x86架构大约有20种不同的异常。

    2.6K10

    Linux 多核下绑定硬件中断到不同 CPU

    同样的,系统上的每个硬件设备都会被分配一个 IRQ 号,通过这个唯一的 IRQ 号就能区别张三和李四了。...在计算机里,中断是一种电信号,由硬件产生,并直接送到中断控制器(如 8259A)上,然后再由中断控制器向 CPU 发送信号,CPU 检测到该信号后,就中断当前的工作转而去处理中断。...现在来看一下中断控制器,常见的中断控制器有两种:可编程中断控制器 8259A 和高级可编程中断控制器(APIC),中断控制器应该在大学的硬件接口和计算机体系结构的相关课程中都学过。...先查看一下 IRQ 90 中断的 smp affinity,看看当前中断是怎么分配在不同 CPU 上的(ffffffff 意味着分配在所有可用 CPU 上): # cat /proc/irq/90/smp_affinity...合理的根据自己的生产环境和应用的特点来平衡 IRQ 中断有助于提高系统的整体吞吐能力和性能。

    6.4K83

    xv6(5) 中断代码部分

    ; 这部分用作$LINT0,LINT1$连接到了 $i8259A$ 和 $NMI$,但实际上只连接到了 $BSP$(最先启动的 $CPU$),只有 $BSP$ 能接收这两种中断。...ICR($Interrupt\ Command\ Register$)中断指令寄存器,当一个 $CPU$ 想把中断发送给另一个 $CPU$ 时,就在 ICR 中填写相应的中断向量和目标 LAPIC 标识...因为同样是向另一个 LAPIC 发送中断消息,所以ICR 寄存器的字段和 IOAPIC 重定向表项较为相似,都有 $Destination$ $Field$, $Delivery$ $Mode$, $Destination...| (T_IRQ0 + IRQ_TIMER)); //设置Timer的模式和中断向量号 lapicw(TICR, 10000000); //设置周期性计数的数字 case T_IRQ0 + IRQ_TIMER...它是主板上的一块可读写的并行或串行 $FLASH$ 芯片,是用来保存 $BIOS$ 的硬件配置和用户对某些参数的设定。

    70700
    领券