zoukankan      html  css  js  c++  java
  • 调试QEMU+RBD: 虚拟机的 IO流程 [TODO]

    这里记录了调试QEMU中 GuestVM发起IO请求,到最终IO请求落盘到Ceph OSD的全过程。

    环境准备

    想了想,这个调试环境还是很复杂的: QEMU要能够调试,GuestVM内核要能够调试,然后Ceph要能够调试。
    下面尝试来说明下,之前也零散的说过些,但是这里想要把全过程记录下来,所以就再写一遍。

    Host操作系统版本以及基础配置

    Host操作系统版本:centos 7.6或以上
    下载地址:
    https://mirrors.aliyun.com/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-Minimal-1908.iso
    一些配置:

    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
    
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    yum update && yum groupinstall "Development Tools"
    

    编译Ceph

    这里为什么要先编译ceph ,因为编译ceph过程中会安装的众多RPM devel package,解决大部分的包依赖,可以为后面的组件编译提供便利。2333
    详细编译步骤见这里:https://www.cnblogs.com/powerrailgun/p/12133107.html

    编译QEMU

    下载qemu-4.1.1.tar.gz版本
    https://download.qemu.org/
    解压之。
    具体需要的依赖包视实际情况而定,参考:

    yum install pixman-devel -y
    

    最终安装后的版本:

    pixman-devel-0.34.0-1.el7.x86_64
    pixman-0.34.0-1.el7.x86_64
    

    可能还会安装诸如bisonflex这样的工具。
    因为我们要和后端Ceph对接,因此还需要安装rbd devel安装包,版本需要和后面对接的ceph版本一致,否则可能会出现问题。本人调试环境中ceph版本是12.2.5,所以这里也是用12.2.5的环境。

    yum install librbd-devel-12.2.5-0.el7.x86_64 librbd1-12.2.5-0.el7.x86_64
    

    为了不和以后系统安装的qemu发生冲突,这里将qemu安装到/debug目录下,没有这个目录就新建一个。
    到qemu源码目录中执行configure:

    ./configure --enable-rbd --enable-debug --enable-trace-backends=simple --enable-debug-stack-usage --enable-kvm --enable-vnc --prefix=/debug --target-list=x86_64-softmmu
    

    注意

    1. 如果不加上--target-list=x86_64-softmmu选项,那么会编译所有平台的模拟器,即就是不限于x86_64
    2. --enable-rbd可能需要安装librdb库(前面已经安装)。
    3. --enable-trace-backends=simple该选项可能会影响性能,故生产环境中应关闭该选项,调试环境中推荐开启。

    接着,开始编译和安装:

    make -j4
    make install
    

    编译GDB

    下载gdb源码:

    wget https://mirrors.ustc.edu.cn/gnu/gdb/gdb-8.2.tar.gz
    

    由于GDB依赖expat,所以需要先编译expat

    wget https://github.com/libexpat/libexpat/releases/download/R_2_2_8/expat-2.2.8.tar.bz2
    

    解压:expat-2.2.8.tar.bz2
    然后开始执行编译:

    ./configure --prefix=/debug/expat-2.2.8
    
    make -j4 && make install
    

    4.2 开始编译安装gdb
    在正式编译gdb之前,需要编辑下这个路径下的代码: gdb/remote.c
    remote_target::process_g_packet()函数中的一部分内容修改成这个样子,否则gdb调试的时候可能出错:

      /* Further sanity checks, with knowledge of the architecture.  */
    //  if (buf_len > 2 * rsa->sizeof_g_packet)
     //   error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
    //           "bytes): %s"), rsa->sizeof_g_packet, buf_len / 2, rs->buf);
    if (buf_len > 2 * rsa->sizeof_g_packet) {
        rsa->sizeof_g_packet = buf_len;
        for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
        {
            if (rsa->regs[i].pnum == -1)
                continue;
            if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
                rsa->regs[i].in_g_packet = 0;
            else
                rsa->regs[i].in_g_packet = 1;
        }
    }
    

    还需要安装一个包,否则在make install时会出现错误。

    yum install texinfo -y
    

    进入到gdb-8.2的目录下,编译gdb:

    ./configure --prefix=/opt --with-expat --includedir=/debug/expat-2.2.8/include/ --libdir=/debug/expat-2.2.8/lib
    

    这里假设我的expat放置在/debug路径下。
    然后执行make:

    make 
    make install 
    

    编译GuestVM内核

    参考这里的说明:https://www.cnblogs.com/powerrailgun/p/12168396.html

    调试过程记录

  • 相关阅读:
    SQL 通配符
    低压电器及其控制
    计算机组成原理
    ASP.NET MVC 4 跨域
    C#排序算法小结
    C# 集合扩展快速排序算法
    C# 排序算法记录
    文件大小
    ProcDump
    C# 获取文件MD5校验码
  • 原文地址:https://www.cnblogs.com/powerrailgun/p/12200986.html
Copyright © 2011-2022 走看看