使 debuginfod 对 Linux 内核可行

主要观点:debuginfod 是通过 HTTP API 提供调试符号等的服务,多数 Linux 发行版运行其服务器且很多调试工具会自动使用,能大幅提升调试器的可用性,但在 drgn 中使用时遇到服务器性能问题,获取内核及模块的调试符号需超一小时,经研究发现是 Linux 包管理等设计决策导致,通过了解相关组件提出解决方案将获取时间减至 2 分钟。

关键信息

  • debuginfod 基于二进制的 build ID 进行查询和响应,服务器端定期扫描目录创建索引。
  • Linux 软件包一般是带额外元数据的归档文件,如 RPM 是包含压缩 cpio 归档的几个元数据部分,deb 类似但格式不同。
  • 内核包文件大且包含众多文件,从其提取文件耗时久,debuginfod 有缓存和预取优化但仍效果不佳。
  • xz 格式支持随机访问读取,可加快获取文件速度,liblzma 需了解.xz 文件格式实现,debuginfod 可利用其进行优化。
  • 目前方法依赖包实现细节,需联系包维护者记录,未来 Zstandard 可能成为主流,也可考虑使用索引非固体归档格式。

重要细节

  • 给出了获取二进制调试符号的 curl 命令示例。
  • 详细说明了 xz 随机访问读取的原理和步骤。
  • 介绍了为 debuginfod 开发的利用 xz 随机访问读取的补丁系列及后续计划。
阅读 22
0 条评论