1.[虚拟化]QEMU虚拟机学习笔记
2.技术干货!内存内存DPDK新手入门到网络功能深入理解
3.linux虚拟化之kvm(一个200行的虚拟虚拟arm64虚拟机代码)
4.bochs源代码
5.linux虚拟化之kvm(一个150行的x86虚拟机代码)
6.CPU虚拟化,磁盘虚拟化,化源化源内存虚拟化,码看码io虚拟化
[虚拟化]QEMU虚拟机学习笔记
QEMU官网: QEMU
docs: Welcome to QEMU’s documentation!
虚拟机:
1)进程:时分CPU,空分内存。虚拟虚拟密商源码
2)模拟器: 可以通过解释或者二进制翻译来实现。化源化源典型的码看码模拟器有QEMU的用户态程序模拟,Bochs模拟器。内存内存
3)高级语言虚拟机:虚拟ISA也叫字节码,虚拟虚拟高级语言->字节码->物理ISA,化源化源典型的有JVM虚拟机,python虚拟机。码看码
2:进程、内存内存模拟器、虚拟虚拟高级语言虚拟机提供的化源化源都是指令的执行环境,而系统虚拟化提供的是一个完整的系统环境。
3:通过系统虚拟化技术,能够在单个的宿主机硬件平台上运行多个虚拟机,每个虚拟机都有着完整的虚拟机硬件,如虚拟的CPU,内存,虚拟的asp磁力链接源码外设等,并且虚拟机之间能够实现完整的隔离。
在系统虚拟化中,管理全局物理资源的软件叫做虚拟机监控器(VMM),VMM之于虚拟机就如同操作系统之于进程,VMM利用时分复用或者空分复用将硬件资源在各个虚拟机之间进行分配。
4:VMware在年的成立标志置虚拟化的全面复兴,随后年剑桥大学开发了Xen。
5:年,以色列的初创公司Qumranet利用Intel的硬件虚拟化技术在linux内核上开发了KVM。KVM架构精简,与Linux内核天然融合,得以很快进入内核。后来RedHat收购了Qumranet,全力投入到KVM的建设中。
6:常见的虚拟化方案:
VMware Workstation:VMware最早的产品,至今仍有大量用户在使用。
VirtualBox:最早由一个德国公司开发,后来被甲骨文收购。
HyperV:微软提出的虚拟化解决方案,用于构建自己的云计算平台。
Xen:早期的网狐源码 框架开源虚拟化方案,出现在各种硬件虚拟化技术之前。
7:QEMU最开始是由法国程序员Fabrice Bellard开发的一个模拟器。QEMU能够完成用户程序模拟和系统虚拟化模拟。
1)用户程序模拟指的是QEMU能够将为一个平台编译的二进制文件运行在另一个不同的平台,如一个ARM指令集的二进制程序,通过QEMU的TCG(Tiny Code Generator)引擎的处理之后,ARM指令被转换成TCG中间代码,然后再转换成目的平台的代码。
2)系统虚拟化模拟指的是QEMU能够模拟一个完整的系统虚拟机,该虚拟机有自己的虚拟CPU,芯片组,虚拟内存和各种虚拟外设,能够为虚拟机中运行的操作系统和应用系统呈现出与物理计算机完全一致的硬件视图。
8: Intel和AMD再年左右开始在CPU层面提供对系统虚拟化的支持,叫做硬件虚拟化,Intel在x指令集的基础上增加了一套VMX扩展指令VG-x,为CPU增加了新的运行模式。
9:最开始KVM只负责最核心的CPU虚拟化和内存虚拟化部分,使用QEMU作为其用户态组件,负责完成大量外设的模拟,当时的方案被称为QEMU-KVM。
:KVM的具体设计与实现可以参考Avi Kivity等人在发表的论文 KVM: The Linux Virtual Machine Monitor. kernel.org/doc/ols/...
:QEMU与KVM整体架构图
ref:
QEMU/KVM 源码解析与应用 - 李强
技术干货!DPDK新手入门到网络功能深入理解
DPDK新手入门
一、霸世c 源码安装
1. 下载源码
DPDK源文件由几个目录组成。
2. 编译
二、配置
1. 预留大页
2. 加载 UIO 驱动
三、运行 Demo
DPDK在examples文件下预置了一系列示例代码,这里以Helloworld为例进行编译。
编译完成后会在build目录下生成一个可执行文件,通过附加一些EAL参数可以运行起来。
以下参数都是比较常用的
四、核心组件
DPDK整套架构是基于以下四个核心组件设计而成的
1. 环形缓冲区管理(librte_ring)
一个无锁的多生产者,多消费者的FIFO表处理接口,可用于不同核之间或是逻辑核上处理单元之间的通信。
2. 内存池管理(librte_mempool)
主要职责是在内存中分配用来存储对象的pool。 每个pool以名称来唯一标识,并且使用一个ring来存储空闲的对象节点。 它还提供了一些其他的服务,如针对每个处理器核心的缓存或者一个能通过添加padding来使对象均匀分散在所有内存通道的对齐辅助工具。
3. 网络报文缓冲区管理(librte_mbuf)
它提供了创建、释放报文缓存的能力,DPDK应用程序可能使用这些报文缓存来存储数据包。这个缓存通常在程序开始时通过DPDK的mempool库创建。这个库提供了创建和释放mbuf的lol秒选源码API,能用来暂存数据包。
4. 定时器管理(librte_timer)
这个模块为DPDK的执行单元提供了异步执行函数的能力,也能够周期性的触发函数。它是通过环境抽象层EAL提供的能力来获取的精准时间。
五、环境抽象层(EAL)
EAL是用于为DPDK程序提供底层驱动能力抽象的,它使DPDK程序不需要关注下层具体的网卡或者操作系统,而只需要利用EAL提供的抽象接口即可,EAL会负责将其转换为对应的API。
六、通用流rte_flow
rte_flow提供了一种通用的方式来配置硬件以匹配特定的Ingress或Egress流量,根据用户的任何配置规则对其进行操作或查询相关计数器。
这种通用的方式细化后就是一系列的流规则,每条流规则由多种匹配模式和动作列表组成。
一个流规则可以具有几个不同的动作(如在将数据重定向到特定队列之前执行计数,封装,解封装等操作),而不是依靠几个规则来实现这些动作,应用程序操作具体的硬件实现细节来顺序执行。
1. 属性rte_flow_attr
a. 组group
流规则可以通过为其分配一个公共的组号来分组,通过jump的流量将执行这一组的操作。较低的值具有较高的优先级。组0具有最高优先级,且只有组0的规则会被默认匹配到。
b. 优先级priority
可以将优先级分配给流规则。像Group一样,较低的值表示较高的优先级,0为最大值。
组和优先级是任意的,取决于应用程序,它们不需要是连续的,也不需要从0开始,但是最大数量因设备而异,并且可能受到现有流规则的影响。
c. 流量方向ingress or egress
流量规则可以应用于入站和/或出站流量(Ingress/Egress)。
2. 模式条目rte_flow_item
模式条目类似于一套正则匹配规则,用来匹配目标数据包,其结构如代码所示。
首先模式条目rte_flow_item_type可以分成两类:
同时每个条目可以最多设置三个相同类型的结构:
a. ANY可以匹配任何协议,还可以一个条目匹配多层协议。
b. ETH
c. IPv4
d. TCP
3. 操作rte_flow_action
操作用于对已经匹配到的数据包进行处理,同时多个操作也可以进行组合以实现一个流水线处理。
首先操作类别可以分成三类:
a. MARK对流量进行标记,会设置PKT_RX_FDIR和PKT_RX_FDIR_ID两个FLAG,具体的值可以通过hash.fdir.hi获得。
b. QUEUE将流量上送到某个队列中
c. DROP将数据包丢弃
d. COUNT对数据包进行计数,如果同一个flow里有多个count操作,则每个都需要指定一个独立的id,shared标记的计数器可以用于统一端口的不同的flow一同进行计数。
e. RAW_DECAP用来对匹配到的数据包进行拆包,一般用于隧道流量的剥离。在action定义的时候需要传入一个data用来指定匹配规则和需要移除的内容。
f. RSS对流量进行负载均衡的操作,他将根据提供的数据包进行哈希操作,并将其移动到对应的队列中。
其中的level属性用来指定使用第几层协议进行哈希:
g. 拆包Decap
h. One\Two Port Hairpin
七、常用API
1. 程序初始化
2. 端口初始化
3. 队列初始化
DPDK-网络协议栈-vpp-ovs-DDoS-虚拟化技术
DPDK技术路线视频教程地址立即学习
一、DPDK网络
1. 网络协议栈项目
2.dpdk组件项目
3.dpdk经典项目
二、DPDK框架
1. 可扩展的矢量数据包处理框架vpp(c/c++)
2.DPDK的虚拟交换机框架OvS
3.golang的网络开发框架nff-go(golang)
4. 轻量级的switch框架snabb(lua)
5. 高效磁盘io读写spdk(c)
三、DPDK源码
1. 内核驱动
2. 内存
3. 协议
4. 虚拟化
5. cpu
6. 安全
四、性能测试
1. 性能指标
2. 测试方法
3. 测试工具DPDK相关学习资料分享:点击领取,备注DPDK
DPDK新手入门原文链接:DPDK上手
linux虚拟化之kvm(一个行的arm虚拟机代码)
在探索Linux虚拟化技术时,我们常常从熟悉的x架构开始,进而尝试更为复杂的ARM架构。本文将深入介绍在ARM环境下,如何利用KVM(Kernel-based Virtual Machine)构建一个虚拟机。首先,为了搭建环境,我们需要借助QEMU,一个能够模拟ARM执行环境的工具。同时,考虑到在Host OS下执行程序的兼容性,我们通过BusyBox引入基础的lib库,特别是一并复制交叉工具链中的libc相关库至BusyBox的rootfs根目录。
接下来,我们以简单的程序流程图,概述从构建虚拟机环境到执行基本汇编程序的全过程。该过程包括在X主机上使用QEMU模拟ARM环境,并在该环境中通过KVM在虚拟机中运行一段简单的Hello World汇编程序。这种环境构建方法,为我们提供了一种在不同架构之间迁移编程与测试逻辑的途径。
本文源码的介绍分为几个关键部分:首先是ARM主机代码(kvm_sample.c),这是虚拟机创建与控制的核心部分。紧接着,是ARM kvm客机运行的代码(test.S),这部分代码将直接在虚拟机内运行。随后,test.ld作为链接文件,确保各部分代码能够正确连接。makefile文件则负责构建整个项目,确保所有依赖关系得到正确处理。在构建过程中,需要注意Makefile中的INCLUDES内核头文件路径,它应指向构建ARM运行环境时生成的相应路径。最后,通过执行特定命令,生成适用于ARM环境的头文件,确保测试程序能够正确引用。
执行结果部分展示了虚拟机运行的简单示例。虽然程序仅包含一个简单的“Hello”输出,但背后的技术实现却相当复杂。构建这样一个VM的基本流程,包括创建虚拟机、初始化虚拟机内存、创建vCPU以及运行vCPU等关键步骤。在ARM与x架构之间,这些步骤虽然保持一致,但在具体参数设置上存在差异,如CPU的PC值、CPU类型等。
总结而言,通过本文的介绍,我们深入了解了在ARM环境下使用KVM构建虚拟机的全过程。从环境搭建、代码构建到执行结果,每一步都展示了虚拟化技术在不同架构间迁移的潜力。此外,我们还讨论了如何通过C语言编写客机程序,以及如何通过寄存器设置参数传递,完成输入的实验等扩展应用。本文的源码与参考文献为深入学习Linux虚拟化技术提供了宝贵的资源。
bochs源代码
Bochs源代码可以从blogs.com/thesevenths...