GDB 调试 libvirt 源码之 domblkinfo 命令源码跟踪记

GDB 调试 libvirt 源码之 domblkinfo 命令源码跟踪记

💡 原文中文,约7200字,阅读约需17分钟。
📝

内容提要

最近发现 KVM 虚拟机的磁盘利用率显示不准确。通过调试 libvirt 源码,发现磁盘信息获取函数中的某些值未正确填充,导致显示错误。问题源于与 QEMU 的交互,需要进一步跟踪 QEMU 源码以解决。

🎯

关键要点

  • 最近发现 KVM 虚拟机的磁盘利用率显示不准确。

  • 使用 virsh 命令查看磁盘使用情况时,发现容量、分配和物理值相同,显示错误。

  • 通过调试 libvirt 源码,发现获取磁盘信息的函数中的某些值未正确填充。

  • 问题源于与 QEMU 的交互,特别是在获取磁盘信息时的函数调用。

  • 需要进一步跟踪 QEMU 源码以解决显示错误的问题。

延伸问答

KVM 虚拟机磁盘利用率显示不准确的原因是什么?

原因是 libvirt 源码中获取磁盘信息的函数某些值未正确填充,导致显示错误。

如何使用 GDB 调试 libvirt 源码?

可以通过找到 libvirtd 的 PID,使用 GDB 跟踪相关函数,如 domblkinfo 和 virDomainGetBlockInfo。

在调试过程中,如何确认获取的磁盘信息是否正确?

可以通过设置断点并逐步执行代码,检查 info 结构体中的各个字段值是否正确填充。

libvirt 如何与 QEMU 交互以获取磁盘信息?

libvirt 通过调用 QEMU 提供的 QMP 协议,使用 'query-block' 命令获取磁盘信息。

在调试中发现的主要问题是什么?

主要问题是获取磁盘信息时,某些值未正确填充,导致显示的容量、分配和物理值相同。

如何解决 KVM 虚拟机磁盘利用率显示错误的问题?

需要进一步跟踪 QEMU 源码,分析其获取磁盘信息的实现,以找到并修复问题。

➡️

继续阅读