首页 > 其他分享 >【翻译_by_gpt】通过一个奇怪的技巧让你的 QEMU 快 10 倍(软件开发中的一个典型的debug例子)

【翻译_by_gpt】通过一个奇怪的技巧让你的 QEMU 快 10 倍(软件开发中的一个典型的debug例子)

时间:2024-12-17 14:24:05浏览次数:3  
标签:__ 10 00 thread qemu gpt fid debug QEMU

标题:通过一个奇怪的技巧让你的 QEMU 快 10 倍

URL 来源:https://linus.schreibt.jetzt/posts/qemu-9p-performance.html

Markdown 内容:
这篇关于 QEMU 的工作和文章由 Determinate Systems 资助,并在 Determinate Systems 博客 上共同发布。

背景

NixOS 广泛使用基于 QEMU 的虚拟机来运行其测试套件。为了避免为每个测试生成磁盘镜像,测试驱动程序通常使用 Plan 9 文件协议 (9p) 共享(由 QEMU 实现的服务器)来引导 Nix 存储,其中包含测试所需的所有程序和配置。

我正在进行一个虚拟机测试,该测试从 9p 挂载的 Nix 存储中复制了相当大量的数据(约 278k 个文件,总计约 5.3GiB),并对复制这些数据所需的时间感到惊讶。在 NVMe 设备上,我预计这需要几秒钟或几分钟,但实际上测试花费了超过 2 小时,其中大部分时间用于从 9p 复制文件。由于这对于增量工作来说是不可接受的,我决定深入研究一下,并将测试时间减少到仅 7 分钟。在这篇文章中,我将描述整个过程。

分析 QEMU

作为前言:我在调试性能问题方面没有太多经验!我使用的大多数工具对我来说都是新鲜的。我首先想要找出大量时间花费在哪里。我猜测是在 QEMU 而不是在客户机中,尽管这个猜测的正确性纯属运气。这个 Stack Overflow 问题 描述了一个与我的问题大致相似但不完全相同的问题。这引导我尝试使用 穷人的分析器,这是一个由 gdb、一些 shell 和 awk 组成的小黑客。

惊讶和失败的故事:穷人的分析器

我立即在这种方法上遇到了一个小障碍。gdb 说:

警告:目标和调试器在不同的 PID 命名空间中;线程列表和其他数据可能不可靠。连接到容器内的 gdbserver。

Nix 使用 Linux 命名空间为构建提供一些与运行构建的系统隔离,以减少特定机器环境对构建结果的影响(“纯度”)。这包括 PID 命名空间,它们阻止命名空间内的进程接触命名空间外的任何进程。gdb 对于在与其目标进程不同的 PID 命名空间中感到不满!我首先尝试使用 nsenter 将我的 gdb 放入沙箱中。我在这里遇到的第一个惊讶是,进入 PID 命名空间并不会导致 procps 的实用程序(如 pspgreptop)仅报告新命名空间内的进程:

[root@oak:~]# pgrep -a qemu
1678991 /nix/store/6shk4z9ip57p6vffm5n9imnkwiks9fsa-qemu-host-cpu-only-for-vm-tests-7.0.0/bin/qemu-kvm [...]

[root@oak:~]# nsenter --target 1678991 --pid

标签:__,10,00,thread,qemu,gpt,fid,debug,QEMU
From: https://www.cnblogs.com/math/p/18612339/translate-make-qemu-10x-faster-by-fix-a-little-bug

相关文章

  • centos8 升级 python3.10
    想要将Python3版本从已有的3.6.8升级到3.10,直接dnf安装发现找不到安装包,只能从源代码手动安装,以下是详细步骤:1.安装必要的依赖编译Python3.10需要一些开发工具和库:sudodnfgroupinstall"DevelopmentTools"-ysudodnfinstall-ygccopenssl-develbzip2-devellibffi......
  • hot100-一刷-09图论(共4道题)
    题目题目链接题目描述代码实现分析:代码:题目题目链接题目描述代码实现分析:代码:题目题目链接题目描述代码实现分析:代码:题目题目链接题目描述代码实现分析:代码:......
  • 自学网络安全(黑客技术)2024年 —100天学习计划
    ......
  • OpenAI发布12月11日ChatGPT宕机故障报告:集群出现死循环把工程师挡在门外
    12月11日OpenAIChatGPT和Sora等服务出现长达4小时10分钟的宕机,此次宕机只是个小更改导致的,而且这个小更改仅在部署3分钟后就被发现出现问题,按理说这么快发现问题应该是很容易解决的。不过OpenAI也出现了和某些公司相同的错误:服务挂了后把工程师也给锁门外......
  • LUOGU_P1045(高精度+快速幂取模)
    高精度乘法+快速幂取模直接搞定,不多赘述,详见注释! #include<iostream>#include<cstdio>#include<cmath>#include<cstring>usingnamespacestd;inta[501],p,k[501],c[501],d;//底数a[],指数p,模10^500,余k[]voidtimes(intx){//高精度乘法 memset(c,0,sizeof(c));......
  • YOLOv10全网首发优化:遥感去雾 | 新颖的双注意力块(DAB) | 24.12月最新成果
    ......
  • 基于STM32F103的数字电压表设计
    基于STM32F103的数字电压表设计仿真软件:      Proteus8.17编程软件:      Keil5仿真实现:      使用STM32F103的内部ADC(模数转换器)测量外部电压(用电位器来进行电压的改变),将测量到的电压值显示在数码管上,同事与仿真中的电压表进行对比,误差很小。......
  • 海螺多功能苹果CMSv10自适应全屏高端模板修复版
    多功能苹果CMSv10自适应全屏高端模板这是一款带“主题管理系统”的模板。这是一款好模板。后台点开自定义菜单配置在最下方添加:首涂主题设置,/admin.php/admin/conch/theme其中admin.php如更名同上菜单配置也要更换安装完成后删除服务器上的压缩包按照步骤都操作完......
  • 使用win10 wsl子系统将 rust 程序静态编译为linux可执行文件
    chapterⅠ事情起因最近在学习rust,想把一部分java服务迁移至rust编写,但由于公司服务器都是linux系统,所以在找windows下交叉编译为linux可执行文件的方法,把bing首页搜索的结果试了个遍都不行,始终报错“musl-gcc”无法找到,搜遍全网都无法解决。最终在我不断尝试的过程中逐渐......
  • YOLOv10改进,YOLOv10利用DLKAttention融合DCNv3、DCNv4形成全新的可变形大核注意力,并二
    理论介绍完成本篇需要参考以下三篇文章,并已添加到YOLOv10代码中YOLOv10改进,YOLOv10添加DCNv3可变性卷积与C2f结构融合(无需编译)YOLOv10改进,YOLOv10添加DCNv4可变性卷积(windows系统成功编译),全网最详细教程YOLOv10改进,YOLOv10添加DLKA-Attention可变形大核注意力,WA......