首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏hank

    【分享】OpenAMP的RPMSG_ADDR_ANY含义

    // rpmsg.c int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev, const char // rpmsg.c int rpmsg_create_ept(struct rpmsg_endpoint *ept, struct rpmsg_device *rdev, const char = rpmsg_get_ept_from_addr(rdev, rp_hdr->dst); if (ept->dest_addr == RPMSG_ADDR_ANY) { /* * dest_addr = rp_hdr->src; } status = ept->cb(ept, (void *)RPMSG_LOCATE_DATA(rp_hdr), rp_hdr ->len, ept->addr, ept->priv); } ... ... }

    1.5K20发布于 2020-07-16
  • 来自专栏帅云霓的技术小屋

    虚拟化与云计算硬核技术内幕 (8) —— “饭圈互撕”的末路

    同时,Intel还引入了新的页表机制:EPT(Extended Page Table)。从字面上理解,EPT是对原有页表机制的扩展。实质上,它是实现了从虚拟机内存地址到物理地址的映射。 EPT的基本原理如下图: 虚拟化环境下,虚拟机使用的是客户机虚拟地址GVA(Guest Virtual Address)。 EPT页表是4级页表,查表分为五个步骤: MMU会根据GPA的bit 47~bit39,在EPTP(EPT Pointer)寄存器指向的PML4表中找到EPT Page directory pointer table的基址; 根据EPT Page directory pointer table的基址,加上bit38~bit28作为偏移量找到EPT Page Directory Pointer,取出其中Page ; 在EPT Page Table中,根据bit20~bit12的偏移量,找到EPT Page Entry,提取里面bit51~bit12得到Page的基址; 拿到Page Table基址,与bit11

    59920编辑于 2022-09-08
  • 来自专栏腾讯云TStack专栏

    内存虚拟化到底是咋整的?

    EPT页表:硬件层面引入EPTP寄存器。直接将Guest的CR3加载到宿主机的MMU中。同时EPT页表被载入专门的EPT页表指针寄存器 EPTP。 2.2 EPT ? EPT 技术在原有客户机页表对客户机虚拟地址到客户机物理地址映射的基础上引入了 EPT页表来实现客户机物理地址到宿主机物理地址的另一次映射,这两次地址映射都是由硬件自动完成。 客户机运行时,客户机页表被载入 CR3,而 EPT 页表被载入专门的EPT 页表指针寄存器 EPTP。 对 EPT 写权限引起的异常,KVM 则通过更新相应的 EPT 页表来解决。 由此可以看出,EPT 页表相对于前述的影子页表,其实现方式大大简化。 4.6 EPT VM-exit ①设置cr3 ?

    4.2K00发布于 2018-05-30
  • 来自专栏韩曙亮的移动开发专栏

    【Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )

    hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi ept tsc_offset vtpr mtf ept vpid unrestricted_guest bugs : spectre_v1 spectre_v2 spec_store_bypass swapgs tsc_offset vtpr mtf ept vpid unrestricted_guest bugs : spectre_v1 spectre_v2 spec_store_bypass swapgs tsc_offset vtpr mtf ept vpid unrestricted_guest bugs : spectre_v1 spectre_v2 spec_store_bypass swapgs tsc_offset vtpr mtf ept vpid unrestricted_guest bugs : spectre_v1 spectre_v2 spec_store_bypass swapgs

    34.5K20编辑于 2023-03-30
  • 来自专栏虚拟化云计算

    一文看懂影子页表和扩展页表

    三.扩展页表技术/EPT 嵌套页表技术/NPT 从Intel的Nehalem架构开始,EPT(Extended Page Tables)就作为CPU的一个特性加入到CPU硬件中去了。 硬件层面引入EPTP寄存器,来指向EPT页表基地址。Guest运行时,Guest页表被载入PDBR,而 EPT 页表被载入专门的EPT 页表指针寄存器 EPTP。 GVA->GPA的转换依然是通过查找原来页表完成,而GPA->HPA的转换则通过查找EPT来实现,每个guest VM有一个由VMM维护的EPT。 如果在EPT中没有命中,则产生EPT violation异常,这是Host中VMM层的page fault,不需要vm exit,只需要按照Host中的page fault处理就可以了。 所以说EPT/NPT MMU解耦了GVA->GPA转换和GPA->HPA转换之间的依赖关系。并且一个VM只需要一套EPT页表,减少了内存开销,维护也比较简单。

    3.6K20编辑于 2023-03-27
  • 来自专栏Linux云计算网络

    内存虚拟化

    EPT 技术 这方面 Intel 和 AMD 走在了最前面,Intel 的 EPT 和 AMD 的 NPT 是硬件辅助内存虚拟化的代表,两者在原理上类似,本文重点介绍一下 EPT 技术。 如下图是 EPT 的基本原理图示,EPT 在原有 CR3 页表地址映射的基础上,引入了 EPT 页表来实现另一层映射,这样,GVA->GPA->HPA 的两次地址转换都由硬件来完成。 ? 到 HPA 的转换(实际上,CPU 会首先查看硬件 EPT TLB 或者缓存,如果没有对应的转换,才会进一步查看 EPT 页表),如果 HPA 为空呢,则 CPU 会抛出 EPT Violation 在中断处理程序中会产生 EXIT_REASON_EPT_VIOLATION,Guest 退出,VMM 截获到该异常后,分配物理地址并建立 GVA 到 HPA 的映射,并保存到 EPT 中,这样在下次访问的时候就可以完成从 总结 内存虚拟化经历从虚拟内存,到传统软件辅助虚拟化,影子页表,再到硬件辅助虚拟化,EPT 技术的进化,效率越来越高。

    2.1K81发布于 2018-01-11
  • 来自专栏闻道于事

    PL/SQL 编程(二)游标、存储过程、函数

    (ept_20000, -20000); ept_20001 EXCEPTION; PRAGMA EXCEPTION_INIT(ept_20001, -20001); ept_20002 ('ept_20001部门编码、部门名称不能为空'); WHEN ept_20002 THEN DBMS_OUTPUT.PUT_LINE('ept_20002没有该地点'); WHEN ; PRAGMA EXCEPTION_INIT(ept_20000, -20000); ept_20001 EXCEPTION; PRAGMA EXCEPTION_INIT(ept_20001 , -20001); ept_20002 EXCEPTION; PRAGMA EXCEPTION_INIT(ept_20002, -20002); BEGIN insert_dept( ('ept_20001部门编码、部门名称不能为空'); WHEN ept_20002 THEN DBMS_OUTPUT.PUT_LINE('ept_20002没有该地点'); WHEN

    4.2K71发布于 2018-02-28
  • 来自专栏赤道企鹅的博客

    [Virtualization] Peach VM - 基于Intel VMX的简易虚拟机实例分析

    ()初始化EPT各级页表,传入全局变量ept_pointer的引用和刚刚计算出的guest_memory_pa: init_ept(&ept_pointer, guest_memory_pa); init_ept 再次使用kmalloc拿到一块内存,用于存放EPT页表本身: ept_memory = (u8 *) kmalloc(EPT_MEMORY_SIZE, GFP_KERNEL); memset(ept_memory , 0, EPT_MEMORY_SIZE); ept_va = (u64) ept_memory; ept_pa = __pa(ept_memory); 初始化EPTP: init_ept_pointer 表入口 */ entry = (u64 *) (ept_va + 0x2000); /* 为EPT page-directory表添加一个EPT Page表项 */ init_pde(entry, ept_pa 表的ept_pointer的物理地址(PA)写进VMCS Region中: 注意ept_pointer指针指向一个保存了EPT表地址的内存位置(而不是直接指向EPT表) vmcs_field = 0x0000201A

    2.7K31编辑于 2022-08-01
  • 来自专栏音视频技术

    MPEG-DASH视频传输中的常见问题

    为了将视频切片对应到媒体缓冲区中的目标位置,MSE对切片的内部呈现时间戳(既最早的呈现时间EPT,Earliest Presentation Time)添加了可配置的timestampOffset。 让我们假设主要内容中的第一个切片和广告内容中的第一个切片的EPT为0。在DASH视频流中,一个切片的呈现时间与其分段时间的开始有关。 = Period@start = 8BufferPosition(Seg 1) = MSE.timestampOffset + EPT = 8 + 0 = 8 BufferPosition(Seg 2 ) = MSE.timestampOffset + EPT = 8 + 2 = 10 但问题出现在分段时间3。 因为我们从第5个切片开始,EPT没有设置为0。

    1.9K30编辑于 2022-05-30
  • 来自专栏云原生布道专栏

    【重识云原生】计算第2.4节——主流虚拟化技术之KVM

    本文主要以Intel EPT技术为例进行阐述。 2.2.3.2 EPT页结构 Intel处理器设计了EPT的页结构用来将保存GPA到HPA的映射,因此说EPT是硬件支持的,EPT的页结构如下图的咖啡色部分,整个页结构有4级,和4-level 2.2.3.8 EPT缺页异常处理 在GPA到HPA转换的过程中,由于缺页、写权限不足等原因也会导致客户机退出,产生 EPT 异常。 如没有所请求的GPA到HPA的映射,则查询EPT,获得gCR3所映射的HPA,并将其作为Guest页目录表的基址,并同步到EPT TLB。 假设Guest机有m级页表,宿主机EPT有n级,在TLB均miss的最坏情况下,会产生m*n次内存访问,完成一次客户机的地址翻译,EPT硬件通过增大硬件EPT TLB来尽量减少内存访问。

    4K20编辑于 2022-04-08
  • 来自专栏LINUX阅码场

    Linux对机密计算的支持

    Intel-TDX模块提供安全EPT管理功能给虚拟机管理器(VMM),用于向安全EPT添加或删除映射,并通过执行安全策略来维护内存布局的完整性。 的安全EPT中。 PAMT作为一个跟踪数据结构,帮助确保页面只能在安全EPT中映射到一个GPA。它提供给VMM函数来向安全EPT添加4K, 2M或1G的映射。 基于安全EPT的地址转换架构支持将大页映射到安全/共享EPT,并在适当的情况下将转换缓存为大页。 在TD执行时会有两个EPT用于TD:一个安全EPT用于提供私有GPA到PA的转换,以及一个共享EPT用于提供共享GPA到PA的转换。

    2.2K31编辑于 2023-08-21
  • 来自专栏全志嵌入式那些事

    全志R128 SDK HAL 模块开发指南之 MSGBOX

    .remote_id = -1, .read_ch = -1, .write_ch = -1, .recv_queue = NULL, }; struct msg_endpoint ept demo.recv_queue) { printf("Failed to create receive queue\n"); ret = -1; goto out; } ept.rec = (void *)recv_callback; ept.private = &demo; } ret = hal_msgbox_alloc_channel(&ept, demo.remote_id msgbox channel\n"); goto delete_recv_queue; } if (do_send) { ret = hal_msgbox_channel_send(&ept break; } } } printf("hal_msgbox exited\n"); ret = 0; free_channel: hal_msgbox_free_channel(&ept

    35210编辑于 2024-05-16
  • 来自专栏技术杂记

    KVM基础

    tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept

    1.6K10编辑于 2022-01-19
  • 来自专栏皮振伟的专栏

    ​[kvm][qemu]vm exit的优化

    ] [48] count = 45 [ EXIT_REASON_EPT_MISCONFIG] [49] count = 61918 对于e1000网卡来说,最大量的vm exit原因是 EXIT_REASON_EPT_MISCONFIG,也就是guest使用mmio访问虚拟网卡设备的时候产生的。 virtio vring buf中,不需要使用大量的端口模拟, 相对来说量不是很大的EXIT_REASON_EPT_MISCONFIG用来做virtio kick host。 ] [49] count = 21996 对于virtio-net vhost来说,性能比virtio-net更上了一个台阶,EXIT_REASON_EPT_MISCONFIG用来做virtio kick 数据都是使用virtio vring buf来传输的, EXIT_REASON_EPT_MISCONFIG是guest用来kick host用的。

    7.4K131发布于 2018-04-09
  • 来自专栏韦东山嵌入式

    Tina Linux E907开发指南

    Linux 端: #include <linux/rpmsg.h> # 创建端点 int fd; struct rpmsg_ept_info info; char ept_dev_name[32]; strcpy , 32, "/dev/rpmsg%d", info.id); fd = open(ept_dev_name, O_RDWR); write,read,poll... close(fd); # 关闭节点 fd = open(ctrl_dev, O_RDWR); ret = ioctl(fd, RPMSG_DESTROY_EPT_IOCTL, &info); close(fd); melis 端: 方法 1:基于rpmsg_ctrl 驱动,等待主机建立连接 // 头文件 #include <openamp/sunxi_helper/openamp.h> static int ept_cb(struct rpmsg_ept_client *client) { // client绑定,每个client代表一个连接 // client->priv和client->ept->priv 可供用户使用 } int

    1.4K40编辑于 2023-02-25
  • 来自专栏Flowlet

    Intel 虚拟化技术(Intel® VT):CPU 虚拟化与内存虚拟化

    Intel EPT 是Intel VT-x 提供的内存虚拟化支持技术,其基本原理下图所示。在原有的 CR3 页表地址映射的基础上,EPT 引入 EPT 页表来实现另一次映射。 比如:假设客户机页表和 EPT 页表都是 4 级页表,CPU 完成一次地址转换的基本过程如下: 客户机 CR3 寄存器给出的是 GPA,所以,CP U通过 EPT 页表将客户机 CR3 中的 GPA 转换为 HPA:CPU 首先查找 EPT TLB,如果没有相应的记录,就进一步查找 EPT 页表,如果还没有,CPU 则抛出 EPT Violation 异常交给 VMM 处理。 获得 L3 页表项的GPA 后,CPU 通过查询 EPT 页表来将 L3 的 GPA 转换为 HPA。 正如上图所示,CPU 需要 5 次查询 EPT 页表,每次查询都需要 4 次内存访问。这样,在最坏的情况下总共需要 20 次内存访问。EPT 硬件通过增大 EPT TLB 尽量减少内存访问。

    7K40编辑于 2023-08-11
  • 来自专栏韦东山嵌入式

    全志 Tina Linux RISC-V E907核心开发指南支持百问网V85x系列开发板100ask-v853-pro v851s等

    Linux 端: #include <linux/rpmsg.h> # 创建端点 int fd; struct rpmsg_ept_info info; char ept_dev_name[32]; strcpy , 32, "/dev/rpmsg%d", info.id); fd = open(ept_dev_name, O_RDWR); write,read,poll... close(fd); # 关闭节点 fd = open(ctrl_dev, O_RDWR); ret = ioctl(fd, RPMSG_DESTROY_EPT_IOCTL, &info); close(fd); melis 端: 方法 1:基于rpmsg_ctrl 驱动,等待主机建立连接 // 头文件 #include <openamp/sunxi_helper/openamp.h> static int ept_cb(struct rpmsg_ept_client *client) { // client绑定,每个client代表一个连接 // client->priv和client->ept->priv 可供用户使用 } int

    1.2K20编辑于 2022-12-28
  • 来自专栏技术杂记

    KVM基础1

    tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept tsc_deadline_timer aes xsave avx lahf_lm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept

    80820编辑于 2021-12-03
  • 来自专栏虚拟化笔记

    x86虚拟内存和qemu内存虚拟化

    拿用的最多的EPT来说,guest有自己的页目录,kvm又维护了一个guest物理地址到host物理地址映射的页目录,cpu进入guest模式时一个虚拟地址要依次查找这两个页目录,guest查找自己的页目录 如果guest在自己页目录中找到,继续查找kvm维护的页目录,如果找不到发生EPT violation exit,kvm调用handle_ept_violation增加guest物理地址到host物理地址映射的页目录表项 guest启动时是实模式,还没有页目录,没有MMU功能,早期guest实模式时由qemu来模拟,后来Intel CPU中加入了Unrestricted Guest,EPT开始支持实模式。 id=3a624e29c7587b79abab60e279f9d1a62a3d4716 guest访问自己的设备内存,qemu和kvm对这些内存做了特殊标志,guest访问就触发EPT misconfig ,然后kvm调用handle_ept_misconfig处理,根据地址范围找到属于的设备,然后调用设备模拟的代码,如果kvm搞不定退回qemu继续处理,kvm和qemu要做的事情就是把guest的物理地址转换成

    1.8K10发布于 2021-02-24
  • 来自专栏量子化学

    XYG3型泛函在ORCA中的使用

    0.32110000 | 0.3211 ENSCF | -56.37431512 | EPT2 -0.26373254 | EDH | -56.45899964 | (ENSCF+EPT2 nopop nofrozencore %mp2 dlpno &{dlpno} end Step_End Alias pt2 read Enscf = SCF_ENERGY[nscf]; read Ept2 = MP2_CORR_ENERGY[pt2]; Edh = (Enscf + Ept2*pt2_coeff); ORCA允许在脚本中定义若干个步骤(以New_Step开始,Step_End结束),

    2.2K10编辑于 2022-03-31
领券