该记一定要记

  • NFV场景——DPDK-PKtgen进行网络测试


    前言

    最近在做NFV相关的优化工作。在进行优化过程中需要对优化结果进行实时测试,以来确定优化手段是否有效果。由于公司并没有专业的发包机。而传统的netperf/iperf在10G场景下,64的小包很难发到限速。所以转而寻找其他工具来进行代替。刚好遇到了DPDK-Pktgen这个工具,完美的解决了我遇到的问题。

    阅读全文 »

  • NFV场景下优化KVM——低时延


    前言

    NFV(网络功能虚拟化)由运营商联盟提出,为了加速部署新的网络服务,运营商倾向于放弃笨重昂贵的专用网络设备,转而使用标准的IT虚拟化技术来拆分网络功能模块。在传统CT网络中对于服务质量保证的要求是非常高的,简而言之就是高带宽,高可靠,低时延。这些要求对于虚拟化技术而言本身就具有非常大的挑战。在虚拟化场景下,Hypervisor对vcpu本身要进行调度,而在Guest中vcpu对正在运行的程序也需要调度。这种二层调度使得低时延在虚拟化场景下是一个很难解决的问题。而解决低时延很大程度上需要使用实时操作系统

    阅读全文 »

  • LinuxKit初探


    前言

    Docker 在DockerCon 2017大会上发布了一个自己的操作系统,宣称LinuxKit,安全,精简,强移植性。经过研究后发现LinuxKit就是kernel+busybox实现的一个微缩linux系统,其中直接安装了containerd和runc服务。其他服务全部都使用容器启动。一句话概括,LinuxKit就是希望在操作系统层面除了containerd之外其他服务都跑在容器中,这是一个几乎全部服务都在容器中的操作系统。

    阅读全文 »

  • libvirt使用sanlock做磁盘锁揭秘


    前言

    sanlock是redhat基于Paxos协议实现的分布式锁管理器。用来在不同主机之间保证进程能够单活。在libvirt中可以配置使用sanlock来保证虚拟机单活,即我们常说的防脑裂功能。网上大都有sanlock的原理介绍,可以参考sanlock 原理介绍及应用本文就不在详述了。这里从sanlock的使用方式以及libvirt的使用方式来揭秘libvirt如何sanlock的。

    阅读全文 »

  • 解决sysctl配置不能持久化


    前言

    linux下提供了sysctl进行系统参数的配置,这些配置可以及时生效,也可以记录在配置文件/etc/sysctl.conf中,使得重启主机后也可以生效。 但是最近在配置nf_conntrack_max参数时候,发生了重启配置不生效的问题。

    阅读全文 »

  • Virtio-Balloon超详细分析


    前言

    Virtio-Balloon驱动即内存气泡,可以用来动态调整内存,这个驱动很早就已经出来了, 最近才发现这个驱动居然还有监控内存指标的功能,所以再一次review了一遍代码。这里就把这个驱动详细的介绍一遍。

    阅读全文 »

  • linux的jiffies


    在看libvirt如何获取虚拟机的cpu占用率这个问题。计算cpu占用率不可避免的需要直到jiffies的概念。

    阅读全文 »

  • windows-docker介绍


    背景:

    windows上支持docker的新闻已经不算陌生了。但是究竟现在发展到什么地步了呢? 心血来潮,开始在网上寻找在windows上使用docker的方式。

    阅读全文 »

  • virtio-gpu介绍


    背景:

    显卡的提升在虚拟化场景下一直是一个难以解决的问题。目前qemu中提供的显卡有2种 一种是cirrus显卡,一种是vga显卡。这两种显卡都是通过qemu来进行模拟的,也仅仅达到了能够让虚拟机使用的功能。 而对于游戏需要的3D加速能力等,还不能很好的模拟。

    阅读全文 »

  • libvirt savevm 命令存储内存文件分析


    在libvirt 使用save命令对虚拟机进行存储后,将libvirt的信息,虚拟机的内存,cpu以及其他设备的信息都存储了起来。

    阅读全文 »

  • html5录音程序


    最近遇到一个需求,需要从网页上对声音进行录制并上传,因此研究了一下html的录音机制。 这里要用到已有的js库 recorder.js 下面把我写的html文件贴上来

    阅读全文 »

  • VM电源管理xen和kvm比较


    电源管理是在学习虚拟化时候比较容易被忽略的一个问题。 最近在碰到一个问题,如何区分,虚拟机是从外部destroy掉还是用户内部shutdown的行为。 所以顺便好好研究了一下VM电源管理这一块。 首先简单描述一下,linux执行poweroff会做的事情。 当执行poweroff后,会执行系统调用kernel_power_off,然后根据不同架构来调用相关的 poweroff实现。

    阅读全文 »

  • virtio的工作流程——kernel中virtio-pci初始化(2)


    接上节,这次主要讲virtio-pci设备初始化,以及建立相应的通信通道。 一个virtio-pci设备有2个区域,一个是data区域,一个是config区域 使用 info mtree 可以看到这个结果。

    阅读全文 »

  • virtio的工作流程——qemu中virtio-backend初始化(1)


    在kvm下,virtio-blk的实现特性有virtio-blk,dataplane,vhost-blk。其中前2个已经进入了社区。而vhost-blk仅仅提了patch,并没有通过。 在开发中需要对比这3种特性下,block的io性能,所以找到了vhost-blk的patch,但是patch直接合入后不能成功使用。所以在解决该问题时候, 刚好又看了一次virtio-blk的初始化,以及io路径,这里为了避免忘记总结一下。这里分2次来讲,先将一下virtio-pci设备的正常通信流程。 再来说vhost-blk。

    阅读全文 »

  • kprobe使用实例


    linux提供了kprobe机制来方便我们进行调试。 kprobe的原理是通过替换函数表,使得调用函数前后,会调用在kprobe注册的函数。

    阅读全文 »

  • linux的总线,设备,驱动是怎么工作的


    linux的设备是按照总线,设备,驱动联系起来的。简单来说就是任何设备都是挂在在一个总线上,而设备也有相应的驱动,才能正确的运行。

    阅读全文 »

  • 通过原始Centos ISO来定制自己的ISO


    通过Centos原始镜像可以裁剪或者增加rpm包制作自己的镜像

    阅读全文 »

  • qemu中VNC流程详解+代码分析


    在虚拟化场景下,对于VM的访问可以使用VNC等可视化工具来操作。VNC的原理其实很简单, qemu会对每一个虚拟机模拟一块网卡,而VM的显示信息都会留在这个网卡的显存中。qemu启动一个 VNC server,这个server其实就一个定时器,以一定的频率默认是(30ms)从显存中拿出显示的信息, 然后,当有VNC client连接上以后,定期的发送给VNC client就可以了。

    阅读全文 »

  • xen热迁移代码分析


    xen的热迁移代码使用的是precopy算法,简单描述下算法

    阅读全文 »

  • 走读qemu代码热迁移流程


    热迁移的概念已经不陌生了,在虚拟化发展中,热迁移也越来越多的应用在商用场景。今天就来分析下热迁移的代码,详细了解下这一过程如何实现的。

    阅读全文 »

  • Hyper初步分析


    Docker的快速发展为云场景带来了一丝新意,Docker提出的镜像打包方式迎合了Devops的开发方式, 对云服务的快速开发提供了有力的帮助。Docker使用的是container技术,而云平台上传统应用在目前更多的是直接跑在vm中。 对于container和vm之间的区别在why Hyper中有了很好的描述,当然也包括了今天的主角Hyper自身的优势。 这里就引出了一个新东西Hyper

    阅读全文 »

  • 如何用zerocopy机制实现内核访问用户空间


    在32位系统下,linux的地址空间划分以0xC0000000为分界线,以下为用户空间,以上为系统空间。64位下是使用0xffffffff80000000来进行划分。 每个程序运行的时候,都有自己独立的用户地址空间,内核空间则是共用的。如下图所示:

    阅读全文 »

  • 搭建jekyll


    开始有了好好写点文章的想法,本人一直比较懒,所以以前的文章也就马马虎虎的。 既然打算开始就准备坚持下去。

    阅读全文 »