主要观点:debuginfod 是通过 HTTP API 提供调试符号等的服务,多数 Linux 发行版运行其服务器且很多调试工具会自动使用,能大幅提升调试器的可用性,但在 drgn 中使用时遇到服务器性能问题,获取内核及模块的调试符号需超一小时,经研究发现是 Linux 包管理等设计决策导致,通过了解相关组件提出解决方案将获取时间减至 2 分钟。
关键信息:
- debuginfod 基于二进制的 build ID 进行查询和响应,服务器端定期扫描目录创建索引。
- Linux 软件包一般是带额外元数据的归档文件,如 RPM 是包含压缩 cpio 归档的几个元数据部分,deb 类似但格式不同。
- 内核包文件大且包含众多文件,从其提取文件耗时久,debuginfod 有缓存和预取优化但仍效果不佳。
- xz 格式支持随机访问读取,可加快获取文件速度,liblzma 需了解.xz 文件格式实现,debuginfod 可利用其进行优化。
- 目前方法依赖包实现细节,需联系包维护者记录,未来 Zstandard 可能成为主流,也可考虑使用索引非固体归档格式。
重要细节:
- 给出了获取二进制调试符号的 curl 命令示例。
- 详细说明了 xz 随机访问读取的原理和步骤。
- 介绍了为 debuginfod 开发的利用 xz 随机访问读取的补丁系列及后续计划。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。