6 jongwu3

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 5w+

linux的ksm特性的使用限制

ksm(kernel same-page merging)是Linux kernel合并相同内存页面的特性,初期为虚拟化所用,在非虚拟化下也有类似的场景。ksm的使用是有限制的。ksm只能用来合并私有匿名映射(文档是这么写的).但是查看kernel源码我没发现对文件映射的限制。在很多场景下,私有文件映射也是会产生大量相同页面的,用来进行合并是很合适的,所以我猜测ksm是可以用来对私有文件映射进行合并。此外,对于dax的页面,ksm也是不能合并的。这些限制从code中很容易找到:case MADV.

2020-07-13 14:57:47

tcp传输控制博客收藏

https://baijiahao.baidu.com/s?id=1664395039305097355&wfr=spider&for=pchttps://blog.csdn.net/qq_41431406/article/details/97926927

2020-06-03 16:32:50

通过对比kernel参数来debug网络测试性能问题

最近发现一个问题,用iperf测试的虚拟机带宽,对于5.4kernel的guest的带宽明显小于使用4.14的kernel,通过对比tcp的kernel参数看到5.4kernel采用bbr的拥塞控制算法而4.14 使用cubic。在5.4的kernel上打开cubic后发现带宽正常。由此可见,当测试网络性能出现问题时,最为有效的策略时查看环境参数。关于kernel的网络参数可以使用sysctl或者在/proc/sys/net下进行查看。例如:sysctl -A |grep tcpkernel查看到有

2020-06-03 14:54:47

vhost 工作原理

http://blog.vmsplice.net/2011/09/qemu-internals-vhost-architecture.html

2020-05-04 16:32:28

qemu虚拟机的实时时钟从哪里来

对于物理机而言时间是实时时钟(rtc)+启动后时间(boot up time)的和。rtc一般是存在于cmos存储中,它是一个类似于flash的东西,掉电不失,可读写的存储空。rtc存储在里面,每次机器启动的时候读一次就知道机器刚刚启动时的时间了。对于虚机要想知道启动时的时间就需要vmm提供类似于rtc的东西。也就是模拟rtc设备。对于qemu-kvm虚拟机,qemu就负责模拟rtc。qe...

2020-03-12 15:10:50

Linux中的dax特性

在Linux中由于块设备一般属于低速设备,访问成本很高,为了减少访问块设备的次数内核一般会将访问磁盘的内容缓存起来,等下次访问时直接从内存中获得结果,这大大提高了系统的性能。所以说缓存是个好东西。但是随着技术进步,一些类似于内存的块设备出现了,主要的有Intel的nvdimm设备,它是一种既可以当磁盘又可以当内存使用的存储设备,它的名字是非易失性内存,速度可以比肩内存,而又不会掉电丢数据。如果...

2020-03-10 18:13:07

armv8虚拟内存架构简述

粗略看了一下armv8的虚拟内存的文档。记录一下,细节留待以后用到时再去细究。程序在运行的时候使用的内存一般是虚拟内存,需要经过转换才能接触到物理内存。其中的底层支持就是硬件架构,现代架构都是支持硬件虚拟内存转换的,一般就是说提供MMU。armv8架构作为现代架构也不例外,但是不太一样的是armv8架构支持两级转换:stage 1 和stage 2.上图包含了安全世界和非安全世界的东西...

2020-03-01 17:00:25

virtio前端驱动详解

前段时间大致整理了下virtIO后端驱动的工作模式以及原理,今天就从前端驱动的角度描述下目前Linux内核代码中的virtIO驱动是如何配合后端进行工作的。注:本节代码参考Linux 内核3.11.1代码virtIO驱动从架构上来讲可以分为两部分,一个是其作为PCI设备本身的驱动,此驱动需要提供一些基本的操作PCI设备本身的函数比如PCI设备的探测、删除、配置空间的设置和寄存器空间的读写等...

2020-02-17 11:00:24

virtio后端驱动详解

virtIO是一种半虚拟化驱动,广泛用于在XEN平台和KVM虚拟化平台,用于提高客户机IO的效率,事实证明,virtIO极大的提高了VM IO 效率,配备virtIO前后端驱动的情况下,客户机IO效率基本达到和宿主机一样的水平。咱们本次的分析以qemu-kvm架构的虚拟化平台为基础,分析virtIO前后端驱动。当然后端就指有qemu实现的虚拟PCI设备,而前端自然就是客户操作系统中的virtIO驱...

2020-02-17 10:59:04

转载:virtIO前后端notify机制详解

本来这是在前端驱动后期分析的,但是这部分内容比较多,且分析了后端notify前端的机制,所以还是单独拿出一节分析比较好!还是拿网络驱动部分做案例,网络驱动部分有两个队列,(忽略控制队列):接收队列和发送队列;每个队列都对应一个virtqueue,两个队列之间是互不影响的。前后端利用virtqueue的方式如下图所示:这里再详细的描述下,当两个queue都需要客户机填充buffer,...

2020-02-17 10:57:37

转载:virtIO前后端notify机制详解

本来这是在前端驱动后期分析的,但是这部分内容比较多,且分析了后端notify前端的机制,所以还是单独拿出一节分析比较好!还是拿网络驱动部分做案例,网络驱动部分有两个队列,(忽略控制队列):接收队列和发送队列;每个队列都对应一个virtqueue,两个队列之间是互不影响的。前后端利用virtqueue的方式如下图所示:这里再详细的描述下,当两个queue都需要客户机填充buffer,...

2020-02-17 10:57:07

转载:virtIO前后端notify机制详解

本来这是在前端驱动后期分析的,但是这部分内容比较多,且分析了后端notify前端的机制,所以还是单独拿出一节分析比较好!还是拿网络驱动部分做案例,网络驱动部分有两个队列,(忽略控制队列):接收队列和发送队列;每个队列都对应一个virtqueue,两个队列之间是互不影响的。前后端利用virtqueue的方式如下图所示:这里再详细的描述下,当两个queue都需要客户机填充buffer,...

2020-02-17 10:56:36

armv8虚拟化架构简述

x86的虚拟化资料很多,与之相对的arm的虚拟化的讲解较少,这几天通过查找arm的官方文档稍微对arm的虚拟化架构有些了解,记下来留给以后查看。由于arm的虚拟化主要体现在armv8-a架构上,我们就只讲这个架构上的东西。下面就简称arm架构。虚拟化技术包括cpu、memory和device的虚拟化,了解了这三个就基本涵盖了虚拟化各方面。在讲arm虚拟化方案之前我们先讲一下armv8的ex...

2020-02-16 23:07:49

浅说ksm的适用范围

ksm(Kernel Samepage Merging)是linux内核中一个feature,通过合并内存中的相同页面来减小内存占用,常用语虚拟化中。ksm合并的一般是用户分配的内存(能不能用在内核页面我还不清楚)。关键的是它只能合并私有的匿名页面。想了解更多的有关页面的分类可以查看man mmap。如果想让自己分配的页面可以被ksm优化,那就必须显示声明出来。方法是使用madvise接口,一...

2020-02-14 10:32:11

runc容器中的”钓鱼执法“

如今最流行的容器运行时就是runc和kata-container。一般而言runc比kata效率高,kata比runc安全。我在测试中发现他们之间不易察觉的另一个隐秘的区别, 我把它叫“钓鱼执法”举个例子:docker run -d -m 4G tensorflow tensorflow这个例子我没运行过,我的意思是当我们给容器设定一个内存限制时,对于runc和kata将有不同的表现...

2019-12-24 12:03:21

转载: QEMU深入浅出: guest物理内存管理

作 者:Stefan Hajnoczi领 域:Open source and virtualization适宜读者:对虚拟化有一定了解背景知识:KVM,Qemu前言:众所周知,内存是计算机系统的一个关键组成部分。使用Qemu-kvm方式创建虚拟机时,guest物理内存是由几个不同层面共同管理的。本篇基于Qemu2.5的代码对管理guest物理内存的这几个重要层面...

2019-12-16 20:07:58

转: qemu-kvm内存管理

记得很早之前分析过KVM内部内存虚拟化的原理,仅仅知道KVM管理一个个slot并以此为基础转换GPA到HVA,却忽略了qemu端最初内存的申请,而今有时间借助于qemu源码分析下qemu在最初是如何申请并管理虚拟机内存的,坦白讲,还真挺复杂的。一、概述qemu-kvm 模型下的虚拟化引擎,内存虚拟化部分要说简单也挺简单,在虚拟机启动时,有qemu在qemu进程地址空间申请内存,即内存的申请...

2019-12-16 18:53:52

给qemu虚拟机创建网络

这个文档写的很好有时间翻译一下https://gist.github.com/extremecoders-re/e8fd8a67a515fee0c873dcafc81d811c

2019-11-13 15:58:22

一个芯片的诞生:从需求到实物

我们用的手机电脑最重要的部分就是里面的芯片,本文试图讲讲芯片从设计到制造出来的过程。水平有限,将就看吧。任何产品都是为了满足需求,芯片也是如此,首先我们要知道为啥需要芯片。一台计算机要工作需要软件和硬件的协同合作,硬件包括芯片和一大堆外设,我们只关注芯片部分,可以认为软件就是直接运行在芯片之上的。我们一般写的程序都是使用高级语言,再由编译器帮助我们生成计算机可以理解的机器语言,那么芯片的需求就...

2019-10-04 20:25:12

多线程的cache调优

一般使用多线程是希望它能带来比单线程更高的效率但是事实上常常事与愿违,一个粗糙的多线程可能得到比单线程更差的性能。其中的原因可能是锁竞争也可能是调度,本文重点讨论cache对多线程的影响。举个简单的例子:我的机器上CPU拓扑:我有四个cpu但是每两个CPU是共享一级二级cache的,这个对编程影响很大。cache line是64B。硬件上知道这些就好。演示程序很简单,计算...

2019-08-31 23:10:27

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 分享达人
    分享达人
    成功上传6个资源即可获取