《KVM实战:原理、进阶与性能调优》一3.3.2 配置KVM

举报
华章计算机 发表于 2019/06/06 15:27:47 2019/06/06
【摘要】 本书摘自《KVM实战:原理、进阶与性能调优》一书中第3章,第3.3.2节,作者是任永杰 程舟

3.3.2 配置KVM

       上面3种方式下载的源代码都可以同样地进行配置和编译,本章以开发中的最新源代码仓库kvm.git来讲解KVM的配置和编译等。KVM是作为Linux内核中的一个module而存在的,而kvm.git是一个包含了最新的KVM模块开发中代码的完整的Linux内核源码仓库。它的配置方式与普通的Linux内核配置完全一样,只是需要注意将KVM相关的配置选择为编译进内核或者编译为模块。
       在kvm.git(Linux kernel)代码目录下,运行“make help”命令可以得到一些关于如何配置和编译kernel的帮助手册。命令行如下:
       [root@kvm-host kvm]# make help
       Cleaning targets:
           clean           - Remove most generated files but keep the config and enough
                              build support to build external modules
           mrproper        - Remove all generated files + config + various backup files
           distclean       - mrproper + remove editor backup and patch files

        Configuration targets:
        config          - Update current config utilising a line-oriented program
        nconfig         - Update current config utilising a ncurses menu based program
        menuconfig      - Update current config utilising a menu based program
        xconfig         - Update current config utilising a Qt based front-end
        gconfig         - Update current config utilising a GTK+ based front-end
        oldconfig       - Update current config utilising a provided .config as base
        localmodconfig  - Update current config disabling modules not loaded
        localyesconfig  - Update current config converting local mods to core
        silentoldconfig - Same as oldconfig, but quietly, additionally update deps
        defconfig       - New config with default from ARCH supplied defconfig
        savedefconfig   - Save current config as ./defconfig (minimal config)
        allnoconfig     - New config where all options are answered with no
        allyesconfig    - New config where all options are accepted with yes
        allmodconfig    - New config selecting modules when possible
        alldefconfig    - New config with all symbols set to default
        randconfig      - New config with random answer to all options
        listnewconfig   - List new options
        olddefconfig    - Same as silentoldconfig but sets new symbols to their default
                            value
        kvmconfig       - Enable additional options for kvm guest kernel support
        xenconfig       - Enable additional options for xen dom0 and guest kernel support
        tinyconfig      - Configure the tiniest possible kernel
       <!- 此处省略数十行帮助信息 ->
       对KVM或Linux内核配置时常用的一些配置命令解释如下。
       1)make config:基于文本的最为传统也是最为枯燥的一种配置方式,但是它可以适用于任何情况之下。这种方式会为每一个内核支持的特性向用户提问,如果用户回答“y”,则把特性编译进内核;回答“m”,则把特性作为模块进行编译;回答“n”,则表示不对该特性提供支持;输入“?”则显示该选项的帮助信息。在了解之后再决定处理该选项的方式。在回答每个问题前必须考虑清楚,如果在配置过程中因为失误而给了错误的回答,就只能按“Ctrl+c”组合键强行退出然后重新配置了。
       2)make oldconfig:make oldconfig和make config类似,但是它的作用是在现有的内核设置文件基础上建立一个新的设置文件,只会向用户提供有关新内核特性的问题。在新内核升级的过程中,make oldconfig非常有用,用户将现有的配置文件.config复制到新内核的源码中,执行make oldconfig,此时,用户只需要回答那些针对新增特性的问题。
       3)make silentoldconfig:和上面make oldconfig一样,只是额外悄悄地更新选项的依赖关系。
       4)make olddefconfig:和上面make silentoldconfig一样,但不需要手动交互,而是对新选项以其默认值配置。
       5)make menuconfig:基于终端的一种配置方式,提供了文本模式的图形用户界面,用户可以通过移动光标来浏览所支持的各种特性。使用这种配置方式时,系统中必须安装ncurses库,否则会显示“Unable to find the ncurses libraries”的错误提示。其中“Y”“N”“M”“?”输入键的选择功能与前面make config中介绍的一致。
       6)make xconfig:基于X Window的一种配置方式,提供了漂亮的配置窗口,不过只能在X Server上运行X桌面应用程序时使用。它依赖于QT,如果系统中没有安装QT库,则会出现“Unable to find any QT installation”的错误提示。
       7)make gconfig:与make xconfig类似,不同的是make gconfig依赖于GTK库。
       8)make defconfig:按照内核代码中提供的默认配置文件对内核进行配置(在Intel x86-64平台上,默认配置为arch/x86/configs/x86_64_defconfig),生成.config文件可以用作初始化配置,然后再使用make menuconfig进行定制化配置。
       9)make allyesconfig:尽可能多地使用“y”输入设置内核选项值,生成的配置中包含了全部的内核特性。
       10)make allnoconfig:除必需的选项外,其他选项一律不选(常用于嵌入式Linux系统的编译)。
       11)make allmodconfig:尽可能多地使用“m”输入设置内核选项值来生成配置文件。
       12)make localmodconfig:会执行 lsmod 命令查看当前系统中加载了哪些模块(Modules),并最终将原来的.config 中不需要的模块去掉,仅保留前面 lsmod 命令查出来的那些模块,从而简化了内核的配置过程。这样做确实方便了很多,但是也有个缺点:该方法仅能使编译出的内核支持当前内核已经加载的模块。因为该方法使用的是 lsmod 查询得到的结果,如果有的模块当前没有被加载,那么就不会编到新的内核中。
       下面以make menuconfig为例,介绍一下如何选择KVM相关的配置(系统中要安装好ncurses-devel包)。运行make menuconfig后显示的界面如图3-6所示。
       选择了Virtualization之后,进入其中进行详细配置,包括选中KVM、选中对处理器的支持(比如:KVM for Intel processors support,KVM for AMD processors support)等,如图3-7所示。

image.png

image.png

       提示:为了确保生成的.config文件生成的kernel是实际可以工作的(直接make defconfig 生成的.config文件编译出来的kernel常常是不能工作的),最佳实践是以你当前使用的config(比如,我们安装好RHEL 7.3的OS以后,/boot/config-3.10.0-xxx.x86_64)为基础,将它复制到你的linux 目录下,重命名为.config,然后通过make olddefconfig更新补充一下这个.config。
       在配置完成之后,就会在kvm.git目录下面生成一个.config文件。最好检查一下KVM相关的配置是否正确。在本次配置中,与KVM直接相关的几个配置项主要情况如下:
       CONFIG_HAVE_KVM=y
       CONFIG_HAVE_KVM_IRQCHIP=y
       CONFIG_HAVE_KVM_EVENTFD=y
       CONFIG_KVM_APIC_ARCHITECTURE=y
       CONFIG_KVM_MMIO=y
       CONFIG_KVM_ASYNC_PF=y
       CONFIG_HAVE_KVM_MSI=y
       CONFIG_VIRTUALIZATION=y
       CONFIG_KVM=m
       CONFIG_KVM_INTEL=m
       # CONFIG_KVM_AMD is not set
       CONFIG_KVM_MMU_AUDIT=y


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。