自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(239)
  • 收藏
  • 关注

转载 浅度剖析内核 RDT 框架

该特性需要 OS 支持,还是 图1,OS 为每个 thread 分配一个 RMID,在每个 thread 被调度上来的时候,将该 thread 对应的 RMID 写入其所在 CPU 的 RMID 寄存器,如此即可精准实现 per-thread 的资源监控。比如 T0 - T1 期间,CPU 可访问的资源将被 CLOSID-0 对应的 CBM-0 描述限制,如果 CBM-0 描述的是只能使用 LLC 的 20%,则 T0 - T1 期间 CPU 最多只能使用 LLC 的 20%。如你所知,内核中一切皆文件。

2024-04-15 21:15:56 9

转载 perf 后端:硬件 PMU(下)

perf_event_read:此函数通过 smp_call,一路调用到 PMC 底层寄存器读操作(x86_perf_event_update),通过 rdpmcl(底层是 RDPMC 指令),根据事件的 event_base_rdpmc,读出 PMC 硬件中的值,并将读出的硬件数据,做符号扩展至 64 bit,并将数值存到事件的 count 域中。注意,PMC 第一次使用时,其中可能有残留的值(上一次被使用后残留的值),为了获取准确的读数,我们先读出其初始值,后续取每两次读数的差值,也即净增长值。

2024-04-11 11:26:37 9

转载 perf 后端:硬件 PMU(上)

值得注意的是:IA32_PERF_GLOBAL_CTRL 寄存器中,为 fixed PMC 预留的偏移是从 32 开始的,换句话说,至少从目前的 Intel CPU 设计来说,其为 generic PMC 预留的数量为 32。PMC 的分时复用问题:如你所知,PMC 的数量有限,如果要监控的事件数超出 PMC 数(具体来说,对某个 CPU 有多个监控事件组,所有事件组的事件数总和完全有可能超过 PMC 总数),必然要求 perf 框架有 PMC 分时复用的机制。如果不弄清楚底层,代码解构起来会非常吃力。

2024-04-11 11:18:49 12

转载 从linux设备驱动模型看virtio初始化

如果有则判断设备的pci ID和驱动设置的id_table中是否一样,如果一样说明设备和驱动匹配(这里设备的vendor_id和virtio-pci的virtio_pci_id_table匹配),将struct device的driver指针指向驱动,然后调用pci总线的probe函数,即pci_deivce_probe函数。virtio_pci_probe函数主要负责完成pci_dev部分的初始化,已经virtio_device部分初始化,然后调用register_virtio_device函数。

2024-04-03 14:57:57 23

原创 jtag原理

https://liangkangnan.gitee.io/2020/03/21/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BARISC-V%E8%B0%83%E8%AF%95/https://liangkangnan.gitee.io/2020/03/21/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BARISC-V%E8%B0%83%E8%AF%95/

2024-04-03 14:26:50 92

原创 acrn guest 内存分析

然后BE会将这个地址从gpa转换成 SOS user space的hva,然后就直接去访问对应的地址来取数据了,相当于是一个shared memory based I/O virtualization,你说的case是要创建一种特殊的虚拟要彻底和SOS隔离,这种一般是直接起pre-launched VM,这种VM不需要让SOS取给它分配资源,而且hv直接分配好了就行了,也可以抠掉内存,像你说的,这样I/O虚拟化就没法搞了,或者搞一个特殊的page来做shared memory。

2024-04-03 13:19:47 1165

转载 linux电源管理——C-state,P-state,turbo分析

这种设计带来的好处是使得 governor 和 CPU 相关的变频驱动程序的开发可以相互独立进行,并在{BANNED}最佳大限度上实现代码重用,内核开发人员在编写和试验新的 governor 时不会再陷入到某款特定 CPU 的变频技术的硬件实现细节中去,而 CPU 生产厂商在向 Linux 内核中添加支持其特定的 CPU 变频技术的代码时只需提供一个相对来说简单了很多的驱动程序,而不必考虑在各种不同的应用场景中如何选择合适的运行频率这些复杂的问题。换句话说,CPU上P-state的设定,似乎是一个期望值。

2024-03-29 20:35:04 58

转载 Intel VT-d实现概述

当VT-d硬件接收到其旗下I/O设备传递过来的中断请求时,会先查看自己的中断重定向功能是否打开,如果没有打开则,直接上传给LAPIC。如果中断重定向功能打开,则会查看中断请求的格式,如果是不可重定向格式,则直接将中断请求提交给LAPIC。如果是可重定向的格式,则会根据算法计算Interrupt_Index值,对中断重定向表进行索引找到相应的IRTE。

2024-03-29 17:27:09 27

原创 X64指令手册

参考网址: ref.x86asm.net。登录后才能查看或发表评论,立即。

2024-03-28 11:54:32 251

转载 VirtIO实现原理——数据传输演示

shadow_avail_idx是device从VQ的avail ring结构的idx字段取出的值,是guest记录的VQ当前可用的位置。Host首先取自己的工作位置last_avail_idx,初始化时被设置为0,再从VQ上取出Guest的工作位置avail_idx_shadow,如果Guest比Host位置超前说明Guest添加了buffer(从下图小绿人看,Guest每添加1次,小绿人就往下移动1个Avain Ring的单位),需要从VQ上取出数据,否则VQ为空,不做任何操作,返回。

2024-03-25 21:05:52 27

转载 VirtIO实现原理——vring数据结构

VRing包含数据传输的所有要素,包括Descriptor Table,Avail Ring和Used Ring,其中Descriptor Table是一个数组,每个Entry描述一个数据的buffer,Descriptor Table存放的是指针,Avail Ring和Used Ring中的ring数组则不同,它们存放的是索引,用来间接记录Descriptor chain。对于发送数据,buffer对于后端来说是只读的,对于接受数据,后端需要往buffer中写数据,所以是可写的。

2024-03-25 21:02:16 22

原创 X64 页表结构

其中,PML4 Offset对应PML4表项的索引,PDPT Offset对应PDPT表项的索引,PD Offset对应PD表项的索引,PT Offset对应PT表项的索引。总结:虚拟地址通过PML4转换到物理地址的过程是由四级页表结构完成的,根据不同的偏移量找到对应的表项,然后根据表项中存储的页的物理地址得到物理地址。从PML4表项中获取PDPT表的起始物理地址,并加上PDPT Offset乘以8(一个表项大小)得到PDPT表项的物理地址。从PT表项中获取对应页的物理地址。

2024-03-12 18:00:43 215

原创 x86 Assembly Language Reference Manual

转 https://docs.oracle.com/cd/E26502_01/html/E28388/eoiyg.html。

2024-03-12 14:07:37 727

原创 qemu gdb不停在断点

转:https://blog.51cto.com/seekstar/5756808。

2024-03-07 17:53:32 262

转载 Intel VT-d(5)- DMAR表组织结构

主要包括两方面的信息,一是提供VT-d重定向硬件寄存器基地址,为系统软件访问VT-d硬件寄存器提供入口(各个偏移量所指向的具体寄存器在VT-d的spec中有详细的约定,即VT-d硬件的具体实现);在系统上电的时候,BIOS/UEFI负责检测并初始化重定向硬件(即VT-d硬件),为其分配相应的物理地址,并且以ACPI表中的DMAR(DMA Remapping Reporting)表的形式告知VT-d硬件的存在。一个ANDD表用于表示一个以ACPI name-space规则命名,并且可发出DMA请求的设备。

2024-03-04 17:24:28 40

转载 Intel VT-d(4)- Interrupt Posting

该状态的一个表现形式就是将Posted Interrupt Descriptor的Notification Vector字段设置为WNV(Wake-up Notification Vector),并且SN(Suppress Notification)设置为0,即任何到达该Posted Interrupt Descriptor的中断请求都会触发Notification Event,让VMM唤醒vCPU,让vCPU处理中断请求。当vCPU一使能中断的时候,就能够立马识别到该中断。

2024-03-04 17:22:08 18

转载 Intel VT-d(3)- 中断重映射

总的来说,VT-d的中断重映射就是指VT-d会拦截其下面挂载的I/O设备产生的中断,然后根据接收到的中断请求索引中断重映射表,根据找到的中断重映射表的表项产生新的中断请求,上传到CPU的LAPIC。VT-d硬件中除了包含DMA重映射硬件外,也会包含中断重映射硬件,该中断重映射单元让系统软件能够对I/O设备产生的中断(包括从I/O APIC发送过来的中断,I/O设备产生的以MSI、MSI-X形式传递的中断,不包含中断重映射硬件本身产生的中断)的传输进行控制,而不仅仅取决于硬件的连接。

2024-03-04 17:20:02 24

转载 Intel VT-d(2)- DMA重定向

页表的层数会根据具体使用的页框大小而变化,页框大小可以是4KB,2MB和1GB,下图以4KB为例。对于Request-with-PASID而言,其请求中包含的地址转换页表入口索引,即(PCI、Bus、Device和Function值)是一样的,但是其包含的请求地址类型不一样,是GVA,而不是GPA,故需要现将GVA转化为GPA(即为First-Level-Translation),然后再将得到的GPA转化为HPA,即Second-Level-Translation,才能实现最终的物理内存访问。

2024-03-04 17:16:45 20

转载 Intel VT-d(1)- 简介

VMM软件负责I/O设备的分配,即将指定I/O设备和相应的VM对应起来,并且负责建立中断重定向关系表和I/O地址转换页表,并将这些转换关系的配置设置到VT-d硬件设备上,而I/O设备发起的中断请求或者DMA内存访问请求中带有相应设备的ID,这样VT-d硬件单元就可以通过硬件查找的方式将不同的I/O设备中断和内存访问请求重定向到相应的VM上,从而达到隔离不同VM的I/O设备的目的。即VMM的软件模拟一个现有的I/O设备,这种方式具有较好的兼容性,但是纯软件模拟在性能和功能上就表现得比较差了。

2024-03-04 17:14:29 54

原创 使用 CONFIGFS 配置 PCI ep

集成在Jacinto 7中的PCIe控制器IPs能够在根复杂模式(主机)或端点模式(设备)下运行。当在End Point (EP)模式下操作时,控制器可以配置为根据用例使用的任何功能(’ Test endpoint ‘和’ NTB '是目前Linux内核中唯一支持的PCIe EP功能)。以下是端点模式框架框图。

2024-03-04 13:57:05 109

转载 ivshmem-plain设备原理分析

ivshmem在最初的设计中,实现了驱动为ivshmem设备,既支持普通的共享内存设备,又支持可通过中断实现doorbell的共享内存设备,但实现逻辑耦合性高且不清晰,因此根据功能不同,ivshmem被拆分成ivshmem-plain和ivshmem-doorbell两类设备,原来的ivshmem设备作为遗留设备被建议废弃,实现代码仍然被保留。host,这部分代码运行主机上,主要是读取qemu的ivshmem-plain设备暴露的共享内存数据,验证guest驱动中写的内容。

2024-02-22 21:19:23 37

转载 VirtIO实现原理——前端通知机制

另外一种,就是本文讨论的情况,虚机访问的物理地址不是普通的内存,是一个PCI的配置空间,这种类型的内存,在qemu的分类中是MMIO(Memory-map ),当虚机读写这类内存的时候,KVM检查到之后通过ioeventfd通知qemu,具体原理参考qemu中的eventfd机制。virtio设备的PCI空间中,virtio_pci_cap_notify_cfg是专门用作前端通知的cap,通过读取这个配置空间的信息,可以计算出通知后端时前端写入的地址,整个virtio-pci的配置空间如下。

2024-02-22 17:08:05 22

原创 virtio笔记

当新一个vm被创建时ioctl->acrn_vm_create->acrn_ioeventfd_init->acrn_ioreq_client_create会创建内核线程ioreq_task,这个线程会做循环检测has_pending_request,如果有执行handler,这个handler是acrn_ioeventfd_handler,在上级传参进来被注册,acrn_ioeventfd_handler会查看事件addr size是否被注册,如果被注册,就上报上层。那么是谁调的port-cb?

2024-02-09 22:46:56 549

转载 qemu linux串口重定向到终端

为了省事期间,qemu启动一个Linux Guest,如果只需要这个Guest的终端,不需要图形用户界面,可将Linux Guest的输出重定向至虚拟串口(最终是重定向到终端)。转:https://blog.csdn.net/defeattroy/article/details/8849057。参考:http://blog.csdn.net/defeattroy/article/details/5257323。先正常启动Guest,如果是grub2,编辑文件 /etc/default/grub。

2024-01-31 17:32:13 115

转载 x86如何访问pcie 配置空间

X86的CPU可以直接访问memory空间和IO空间,但是不能直接访问PCIe配置空间(原因很简单,X86的CPU只有memory指令和IO指令,没有配置指令)。访问内存的地址空间,32位平台为4G。此memory空间和main memory(平时常说的内存或者主存)是两个概念,32bit平台下CPU memory地址总线只能寻址到4G,这4G空间包括main memory、外设IO空间映射(MMIO)等,不能全给main memory,因此32bit的CPU是无法配置4G内存的。

2024-01-31 16:16:36 76

转载 x86下的C函数调用惯例

ebp本质上是函数入口的esp。考虑caller调用callee的情况,caller准备就绪,执行call跳转到callee,此时caller的esp将作为callee的栈帧起点,也就是callee的ebp。每个线程都有自己的线程上下文(Thread Context),包括唯一的整数线程id,栈(Stack),栈指针(Stack Pointer),程序计数器(Program Counter),通用寄存器等。程序是计算机的一组指令的集合,它告诉计算机如何实现特殊的功能,程序设计中的程序=数据结构+算法。

2024-01-25 17:06:35 48

转载 X86_64 寄存器介绍(不断补充中)

BX也被称为数据寄存器,即表明其能够暂存一般数据,同样也可以将BX当做两个独立的 8位寄存器使用即 BH 和BL。BX除了具有暂存数据的功能之外,还用于寻址(即寻找物理地址),这就是为什么将其称为基址寄存器,它存放的数据一般就用来作为偏移地址使用,因为偏移地址是相对于基址地址上的偏移。RAX: accumulator register, 累加寄存器,通常用于存储函数的返回值,它主要用于输入/输出和大规模的指令运算,AX 寄存器可以说是使用频率最高的寄存器。RDX: 数据寄存器,能够暂存一般性数据。

2024-01-25 17:03:43 192

转载 Intel和AT&T汇编格式区别

参考:https://imada.sdu.dk/u/kslarsen/dm546/Material/IntelnATT.htm。转:https://blog.csdn.net/yanbw/article/details/125091931。在 Linux 平台上,objdump 默认输出是 AT&T 的语法格式,可以添加 -M 指定输出的语法格式。gcc -S -masm=intel test.c // 输出 intel 的语法格式。gcc -S test.c // 默认输出 AT&T 格式。

2024-01-17 15:52:14 50

转载 VT虚拟化技术笔记(part 4

转:https://bbs.kanxue.com/thread-271967.htmVT虚拟化技术笔记(part 4)最近在学习VT技术,想把学习过程中记录的笔记分享出来。技术不精,有不对的地方还望指正。代码会发到https://github.com/smallzhong/myvt这个仓库中,目前还在施工中,还没写完。欢迎star,预计4月份完工(最近有点事,有个小测验要准备,可能得拖更一段时间)。

2024-01-09 15:41:54 98

转载 VT虚拟化技术笔记(part 3

vm-entry control用来控制进入虚拟机时候的操作。并不算复杂。具体填充代码如下。

2024-01-09 15:27:30 65

转载 VT虚拟化技术笔记(part 2)

转:https://bbs.kanxue.com/thread-271869.htmVT虚拟化技术笔记(part 2)最近在学习VT技术,想把学习过程中记录的笔记分享出来。技术不精,有不对的地方还望指正。代码会发到https://github.com/smallzhong/myvt这个仓库中,目前还在施工中,还没写完。欢迎star,预计这个月内完工。

2024-01-09 15:12:34 57

转载 VT虚拟化技术笔记(part 1)

VT技术的大致含义如上。一个CPU上有vm monitor和guest。在guest中感受不到自己跑在虚拟环境中。执行普通的操作时在guest中的操作和未开启vt时的操作并没有什么不同,但是在执行一些特殊的指令或者进行一些特殊的操作,如执行cpuid指令、切换cr3指令、读写msr寄存器指令、触发异常时,会将控制权交还给vm monitor,通过vm monitor确定应该如何让该指令或者操作得到执行。在云服务器的搭建中可以使用该技术让一台实体机上可以跑多台虚拟机。

2024-01-09 15:05:09 57

转载 怎样精确计算CPU频率

TSC完美的时间源,以一个固定的频率计数,无论turbo 或者 power-saveing 功能开关与否,不受这些新功能的影响。并且在较新的CPU上,CPU频率仅仅是与之接近,并不是一样的。3,系统接口”/sys/devices/system/cpu/cpu/cpufreq/scaling_cur_freq”最近因工作需要,需要精确计算CPU的performance,顺便查了下,应该如何稍微精确的计算CPU的频率。MPERF计数,使用一个固定不变的频率计数,是在CPU一开始启动的时候就配置好了。

2023-12-28 11:07:05 148

转载 linux如何检测超频,turbostat超频检测工具

turbostat为Intel提供的超频检测工具,可以真正在Linux下获取睿频频率的工具。由下可知:物理cpu个数为2,核心数为14,支持超线程,逻辑cpu数为56;

2023-12-28 11:02:23 147

原创 Linux 网络设备 - TUN/TAP

100% packet loss告诉我们 ping 命令没有响应,但是,我们同时也注意到在用户空间程序的日志中,打印出了我们接收到的数据包,说明至少数据包经过路由匹配后被发送到tap0设备,进而转发到连接tap0设备的用户空间程序,按照正常思路,只要我们接收到数据包并且按照规范处理,那 ping 命令收到响应只是迟早的事情。所以,逻辑上来说,TUN/TAP 设备类似一块真实的物理网卡,而绑定 TUN/TAP 设备的用户空间程序则类似一台仅处理网络数据包的 Remote PC。

2023-12-26 10:43:31 924

原创 DrmOpenWithType

012。

2023-12-25 10:41:46 363

原创 crtc 原理

配置正确的显示设置,显示器时序和显示器分辨率。将framebuffer的内容扫描输出到一个或多个显示器。更新 frame buffer,通过 struct drm_crtc_funcs 和 struct drm_crtc_helper_funcs 两个结构体来实现。

2023-12-25 10:41:29 396

原创 connector vblank curosr

【代码】connector vblank curosr。

2023-12-25 10:41:05 785

原创 Linux:UID、EUID、SUID

因此,passwd就是一个经典的setuid程序,其UID是当前执行这个命令的用户ID,而EUID则是root用户的ID(也就是0)。passwd这个命令是用来修改密码的,而密码文件是/etc/shadow,且查看密码文件的属性可以看到它的拥有者是root,root可读写,用户组可读的。这个例子和我的类似了,要想rmc_rtapp普通用户执行时临时获取root权限,就要给他suid,同时让他的拥有者是root,这样在运行时,euid=0.从上面passwd的属性可以看到,权限位中有个s,这就是suid。

2023-12-25 10:40:20 460

原创 虚拟磁盘扩容

1:先qemu-img resize -f raw xxx.img +10G 一下,此时ls -lh xxx.img可以看到文件大小变化。2:对一个分区扩容:growpart xxx.img 1(1是分区号)此时fdisk xxx.img 可以看到分区1的大小变化。5:kpart -va xxx.img 将文件挂到虚拟磁盘/dev/mapper/loopx下,然后就可以mount对其修改了。看了acrn内部的磁盘制作、扩容脚本,学习一下。3:e2fsck 对分区进行检查修复。

2023-12-19 15:58:35 358

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除