皇冠现金
太平洋在线真人百家乐博彩平台注册送免费彩票_Linux凭空化KVM-Qemu分析之中断凭空化
你的位置:| 皇冠现金 > 皇冠app > 太平洋在线真人百家乐博彩平台注册送免费彩票_Linux凭空化KVM-Qemu分析之中断凭空化

太平洋在线真人百家乐博彩平台注册送免费彩票_Linux凭空化KVM-Qemu分析之中断凭空化

发布日期:2023-10-30 07:55    点击次数:74

太平洋在线真人百家乐博彩平台注册送免费彩票_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中断凭空化的总体框架和历程讲了了,这个也曾困扰我好几天的问题在被捋清的那一刻,让我有点每有会意,欢然忘食的嗅觉。

在请问中断凭空化之前,咱们应该对中断的作用与处理历程有个约莫的了解:

美高梅娱乐城

中断是处理器用于异步处理外围成立央求的一种机制; 外设通过硬件管脚连合在中断罢休器上,并通过电信号向中断罢休器发送央求; 中断罢休器将外设的中断央求路由到CPU上; CPU(以ARM为例)进行样式切换(切换到IRQ/FIQ),保存Context后,把柄外设的中断号去查找系统中还是注册好的Handler进行处理,处理完成后再将Context进行复原,接着之前打断的履行流陆续move on; 中断的作用不局限于外设的处理,系统的弯曲,SMP核间交互等,皆离不开中断;

中断凭空化,将从中断信号产生到路由到vCPU的角度来张开,包含以下三种情况:

博彩平台注册送免费彩票皇冠体育 物理成立产生中断信号,路由到vCPU; 凭空外设产生中断信号,路由到vCPU; Guest OS中CPU之间产生中断信号(IPI中断);

本文将围绕ARM-GICv2来形色,因此也不会波及到MSI以及ITS等特色,带着问题动身吧。

2. VGIC

在讲中断凭空化之前,有必要先讲一下ARMv8中Hypervisor的架构,因为波及到不同的Exception Level的切换; 在我阅读源代码时,把柄代码去匹配某篇Paper中的表面时,出现了一些邻接偏差,曾一度困扰了我好几天;

Non-VHE Linux ARM架构的Hypervisor在引入时,遴荐的是左图中的系统架构,以便能充分欺诈Linux现存的机制,比如scheduler等; KVM/ARM的完结遴荐了split样式,分红Highvisor和Lowvisor,这样不错充分欺诈ARM处理器不相似式的公正,比如,Highvisor不错欺诈Linux Kernel的现存机制,而Lowvisor又不错欺诈Hyp Mode的特权。此外,带来的公正还包含了不需要遍及修改Linux内核的代码,这个在刚引入的本领是更容易被社区所接受的; Lowvisor有三个流弊功能:1)对不同的履行Context进行羁系与保护,比如VM之间不会相互影响;2)提供Guest和Host的相互切换,也即是所谓的world switch;3)提供一个凭空化trap handler,用于处理trap到Hypervisor的中断和极端;

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运行化

kvm_init为总进口,过问vgic_v2_probe函数,完成GICv2的运行化操作,皇冠网址此处还会跟GICV2内核中的驱动交互,去获得gic_kvm_info信息,主要包括基地址信息等,便于后续操作中去进行设置操作; 从蓝色部分的函数调用不错看出,运行化完成后,会注册一个kvm_device_ops的操作函数集,以便反应用户层的ioctl操作; 用户层调用ioctl(vm_fd, KVM_CREATE_DEVICE, 0),最终将调用vgic_create函数,完成VGIC成立的创建,在该创建函数中也会注册kvm_device_fops操作函数集,用于成立属性的诞生和获得; 用户层通过ioctl(dev_fd, KVM_SET_DEVICE_ATTR, 0)/ioctl(dev_fd, KVM_GET_DEVICE_ATTR, 0)来进行属性的诞生和获得,最终也会调用vgic_v2_set_attr/vgic_v2_get_attr,以便完成对VGIC的诞生;

3.2 物理外设产生中断

假定你还是看过之前CPU的凭空化著述了,按照老例,先上图:

皇冠博彩 先来一个先决条目:HCR_EL2.IMO诞生为1,通盘的IRQ皆将trap到Hyp样式,因此,当Guest OS运行在vCPU上时,物理外设触发中断信号时,此时将切换到EL2,然后履行el1_irq; 在Host中,当用户态通过KVM_RUN罢休vCPU运行时,在kvm_call_hyp_ret将触发Exception Level的切换,切换到Hyp样式并调用__kvm_vcpu_run_nvhe,在该函数中__guest_enter将切换到Guest OS的context,并最终通过eret复返到EL1,Guest OS端庄起头运行; 中断触发后el1_irq将履行__guest_exit,这个过程将进行Context切换,也即是跳转到Host切入Guest的阿谁点,复原Host的履行。堤防了,这里边有个点很诱骗,el1_irq和__guest_exit的履行皆是在EL2中,而Host在EL1履行,之前我一直莫得找到eret来进行Exception Level的切换,最终发现蓝本是kvm_call_hyp_ret调用时,去极端向量表中找到对应的履行函数,本体会调用do_el2_call,在该函数中完成了Exception Level的切换,最终回到了EL1; 切回到Host中时,当local_irq_enable开放中断后,物理pending的中断就不错被Host欢娱的反应了;

那凭空中断是什么本领注入的呢?没错,图中的kvm_vgic_flush_hwstate会将凭空中断注入,何况在__guest_enter切换回Guest OS时进行反应:

vgic_cpu结构体中的ap_list_head链表用于存放Active和Pending景色的中断,这也即是定名为ap_list_head的原因; kvm_vgic_flush_hwstate函数会遍历ap_list_head中的中断信息,并填入到vgic_lr数组中,最终和会过vgic_restore_state函数将数组中的内容更新到GIC的硬件中,也就完成了中断的注入了,当__guest_enter履行后,切换到Guest OS,便不错反应凭空中断了; 当从Guest OS退出后,此时需要调用kvm_vgic_sync_hwstate,这个操作相等于kvm_vgic_flush_hwstate的逆操作,将硬件信息进行保存,并对短期内不会处理的中断进行剔除;

3.3 凭空外设产生中断

太平洋在线真人百家乐皇冠客服飞机:@seo3687

irqfd提供了一种机制用于注入凭空中断,而这个中断源不错来自凭空外设; irqfd是基于eventfd的机制来完结的,用于用户态与内核态,以及内核态之间的事件奉告; 事件源不错是凭空成立,比如VFIO框架等,这个模块还莫得去潜入了解过,不敢妄言,后续系列会跟进;

软件历程如下图:

运行化的操作包括两部分:1)诞生Routing entry(【a】vgic_init运行化的本领创建默许的entry;【b】:用户层通过KVM_SET_GSI_ROUTING来诞生);2)诞生irqfd; 运行化诞生完成后,系统不错随时反应事件触发了,当事件源触发时,将弯曲到irqfd_inject函数; irqfd_inject函数完成凭空中断的注入操作,在该函数中会去回调set函数,而set函数是在Routing entry运行化的本领诞生好的; 本体的注入操作在vgic_irqfd_set_irq函数中完成; kvm_vcpu_kick函数,将Guest OS切回到Host OS,中断注入后再切回到Guest OS就不错反应了;

3.4 vCPU IPI

Host对VGIC的Distributor进行了模拟,当Guest尝试拜谒VGIC Distributor时,将触发极端操作,trap到Hyp样式; Hypervisor对极端进行处理,完成写入操作,并最终切回到Guest OS进行反应; 肤浅来说,Hypervisor即是要对中断进行处分,没错,即是这样强势;

软件历程如下:

表层调用ioctl(vcpu_fd, KVM_RUN, 0)时,最终将调用到vgic_register_dist_iodev函数,该函数完成的作用即是将VGIC的Distributor注册为IO成立,以便给Guest OS来进行拜谒; vgic_register_dist_iodev分为两个功能模块:1)运行化struct vgic_registers_region结构体字段和操作函数集;2)注册为MMIO总线成立; struct vgic_registers_region界说好了不同的寄存器区域,以及相应的读写函数,vgic_v2_dist_registers数组最终会提供给dispach_mmio_read/dispach_mmio_write函数来查询与调用; 当Guest OS拜谒Distributor时,触发IO极端并切换回Host进行处理,io_mem_abort会把柄总线的类型(MMIO)去查找到对应的读写函数进行操作,也即是图中对应的dispatch_mmio_read/dispach_mmio_write函数,最终完成寄存器区域的读写; 图中的红色线,代表的即是极端处理的履行流,不错说是一目了然了。

耗时耗力耗心血的一篇著述终于写完毕,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

 



>> 澳门银河 | 海地队出线 中国女足全国杯小组赛敌手一齐说明..

>> 欧博电子游戏博彩_生肖鼠,这10年能挣钱又能粗拙获得老公的匡助..

>> 平博捕鱼博彩电竞_李小龙圆寂后,他最爱的太太奈何了?再婚两年惨遭摒弃,..

>> 国外博彩平台 | 日本有的东谈主家里明明有床,为何可爱睡地板呢?蓝本有..

>> ag网站被黑客攻击_【我在中国当大使】感受使馆里的“中语热”..

>> 皇冠骰宝博彩规则_2023年西藏首届G219(极地)摩托车承接赛暨极地..

>> 国外博彩平台 | 日本有的东谈主家里明明有床,为何可爱睡地板呢?蓝本有..

>> 香港六合彩炸金花博彩赌博_9天前,“大衣哥”犬子成婚了!儿媳备受柔软,..

>> 北京赛车棋牌博彩平台注册送免费电竞比赛_王念念佳来岁的收入将跳跃200..

>> 排列三娱乐城博彩网站评测_剧情绝佳的三本异界大陆高分演义,书迷认证..