ring

kvm和qemu交互处理io流程

瘦欲@ 提交于 2021-02-15 10:57:50
1、IO虚拟化的分类 (1)全虚拟化:宿主机截获客户机对I/O设备的访问请求,然后通过软件模拟真实的硬件。这种方式对客户机而言非常透明,无需考虑底层硬件的情况,不需要修改操作系统。 QEMU模拟I/O的情况下,当客户机中的设备驱动程序(device driver)发起I/O操作请求之时,KVM模块中的I/O操作捕获代码会拦截这次I/O请求,然后经过处理后将本次I/O请求的信息存放到I/O共享页,并通知用户控件的QEMU程序。QEMU模拟程序获得I/O操作的具体信息之后,交由硬件模拟代码来模拟出本次的I/O操作,完成之后,将结果放回到I/O共享页,并通知KVM模块中的I/O操作捕获代码。最后,由KVM模块中的捕获代码读取I/O共享页中的操作结果,并把结果返回到客户机中。当然,这个操作过程中客户机作为一个QEMU进程在等待I/O时也可能被阻塞。 另外,当客户机通过 DMA ( Direct Memory Access ) 【DMA外接设备可以不用CPU干预,直接把数据传输到内存的技术,尽量减少CPU干预的输入/输出操作方式。(使用连续物理内存,kmalloc分配)。否则外设一有数据就要中断通知CPU,CPU去读,如果频繁就时间浪费在处理中断,IO速度慢】访问大块I/O之时,QEMU模拟程序将不会把操作结果放到I/O共享页中,而是通过内存映射的方式将结果直接写到客户机的内存中去

计算机组件及操作系统基础

柔情痞子 提交于 2021-02-14 09:34:16
计算机组件简介 计算机分为5大组件: 1. 运算器 2. 控制器 3. 存储器 4. 输入设备 5. 输出设备 CPU是中央控制器,是控制器和运算器,是一台计算机的运算核心和控制核心; 存储器主要功能是存储程序和各种文件; 输入、输出设备我们一般统称为I/0设备,用于连接计算机内外部,而这些组件的连接则需要总线和主板来完成。 主频 主频也叫时钟频率,用来表示CPU的运算,处理数据的速度。通常,主频越高,CPU处理数据的速度就越快。 不能单纯的以为CPU的主频越高,性能就越好。是需要在相同条件下的对比才有效。 CPU缓存 cpu缓存位于CPU和内存之间的临时存储器,它的容量比内存小,但是交换速度比内存快。 cpu的缓存主要是解决cpu运算速度和内存读写速度不匹配的原因,因为cpu运算速度要比内存读写快很多,这样会使cpu花费很长时间等待数据到来或者把数据写回到内存。 在cpu缓存中的数据是内存中的一部分,但这一小部分是短时间内CPU即将访问到的,当CPU调用数据时,就可以直接从缓存中取得, 从而加快速度,因此在cpu中加入缓存是一种高效的解决方案这样这个内存储器(cache+内存)就变得即有cache高速,又有内存的大容量的存储系统。 按照数据读取顺序和与CPU结合的紧密程度,CPU缓存可以分为一级缓存,二级缓存,三级缓存,每一级的缓存中的所有数据都是下一级缓存 的一部分

oslab oranges 一个操作系统的实现 实验二 认识保护模式

南楼画角 提交于 2021-02-09 10:01:44
https://github.com/yyu/osfs00 实验目的: 理解 x86架构下的段式内存管理 掌握实模式和保护模式下段式寻址的组织方式、 关键数据结构、代码组织方式 掌握实模式与保护模式的切换 掌握特权级的概念,以及不同特权之间的转移 实验内容: 1. 认真阅读章节资料,掌握什么是保护模式,弄清关键数据结构: GDT、descriptor、selector、GDTR, 及其之间关系,阅读 pm.inc文件中数据结构以及含义,写出对宏Descriptor的分析 2. 调试代码,/a/ 掌握从实模式到保护模式的基本方法,画出代码 流程图,如果代码 /a/中,第71行有dword前缀和没有前缀,编 译出来的代码有区别么,为什么,请调试截图。 3. 调试代码,/b/,掌握GDT的构造与切换,从保护模式切换回实 模式方法 4. 调试代码,/c/,掌握LDT切换 5. 调试代码,/d/掌握一致代码段、非一致代码段、数据段的权限 访问规则,掌握 CPL、DPL、RPL之间关系,以及段间切换的基 本方法 6. 调试代码,/e/掌握利用调用门进行特权级变换的转移 代码对应 iso中chapter3 实验解决问题与课后动手改: 1. GDT、Descriptor、Selector、GDTR结构,及其含义是什么?他 们的关联关系如何? pm.inc所定义的宏怎么使用? 2.

webgl推荐书籍

扶醉桌前 提交于 2021-02-08 05:25:44
网址:https://www.douban.com/doulist/45940373/ webgl 来自: Pasu 2017-04-17创建 2017-07-25更新 推荐 关注 2 人关注 全部(8) · 图书(8) 来自:豆瓣读书 OpenGL Insights (8人评价) 作者: Patrick Cozzi / Christophe Riccio 出版社: A K Peters/CRC Press 出版年: 2012-6-26 2017年7月25日 赞 回复 来自:豆瓣读书 WebGL Insights (2人评价) 作者: Patrick Cozzi 出版社: A K Peters/CRC Press 出版年: 2015-8-3 2017年7月25日 赞 回复 来自:豆瓣读书 3D Engine Design for Virtual Globes (6人评价) 作者: Patrick Cozzi / Kevin Ring 出版社: A K Peters/CRC Press 出版年: 2011-6-21 2017年4月17日 赞 回复 来自:豆瓣读书 图形着色器 7.3 (17人评价) 作者: 贝利 (Mike Bailey) / 坎宁安 (Steve Cunningham) 出版社: 清华大学出版社 出版年: 2013-4-1 2017年4月17日 赞 回复 来自

Invalid anti-forgery token

时光总嘲笑我的痴心妄想 提交于 2021-02-07 13:35:40
问题 I'm getting an " Invalid anti-forgery token " when I try using POST method in a Clojure Webapp project I created using Compojure template. I researched, and Ring middle ware creates CSRF (cross site request forms) tokens to authenticated requests coming from other sites (to use someone else's credentials who has already logged in and access pages not allowed to access). These tokens are default, and we need to use ring.middleware 's wrap-params around our WebApp. Couldn't get anywhere much.

Threejs 实现扩散圆环效果

删除回忆录丶 提交于 2021-02-04 02:31:50
ThreeJS 实现扩散圆效果 代码实现 //r 圆半径 //init 初始圆半径 //ring 圆环大小 //color 颜色 THREE.Vector3 //speed 速度 function scatterCircle(r, init, ring, color, speed) { var uniform = { u_color: { value: color }, u_r: { value: init }, u_ring: { value: ring, }, }; var vs = ` varying vec3 vPosition; void main(){ vPosition=position; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); } `; var fs = ` varying vec3 vPosition; uniform vec3 u_color; uniform float u_r; uniform float u_ring; void main(){ float pct=distance(vec2(vPosition.x,vPosition.y),vec2(0.0)); if(pct>u_r || pct<(u_r-u_ring)){ gl_FragColor

Linux性能优化实战学习笔记:第三十四讲

折月煮酒 提交于 2021-02-02 07:25:18
一、上节回顾 上一节,我带你学习了 Linux 网络的基础原理。简单回顾一下,Linux 网络根据 TCP/IP模型,构建其网络协议栈。TCP/IP 模型由应用层、传输层、网络层、网络接口层等四层组 成,这也是 Linux 网络栈最核心的构成部分。 应用程序通过套接字接口发送数据包时,先要在网络协议栈中从上到下逐层处理,然后才最终送到网卡发送出去;而接收数据包时,也要先经过网络栈从下到上的逐层处理,最后送到应用程序。 了解 Linux 网络的基本原理和收发流程后,你肯定迫不及待想知道,如何去观察网络的性能情况。具体而言,哪些指标可以用来衡量 Linux 的网络性能呢? 二、性能指标 实际上,我们通常用带宽、吞吐量、延时、PPS(Packet Per Second)等指标衡量网络的性能。 带宽: 表示链路的最大传输速率,单位通常为 b/s (比特 / 秒)。 吞吐量: 表示单位时间内成功传输的数据量,单位通常为 b/s(比特 / 秒)或者B/s(字节 / 秒)。吞吐量受带宽限制,而吞吐量 / 带宽,也就是该网络的使用率。 延时: 表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。在不同场景中,这一指标可能会有不同含义。比如,它可以表示,建立连接需要的时间(比如 TCP    握手延时),或一个数据包往返所需的时间(比如 RTT)。 PPS: 是 Packet Per

DPDK的基本原理、学习路线总结

て烟熏妆下的殇ゞ 提交于 2021-01-30 09:32:04
一、DPDK原理 网络设备(路由器、交换机、媒体网关、SBC、PS网关等)需要在瞬间进行大量的报文收发,因此在传统的网络设备上,往往能够看到专门的NP(Network Process)处理器,有的用FPGA,有的用ASIC。这些专用器件通过内置的硬件电路(或通过编程形成的硬件电路)高效转发报文,只有需要对报文进行深度处理的时候才需要CPU干涉。 但在公有云、NFV等应用场景下,基础设施以CPU为运算核心,往往不具备专用的NP处理器,操作系统也以通用Linux为主,网络数据包的收发处理路径如下图所示: 在虚拟化环境中,路径则会更长: 由于包处理任务存在内核态与用户态的切换,以及多次的内存拷贝,系统消耗变大,以CPU为核心的系统存在很大的处理瓶颈。为了提升在通用服务器(COTS)的数据包处理效能,Intel推出了服务于IA(Intel Architecture)系统的DPDK技术。 DPDK是Data Plane Development Kit的缩写。简单说,DPDK应用程序运行在操作系统的User Space,利用自身提供的数据面库进行收发包处理,绕过了Linux内核态协议栈,以提升报文处理效率。 DPDK是一组lib库和工具包的集合。最简单的架构描述如下图所示: 上图蓝色部分是DPDK的主要组件(更全面更权威的DPDK架构可以参考Intel官网),简单解释一下: PMD:Pool

聊聊cortex的kv.Client

时光总嘲笑我的痴心妄想 提交于 2021-01-29 04:22:39
序 本文主要研究一下cortex的kv.Client kv.Client github.com/cortexproject/cortex/pkg/ring/kv/client.go // Client is a high-level client for key-value stores (such as Etcd and // Consul) that exposes operations such as CAS and Watch which take callbacks. // It also deals with serialisation by using a Codec and having a instance of // the the desired type passed in to methods ala json.Unmarshal. type Client interface { // List returns a list of keys under the given prefix. Returned keys will // include the prefix. List(ctx context.Context, prefix string) ([]string, error) // Get a specific key. Will use a

聊聊cortex的Distributor

最后都变了- 提交于 2021-01-26 01:22:36
序 本文主要研究一下cortex的Distributor Distributor cortex/pkg/distributor/distributor.go // Distributor is a storage.SampleAppender and a client.Querier which // forwards appends and queries to individual ingesters. type Distributor struct { services.Service cfg Config ingestersRing ring.ReadRing ingesterPool *ring_client.Pool limits *validation.Overrides // The global rate limiter requires a distributors ring to count // the number of healthy instances distributorsRing *ring.Lifecycler // For handling HA replicas. HATracker *haTracker // Per-user rate limiter. ingestionRateLimiter *limiter.RateLimiter