太平洋在线真人百家乐博彩平台注册送免费彩票_Linux凭空化KVM-Qemu分析之中断凭空化
[[353533]]亚博真人百家乐
本文转载自微信公众号「 LoyenWang」,作家 LoyenWang。转载本文请估计 LoyenWang公众号。
配景
Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基阐述:
KVM版块:5.9.1 QEMU版块:5.0.0 器用:Source Insight 3.5, Visio 著述同步在博客园:https://www.cnblogs.com/LoyenWang/1. 综合
号码大小:上期号码开出两大一小组合,最近100期两大一小组合出现了41次,其下期全小出现4次,两小一大出现11次,两大一小出现17次,全大出现8次,本期预计两大一小组合再次出现。
福彩3D历年第152期同期奖号为:992 亚博真人百家乐297 833 949 377 948 590 572 882 721 802 149 821 660 498 707 258 051 704 712 577 165。
网站以其专业的博彩攻略和技巧分享,为广大博彩爱好者提供最全面、最优质的博彩服务和最多样化的博彩游戏和赛事直播,让用户能够在博彩游戏中尽情享受博彩乐趣。本文会将ARM GICv2中断凭空化的总体框架和历程讲了了,这个也曾困扰我好几天的问题在被捋清的那一刻,让我有点每有会意,欢然忘食的嗅觉。
在请问中断凭空化之前,咱们应该对中断的作用与处理历程有个约莫的了解:

中断凭空化,将从中断信号产生到路由到vCPU的角度来张开,包含以下三种情况:
博彩平台注册送免费彩票皇冠体育 物理成立产生中断信号,路由到vCPU; 凭空外设产生中断信号,路由到vCPU; Guest OS中CPU之间产生中断信号(IPI中断);本文将围绕ARM-GICv2来形色,因此也不会波及到MSI以及ITS等特色,带着问题动身吧。
2. VGIC
在讲中断凭空化之前,有必要先讲一下ARMv8中Hypervisor的架构,因为波及到不同的Exception Level的切换; 在我阅读源代码时,把柄代码去匹配某篇Paper中的表面时,出现了一些邻接偏差,曾一度困扰了我好几天;VHE
VHE: Virtualization Host Extensions,用于因循Host OS运行在EL2上,Hypervisor和Host OS皆运行在EL2,不错减少Context切换带来的支出; 现在Cortex-A55, Cortex-A75, Cortex-A76因循VHE,其中VHE的罢休是通过HCR_EL2寄存器的操作来完结的;再补充一个常识点:
Host淌若运行在EL1时,不错通过HVC(Hypervisor Call)提示,主动trap到EL2中,从而由Hypervisor来给与; Guest OS不错设置成当有中断或极端时trap到EL2中,在中断或极端产生时,trap到EL2中,从而由Hypervisor来给与; EL2不错通过eret提示,反璧到EL1;本文的参谋基于Non-VHE系统。
2.1 GIC凭空化因循
GICv2硬件因循凭空化,来一张旧图:
先看一下物理GIC的功能模块:
GIC分红两部分:Distributor和CPU Interfaces,Distributor和CPU Interfaces皆是通过MMIO的形势来进行拜谒; Distributor用于设置GIC,比如中断的enable与disable,SMP中的IPI中断、CPU affinity,优先级处理等; CPU Interfaces用于连合CPU,进行中断的ACK(Acknowledge)以及EOI(End-Of-Interrupt)信号处理等,比如当CPU收到中断信号时,和会过CPU Interfaces进行ACK回话,何况在处理完中断后写入EOI寄存器,而在写EOI之前将不再收到该中断;简化图如下:
GICv2,提供了硬件上的凭空化因循,也即是凭空GIC(VGIC),从而中断的收受不需要通过Hypervisor来软件模拟:
针对每个vCPU,VGIC引入了VGIC CPU Interfaces和对应的Hypervisor罢休接口; 不错通过写Hypervisor罢休接口中的LR(List Register)寄存器来产生凭空中断,VGIC CPU Interface会将凭空中断信号送入到Guest中; VGIC CPU Interface因循ACK和EOI,因此这些操作也不需要trap到Hypervisor中来通过软件进行模拟,也减少了CPU收受中断的overhead; Distributor仍然需要trap到Hypervisor中来进行软件模拟,比如,当某个vCPU需要发送凭空IPI到另一个vCPU时,此时是需要Distributor来援手完得胜能的,这个过程就需要trap到Hypervisor;2.2 凭空中断产生历程
本文起头提到的三种中断信号源,如下图所示:
皇冠体育
①:物理外设产生凭空中断历程: 外设中断信号(Hypervisor还是将其设置成凭空中断)到达GIC; GIC Distributor将该物理IRQ发送至CPU; CPU trap到Hyp样式,此时将会退出Guest OS的运行,并复返到Host OS; Host OS将反应该物理中断,也即是Host OS驱动反应外设中断信号; Hypervisor往List Register写入凭空中断,Virtual CPU interface将virtual irq信号发送至vCPU; CPU将处理该极端,Guest OS会从Virtual CPU Interface读取中断景色进行反应; ②:凭空外设产生凭空中断历程:Qemu模拟外设,通过irqfd来触发Hypervisor进行中断注入;
提现Hypervisor往List Register写入凭空中断,Virtual CPU interface将virtual irq信号发送至vCPU;
CPU将处理该极端,Guest OS会从Virtual CPU Interface读取中断景色进行反应;
③:vCPU IPI中断历程:Guest OS拜谒Virtual Distributor,触发极端,trap到Hypervisor;
Hypervisor进行IO极端反应,并最终将凭空中断写入到List Register中,Virtual CPU interface将virtual irq信号发送至vCPU;
CPU将处理该极端,Guest OS会从Virtual CPU Interface读取中断景色进行反应;
上述形色的历程,本体中需要和凭空外设去交互,包括凭空外设框架(比如VFIO)等,而本文仅仅从中断的角度来分析,省去了外设部分。
表面部分讲完毕,下边就起头从源码中去印证表面了。
3. 软件完结历程
3.1 VGIC运行化
3.2 物理外设产生中断
假定你还是看过之前CPU的凭空化著述了,按照老例,先上图:
那凭空中断是什么本领注入的呢?没错,图中的kvm_vgic_flush_hwstate会将凭空中断注入,何况在__guest_enter切换回Guest OS时进行反应:
3.3 凭空外设产生中断
太平洋在线真人百家乐皇冠客服飞机:@seo3687软件历程如下图:
3.4 vCPU IPI
软件历程如下:
耗时耗力耗心血的一篇著述终于写完毕,ARMv8 GICv2中断凭空化的总体框架和历程应该算是理顺了,全网相干主题的著述并未几,但愿能给带来点匡助吧。
淌若对你灵验的话,在看,共享,打赏三连吧。
参考
《arm_gic_architecture_specification》《ARM_Interrupt_Virtualization》《VM-Support-ARM》《CoreLink GIC-400 Generic Interrupt Controller》《Virtualization in the ARM Architecture》https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=721eecbf4fe995ca94a9edec0c9843b1cc0eaaf3