码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Libvirt-Qemu-Kvm 操作手记


    (持续更新~)

    本文主要用于记录在操作libvirt + qemu + kvm过程中遇到的问题及原因分析。

    Hugepage

    让qemu使用大页可以减少tdp的size,一定程度上可以提高性能;使用大页可以用memfd或者file backend。

    memfd

    操作步骤如下:

    1. 在系统中reserve大页;命令参考http://t.csdnimg.cn/PPetb,例如:
      echo 16 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
    2. 重新挂载/dev/hugepages,使其pagesize为1g,
      mount -o remount,pagesize=1g /dev/hugepages
    3. 重启libvirtd,
      systemctl restart libvirtd
    4. 修改虚拟机xml文件如下:
      1. 'KiB'>16777216
      2. 'KiB'>16777216
      3. 'memfd'/>
      4. 'shared'/>

    启动虚拟机之后,我们会看到memfd文件;

     之所以会显示deleted,是memfd创建文件的方式导致的,参考内核代码:

    1. proc_pid_readlink()
    2. -> do_proc_readlink()
    3. -> d_path()
    4. ---
    5. if (unlikely(d_unlinked(path->dentry)))
    6. prepend(&b, " (deleted)", 11);
    7. else
    8. prepend(&b, "", 1);
    9. ---
    10. static inline int d_unlinked(const struct dentry *dentry)
    11. {
    12. return d_unhashed(dentry) && !IS_ROOT(dentry);
    13. }
    14. SYSCALL_DEFINE2(memfd_create)
    15. -> hugetlb_file_setup()
    16. -> alloc_file_pseudo()
    17. ---
    18. path.dentry = d_alloc_pseudo(mnt->mnt_sb, &this);
    19. ...
    20. path.mnt = mntget(mnt);
    21. d_instantiate(path.dentry, inode);
    22. ---
    23. 其并没有调用d_splice_alias()、d_add()接口,所以是unhashed的

    另外,初次测试时,并没有step 2,导致内存分配失败;原因是:libvirt传给qemu的hugetlbszie是2M,而我预留的是1G;追查libvirt代码,原因在于:

    1. virQEMUDriverConfigNew()
    2. ---
    3. /* For privileged driver, try and find hugetlbfs mounts automatically.
    4. * Non-privileged driver requires admin to create a dir for the
    5. * user, chown it, and then let user configure it manually. */
    6. if (privileged &&
    7. virFileFindHugeTLBFS(&cfg->hugetlbfs, &cfg->nhugetlbfs) < 0) {
    8. ...
    9. }
    10. ---

    libvirt会参考系统中挂载的hugetlbfs的pagesize,以此作为参考。

  • 相关阅读:
    IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
    网课题库接口如何快速搭建到公众号
    RabbitMQ:发布确认模式
    centos7 部署oracle完整教程(命令行)
    抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。
    单个脚本打包成jar可以直接运行
    centos上安装clickhouse和启动使用
    第8章 函数探幽
    【vue】在父组件监听子组件的生命周期方法 ---@hock
    【MyBatis框架】第二章 MyBatis入门
  • 原文地址:https://blog.csdn.net/home19900111/article/details/134275293
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号