Commit 49486f80 authored by chengshunyan's avatar chengshunyan
Browse files

add init

parents
# DCU Performance Analyzer 开发文档
## 概述
本文档旨在为 DCU Performance Analyzer 的开发者提供技术细节和架构说明。该工具是一个基于Python的性能分析框架,用于自动化DCU环境的检查和监控。
## 架构设计
### 核心组件
- **主类 (`DCUPerformanceAnalyzer`)**: 负责管理整个分析流程,包括初始化、检查执行、报告生成和数据打包。
- **数据结构 (`CheckResult`)**: 统一的检查结果数据模型,用于在不同模块间传递数据。
- **检查模块 (check_*)**: 每个检查模块是一个独立的函数,负责执行特定的检查任务并返回 `CheckResult` 对象。
- **命令行界面 (CLI)**: 使用 `argparse` 构建,提供用户友好的交互界面。
- **日志系统**: 使用 `logging` 模块,支持调试模式和静默模式。
### 目录结构
```
dcuprofiletools/
├── dcu_performance_analyzer.py # 主程序
├── env_check/ # 原始脚本目录
│ └── dcu_env_check-main/
├── dist/ # PyInstaller打包输出
│ └── dcu_analyzer # 可执行文件
├── USER_MANUAL.md # 用户手册
└── DEV_GUIDE.md # 开发文档
```
## 技术栈
- **编程语言**: Python 3.7+
- **核心库**:
- `argparse`: 命令行解析
- `subprocess`: 执行shell命令
- `logging`: 日志记录
- `json`: 数据序列化
- `tarfile`: 文件打包
- `concurrent.futures`: 并发处理
- `dataclasses`: 数据结构定义
- **打包工具**: PyInstaller
## 模块详解
### `DCUPerformanceAnalyzer`
#### `__init__(self, output_dir, debug, quiet)`
- 初始化输出目录、日志系统和结果列表。
- 创建必要的子目录(logs, data, reports)。
#### `_setup_logging(self)`
- 配置日志处理器(文件和控制台)。
- 根据 `debug``quiet` 参数设置日志级别。
#### `run_command(self, cmd, timeout)`
- 使用 `subprocess.run` 执行shell命令。
- 捕获标准输出、标准错误和返回码。
- 处理超时和异常情况。
#### `check_*` 模块
- 每个模块负责一个独立的检查任务。
- 使用 `run_command` 执行必要的shell命令。
- 处理命令输出,提取关键信息。
- 构建并返回 `CheckResult` 对象。
#### `run_all_checks(self)`
- 使用 `ThreadPoolExecutor` 并发执行所有检查模块。
- 收集 `CheckResult` 对象。
#### `generate_report(self)`
- 统计检查结果(PASS, FAIL, WARNING)。
- 生成JSON和文本格式的报告文件。
#### `create_package(self)`
- 使用 `tarfile` 将整个输出目录打包成 `tar.gz` 文件。
### `create_cli()`
- 使用 `argparse` 定义命令行参数和帮助信息。
### `main()`
- 程序入口点。
- 解析命令行参数。
- 创建 `DCUPerformanceAnalyzer` 实例并运行分析。
- 处理异常和用户中断。
## 开发指南
### 添加新的检查模块
1.`DCUPerformanceAnalyzer` 类中创建一个新的方法,命名为 `check_new_feature`
2. 该方法应返回一个 `CheckResult` 对象。
3. 在方法内部,使用 `self.run_command` 执行必要的命令。
4. 处理命令输出,并根据结果设置 `CheckResult` 的状态和消息。
5. 将新模块添加到 `run_all_checks` 方法的检查列表中。
6.`create_cli` 函数中,将新模块的名称添加到 `choices` 列表中。
### 扩展 `CheckResult`
- 如果需要添加新的字段,可以直接修改 `CheckResult``dataclass` 定义。
- 确保所有检查模块都正确填充新字段。
### 修改报告格式
- `generate_report` 方法负责生成报告。
- 可以修改JSON结构或文本摘要的格式。
- 确保向后兼容性,或更新版本号。
## 测试
### 单元测试
- 对每个检查模块编写单元测试,模拟不同的命令输出和异常情况。
- 使用 `unittest.mock` 来模拟 `subprocess.run`
### 集成测试
- 运行完整的分析流程,验证所有模块的集成。
- 检查生成的报告和数据包是否正确。
### 手动测试
- 在不同的Linux发行版上测试可执行文件。
- 模拟各种错误情况(如权限不足、命令缺失)。
## 打包和发布
### 使用 PyInstaller
```bash
pip install pyinstaller
pyinstaller --onefile --name dcu_analyzer dcu_performance_analyzer.py
```
### 注意事项
- 确保所有依赖项都已安装。
- PyInstaller可能会产生较大的可执行文件,可以考虑使用虚拟环境来减小体积。
- 在目标平台上进行打包,以确保兼容性。
## 贡献
### 代码风格
- 遵循 PEP 8 代码风格指南。
- 使用类型提示(Type Hinting)。
- 编写清晰的文档字符串(Docstrings)。
### 提交规范
- 使用有意义的提交信息。
- 每个提交应包含一个独立的逻辑单元。
- 在提交前运行代码格式化和静态分析工具。
## 路线图
- **v1.1**: 支持更多的性能基准测试。
---
# DCU Perfile Tools
一个针对DCU环境的综合性能分析工具,整合了现有的环境检查脚本功能,使客户能够便捷地执行性能分析、收集相关日志,并生成可执行的报告。
## 功能特性
### 核心功能
-**系统信息收集**: CPU、内存、操作系统版本等基础信息
-**PCIe设备检查**: DCU设备识别、PCIe链路状态分析
-**驱动状态检查**: 内核模块加载状态、驱动文件完整性
-**系统日志收集**: dmesg、系统日志文件分析
-**硬件信息检查**: 主板、BIOS、IPMI信息收集
-**性能指标监控**: CPU、内存、磁盘使用率实时监控
### 高级特性
-**模块化检查**: 可选择性运行特定检查模块
-**并行处理**: 多线程并发执行检查任务
-**详细日志**: 完整的操作记录和错误追踪
-**报告生成**: JSON和文本格式的分析报告
-**数据打包**: 一键导出所有分析结果
-**跨平台支持**: 独立可执行文件,无需Python环境
## 快速开始
### 使用可执行文件(推荐)
```bash
cd dist
# 下载并赋予执行权限
chmod +x dcu_analyzer
# 运行所有检查
./dcu_analyzer
# 运行指定模块
./dcu_analyzer -c system pcie driver
# 指定输出目录
./dcu_analyzer -o /tmp/my_analysis
```
### 使用Python版本
```bash
# 运行所有检查
python3 dcu_performance_analyzer.py
# 运行指定模块
python3 dcu_performance_analyzer.py -c system pcie driver
```
## 安装要求
### 系统要求
- 操作系统: Linux (推荐 Kylin、CentOS、Ubuntu)
- 架构: x86_64
- 权限: 建议使用root权限运行以获得完整信息
### Python环境(可选)
如果直接使用Python版本:
- Python 3.7+
- 标准库(无额外依赖)
## 命令行选项
```
用法: dcu_analyzer [选项]
可选参数:
-h, --help 显示帮助信息并退出
-c {system,pcie,driver,logs,hardware,performance} [{...}]
指定要运行的检查模块
-o OUTPUT, --output OUTPUT
指定输出目录
-t LOG_AGE, --log-age LOG_AGE
收集日志的时间范围(小时) (默认: 24)
-s LOG_SIZE, --log-size LOG_SIZE
日志文件大小限制(MB) (默认: 10)
--auto-install-pkg 自动安装缺失的软件包
-d, --debug 启用调试模式
-q, --quiet 静默模式(仅显示错误)
-v, --version 显示版本号并退出
```
## 检查模块
| 模块 | 描述 | 主要检查项 |
|------|------|------------|
| system | 系统信息 | CPU、内存、操作系统版本 |
| pcie | PCIe设备 | DCU设备识别、链路状态 |
| driver | 驱动状态 | 内核模块、驱动文件 |
| logs | 系统日志 | dmesg、系统日志文件 |
| hardware | 硬件信息 | 主板、BIOS、IPMI |
## 输出说明
### 目录结构
```
dcu_analysis/
├── logs/
│ └── analysis.log # 详细日志文件
├── data/
| ├── pcie_info # pcie设备信息
│ ├── cpu_info.txt # CPU信息
│ ├── memory_info.txt # 内存信息
│ ├── os_info.txt # OS系统信息
│ ├── dmesg.log # 内核日志
│ ├── hardware.txt # 硬件信息
| ├── hy_smi_info.txt # DCU状态信息
| ├── pcie_dcu.log # DCU拓扑信息
└── reports/
├── analysis_report.json # JSON格式报告
└── analysis_summary.txt # 文本格式摘要
```
### 状态说明
- **PASS**: 检查通过,未发现问题
- **FAIL**: 检查失败,发现严重问题
- **WARNING**: 检查完成,发现潜在问题
- **INFO**: 信息收集,无状态判断
## 技术支持
如遇到问题,请提供以下信息:
1. 工具版本号 (`./dcu_analyzer -v`)
2. 操作系统版本
3. 完整的错误日志
4. 复现步骤
## 版本历史
### v1.0.0 (2026-03-06)
- ✅ 初始版本发布
- ✅ 集成6个核心检查模块
- ✅ 提供JSON和文本报告
- ✅ 支持数据打包导出
- ✅ 完整的测试套件
- ✅ 详细的用户文档
---
**最后更新**: 2026-03-06
\ No newline at end of file
# DCU Profile Tools 用户手册
## 概述
DCU Profile Tools 是一个针对 DCU 环境的综合性能分析工具。该工具整合了现有的环境检查脚本功能,使用户能够便捷地执行性能分析、收集相关日志,并生成可执行的报告。
## 功能特性
### 核心功能
- **系统信息收集**: CPU、内存、操作系统版本等基础信息
- **PCIe设备检查**: DCU设备识别、PCIe链路状态分析
- **驱动状态检查**: 内核模块加载状态、驱动文件完整性
- **系统日志收集**: dmesg、系统日志文件分析
- **硬件信息检查**: 主板、BIOS、IPMI信息收集
- **性能指标监控**: CPU、内存、磁盘使用率实时监控
### 高级特性
- **模块化检查**: 可选择性运行特定检查模块
- **并行处理**: 多线程并发执行检查任务
- **详细日志**: 完整的操作记录和错误追踪
- **报告生成**: JSON和文本格式的分析报告
- **数据打包**: 一键导出所有分析结果
- **跨平台支持**: 独立可执行文件,无需Python环境
## 安装和使用
### 系统要求
- 操作系统: Linux (推荐 Kylin、CentOS、Ubuntu)
- 架构: x86_64
- 权限: 建议使用root权限运行以获得完整信息
### 安装步骤
1. 下载可执行文件 `dcu_analyzer`
2. 赋予执行权限: `chmod +x dcu_analyzer`
3. 运行工具: `./dcu_analyzer`
### 基本用法
#### 运行所有检查
```bash
./dcu_analyzer
```
#### 运行指定检查模块
```bash
./dcu_analyzer -c system pcie driver
```
#### 指定输出目录
```bash
./dcu_analyzer -o /tmp/my_analysis
```
#### 调试模式
```bash
./dcu_analyzer -d
```
#### 静默模式(仅显示错误)
```bash
./dcu_analyzer -q
```
## 命令行选项
```
用法: dcu_analyzer [选项]
可选参数:
-h, --help 显示帮助信息并退出
-c {system,pcie,driver,logs,hardware,performance} [{...}]
指定要运行的检查模块
-o OUTPUT, --output OUTPUT
指定输出目录
-t LOG_AGE, --log-age LOG_AGE
收集日志的时间范围(小时) (默认: 24)
-s LOG_SIZE, --log-size LOG_SIZE
日志文件大小限制(MB) (默认: 10)
--auto-install-pkg 自动安装缺失的软件包
-d, --debug 启用调试模式
-q, --quiet 静默模式(仅显示错误)
-v, --version 显示版本号并退出
```
## 检查模块说明
### system (系统信息)
收集系统基础信息,包括:
- CPU型号和核心数
- 内存容量和使用情况
- 操作系统版本和内核信息
- Python环境信息
### pcie (PCIe设备)
检查PCIe设备状态,包括:
- DCU设备识别
- PCIe链路速度和宽度
- 设备拓扑结构
- BAR地址分配状态
### driver (驱动状态)
验证驱动程序状态,包括:
- 内核模块加载状态
- 驱动文件完整性
- IOMMU配置
- 固件文件检查
### logs (系统日志)
收集和分析系统日志,包括:
- dmesg内核日志
- 系统日志文件
- 最近一小时的日志记录
- 错误和警告信息
### hardware (硬件信息)
收集硬件详细信息,包括:
- 主板型号和序列号
- BIOS版本和配置
- IPMI管理信息(如可用)
- 硬件兼容性检查
### performance (性能指标)
实时性能监控,包括:
- CPU使用率
- 内存使用率
- 磁盘空间使用率
- 系统负载平均值
## 输出文件说明
### 目录结构
```
dcu_analysis/
├── logs/
│ └── analysis.log # 详细日志文件
├── data/
| ├── pcie_info # pcie设备信息
│ ├── cpu_info.txt # CPU信息
│ ├── memory_info.txt # 内存信息
│ ├── os_info.txt # OS系统信息
│ ├── dmesg.log # 内核日志
│ ├── hardware.txt # 硬件信息
| ├── hy_smi_info.txt # DCU状态信息
| ├── pcie_dcu.log # DCU拓扑信息
└── reports/
├── analysis_report.json # JSON格式报告
└── analysis_summary.txt # 文本格式摘要
```
### 报告文件格式
#### JSON报告 (`analysis_report.json`)
包含完整的检查结果、元数据和统计数据,便于程序化处理。
#### 文本摘要 (`analysis_summary.txt`)
提供人类可读的检查摘要,包括:
- 检查统计信息
- 各模块状态
- 执行时间
- 整体评估结果
## 结果解读
### 状态说明
- **PASS**: 检查通过,未发现问题
- **FAIL**: 检查失败,发现严重问题
- **WARNING**: 检查完成,发现潜在问题
- **INFO**: 信息收集,无状态判断
### 常见问题处理
#### PCIe设备未识别
- 检查物理连接
- 验证供电是否正常
- 检查BIOS PCIe配置
#### 驱动加载失败
- 确认驱动文件完整性
- 检查内核版本兼容性
- 验证IOMMU配置
#### 性能指标异常
- CPU使用率过高:检查后台进程
- 内存使用率过高:优化应用程序
- 磁盘空间不足:清理无用文件
## 故障排除
### 权限问题
如果遇到权限错误,请使用root权限运行:
```bash
sudo ./dcu_analyzer
```
### 命令执行失败
- 检查系统命令是否可用
- 验证PATH环境变量
- 查看详细日志获取错误信息
### 输出目录权限
确保对输出目录有写入权限,或使用 `-o` 指定有权限的目录。
## 技术支持
如遇到问题,请提供以下信息:
1. 工具版本号 (`./dcu_analyzer -v`)
2. 操作系统版本
3. 完整的错误日志
4. 复现步骤
## 版本历史
### v1.0.0 (2026-02-25)
- 初始版本发布
- 集成6个核心检查模块
- 支持命令行界面
- 提供JSON和文本报告
- 支持数据打包导出
\ No newline at end of file
(['/data1/csy/project/small_model/dcuprofiletools/tools/dcu_performance_analyzer.py'],
['/data1/csy/project/small_model/dcuprofiletools/tools'],
['codecs'],
['/usr/local/lib/python3.7/site-packages/_pyinstaller_hooks_contrib/hooks/stdhooks',
'/usr/local/lib/python3.7/site-packages/_pyinstaller_hooks_contrib/hooks'],
{},
[],
[],
False,
False,
False,
{},
[],
[],
'3.7.9 (default, Jan 13 2026, 15:43:57) \n[GCC 7.3.0]',
[('pyi_rth_pkgutil',
'/usr/local/lib/python3.7/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py',
'PYSOURCE'),
('pyi_rth_inspect',
'/usr/local/lib/python3.7/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py',
'PYSOURCE'),
('pyi_rth_multiprocessing',
'/usr/local/lib/python3.7/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py',
'PYSOURCE'),
('dcu_performance_analyzer',
'/data1/csy/project/small_model/dcuprofiletools/tools/dcu_performance_analyzer.py',
'PYSOURCE')],
[('multiprocessing.popen_forkserver',
'/usr/lib64/python3.7/multiprocessing/popen_forkserver.py',
'PYMODULE'),
('multiprocessing.connection',
'/usr/lib64/python3.7/multiprocessing/connection.py',
'PYMODULE'),
('multiprocessing.resource_sharer',
'/usr/lib64/python3.7/multiprocessing/resource_sharer.py',
'PYMODULE'),
('multiprocessing.process',
'/usr/lib64/python3.7/multiprocessing/process.py',
'PYMODULE'),
('signal', '/usr/lib64/python3.7/signal.py', 'PYMODULE'),
('selectors', '/usr/lib64/python3.7/selectors.py', 'PYMODULE'),
('xmlrpc.client', '/usr/lib64/python3.7/xmlrpc/client.py', 'PYMODULE'),
('xmlrpc', '/usr/lib64/python3.7/xmlrpc/__init__.py', 'PYMODULE'),
('gzip', '/usr/lib64/python3.7/gzip.py', 'PYMODULE'),
('_compression', '/usr/lib64/python3.7/_compression.py', 'PYMODULE'),
('xml.parsers.expat',
'/usr/lib64/python3.7/xml/parsers/expat.py',
'PYMODULE'),
('xml.parsers', '/usr/lib64/python3.7/xml/parsers/__init__.py', 'PYMODULE'),
('xml', '/usr/lib64/python3.7/xml/__init__.py', 'PYMODULE'),
('xml.sax.expatreader',
'/usr/lib64/python3.7/xml/sax/expatreader.py',
'PYMODULE'),
('xml.sax.saxutils', '/usr/lib64/python3.7/xml/sax/saxutils.py', 'PYMODULE'),
('xml.sax', '/usr/lib64/python3.7/xml/sax/__init__.py', 'PYMODULE'),
('xml.sax.handler', '/usr/lib64/python3.7/xml/sax/handler.py', 'PYMODULE'),
('xml.sax._exceptions',
'/usr/lib64/python3.7/xml/sax/_exceptions.py',
'PYMODULE'),
('xml.sax.xmlreader',
'/usr/lib64/python3.7/xml/sax/xmlreader.py',
'PYMODULE'),
('http.client', '/usr/lib64/python3.7/http/client.py', 'PYMODULE'),
('ssl', '/usr/lib64/python3.7/ssl.py', 'PYMODULE'),
('calendar', '/usr/lib64/python3.7/calendar.py', 'PYMODULE'),
('http', '/usr/lib64/python3.7/http/__init__.py', 'PYMODULE'),
('email.message', '/usr/lib64/python3.7/email/message.py', 'PYMODULE'),
('email.policy', '/usr/lib64/python3.7/email/policy.py', 'PYMODULE'),
('email.contentmanager',
'/usr/lib64/python3.7/email/contentmanager.py',
'PYMODULE'),
('email.quoprimime', '/usr/lib64/python3.7/email/quoprimime.py', 'PYMODULE'),
('string', '/usr/lib64/python3.7/string.py', 'PYMODULE'),
('email.headerregistry',
'/usr/lib64/python3.7/email/headerregistry.py',
'PYMODULE'),
('email._header_value_parser',
'/usr/lib64/python3.7/email/_header_value_parser.py',
'PYMODULE'),
('email.iterators', '/usr/lib64/python3.7/email/iterators.py', 'PYMODULE'),
('email.generator', '/usr/lib64/python3.7/email/generator.py', 'PYMODULE'),
('copy', '/usr/lib64/python3.7/copy.py', 'PYMODULE'),
('random', '/usr/lib64/python3.7/random.py', 'PYMODULE'),
('bisect', '/usr/lib64/python3.7/bisect.py', 'PYMODULE'),
('hashlib', '/usr/lib64/python3.7/hashlib.py', 'PYMODULE'),
('email._encoded_words',
'/usr/lib64/python3.7/email/_encoded_words.py',
'PYMODULE'),
('email.charset', '/usr/lib64/python3.7/email/charset.py', 'PYMODULE'),
('email.encoders', '/usr/lib64/python3.7/email/encoders.py', 'PYMODULE'),
('email.base64mime', '/usr/lib64/python3.7/email/base64mime.py', 'PYMODULE'),
('email._policybase',
'/usr/lib64/python3.7/email/_policybase.py',
'PYMODULE'),
('email.header', '/usr/lib64/python3.7/email/header.py', 'PYMODULE'),
('email.errors', '/usr/lib64/python3.7/email/errors.py', 'PYMODULE'),
('email.utils', '/usr/lib64/python3.7/email/utils.py', 'PYMODULE'),
('email._parseaddr', '/usr/lib64/python3.7/email/_parseaddr.py', 'PYMODULE'),
('email', '/usr/lib64/python3.7/email/__init__.py', 'PYMODULE'),
('quopri', '/usr/lib64/python3.7/quopri.py', 'PYMODULE'),
('getopt', '/usr/lib64/python3.7/getopt.py', 'PYMODULE'),
('gettext', '/usr/lib64/python3.7/gettext.py', 'PYMODULE'),
('uu', '/usr/lib64/python3.7/uu.py', 'PYMODULE'),
('optparse', '/usr/lib64/python3.7/optparse.py', 'PYMODULE'),
('textwrap', '/usr/lib64/python3.7/textwrap.py', 'PYMODULE'),
('email.parser', '/usr/lib64/python3.7/email/parser.py', 'PYMODULE'),
('email.feedparser', '/usr/lib64/python3.7/email/feedparser.py', 'PYMODULE'),
('decimal', '/usr/lib64/python3.7/decimal.py', 'PYMODULE'),
('_pydecimal', '/usr/lib64/python3.7/_pydecimal.py', 'PYMODULE'),
('contextvars', '/usr/lib64/python3.7/contextvars.py', 'PYMODULE'),
('numbers', '/usr/lib64/python3.7/numbers.py', 'PYMODULE'),
('base64', '/usr/lib64/python3.7/base64.py', 'PYMODULE'),
('hmac', '/usr/lib64/python3.7/hmac.py', 'PYMODULE'),
('tempfile', '/usr/lib64/python3.7/tempfile.py', 'PYMODULE'),
('struct', '/usr/lib64/python3.7/struct.py', 'PYMODULE'),
('socket', '/usr/lib64/python3.7/socket.py', 'PYMODULE'),
('multiprocessing.util',
'/usr/lib64/python3.7/multiprocessing/util.py',
'PYMODULE'),
('multiprocessing.popen_fork',
'/usr/lib64/python3.7/multiprocessing/popen_fork.py',
'PYMODULE'),
('multiprocessing.forkserver',
'/usr/lib64/python3.7/multiprocessing/forkserver.py',
'PYMODULE'),
('multiprocessing.semaphore_tracker',
'/usr/lib64/python3.7/multiprocessing/semaphore_tracker.py',
'PYMODULE'),
('multiprocessing.context',
'/usr/lib64/python3.7/multiprocessing/context.py',
'PYMODULE'),
('multiprocessing.sharedctypes',
'/usr/lib64/python3.7/multiprocessing/sharedctypes.py',
'PYMODULE'),
('multiprocessing.heap',
'/usr/lib64/python3.7/multiprocessing/heap.py',
'PYMODULE'),
('ctypes', '/usr/lib64/python3.7/ctypes/__init__.py', 'PYMODULE'),
('ctypes._endian', '/usr/lib64/python3.7/ctypes/_endian.py', 'PYMODULE'),
('multiprocessing.pool',
'/usr/lib64/python3.7/multiprocessing/pool.py',
'PYMODULE'),
('multiprocessing.dummy',
'/usr/lib64/python3.7/multiprocessing/dummy/__init__.py',
'PYMODULE'),
('multiprocessing.dummy.connection',
'/usr/lib64/python3.7/multiprocessing/dummy/connection.py',
'PYMODULE'),
('queue', '/usr/lib64/python3.7/queue.py', 'PYMODULE'),
('multiprocessing.queues',
'/usr/lib64/python3.7/multiprocessing/queues.py',
'PYMODULE'),
('multiprocessing.synchronize',
'/usr/lib64/python3.7/multiprocessing/synchronize.py',
'PYMODULE'),
('multiprocessing.managers',
'/usr/lib64/python3.7/multiprocessing/managers.py',
'PYMODULE'),
('multiprocessing.reduction',
'/usr/lib64/python3.7/multiprocessing/reduction.py',
'PYMODULE'),
('pickle', '/usr/lib64/python3.7/pickle.py', 'PYMODULE'),
('pprint', '/usr/lib64/python3.7/pprint.py', 'PYMODULE'),
('_compat_pickle', '/usr/lib64/python3.7/_compat_pickle.py', 'PYMODULE'),
('multiprocessing.popen_spawn_posix',
'/usr/lib64/python3.7/multiprocessing/popen_spawn_posix.py',
'PYMODULE'),
('multiprocessing.popen_spawn_win32',
'/usr/lib64/python3.7/multiprocessing/popen_spawn_win32.py',
'PYMODULE'),
('multiprocessing.spawn',
'/usr/lib64/python3.7/multiprocessing/spawn.py',
'PYMODULE'),
('runpy', '/usr/lib64/python3.7/runpy.py', 'PYMODULE'),
('pkgutil', '/usr/lib64/python3.7/pkgutil.py', 'PYMODULE'),
('inspect', '/usr/lib64/python3.7/inspect.py', 'PYMODULE'),
('ast', '/usr/lib64/python3.7/ast.py', 'PYMODULE'),
('dis', '/usr/lib64/python3.7/dis.py', 'PYMODULE'),
('opcode', '/usr/lib64/python3.7/opcode.py', 'PYMODULE'),
('importlib', '/usr/lib64/python3.7/importlib/__init__.py', 'PYMODULE'),
('importlib.abc', '/usr/lib64/python3.7/importlib/abc.py', 'PYMODULE'),
('importlib._bootstrap_external',
'/usr/lib64/python3.7/importlib/_bootstrap_external.py',
'PYMODULE'),
('importlib._bootstrap',
'/usr/lib64/python3.7/importlib/_bootstrap.py',
'PYMODULE'),
('importlib.util', '/usr/lib64/python3.7/importlib/util.py', 'PYMODULE'),
('contextlib', '/usr/lib64/python3.7/contextlib.py', 'PYMODULE'),
('importlib.machinery',
'/usr/lib64/python3.7/importlib/machinery.py',
'PYMODULE'),
('multiprocessing',
'/usr/lib64/python3.7/multiprocessing/__init__.py',
'PYMODULE'),
('threading', '/usr/lib64/python3.7/threading.py', 'PYMODULE'),
('_threading_local', '/usr/lib64/python3.7/_threading_local.py', 'PYMODULE'),
('_py_abc', '/usr/lib64/python3.7/_py_abc.py', 'PYMODULE'),
('stringprep', '/usr/lib64/python3.7/stringprep.py', 'PYMODULE'),
('bz2', '/usr/lib64/python3.7/bz2.py', 'PYMODULE'),
('getpass', '/usr/lib64/python3.7/getpass.py', 'PYMODULE'),
('nturl2path', '/usr/lib64/python3.7/nturl2path.py', 'PYMODULE'),
('ftplib', '/usr/lib64/python3.7/ftplib.py', 'PYMODULE'),
('netrc', '/usr/lib64/python3.7/netrc.py', 'PYMODULE'),
('shlex', '/usr/lib64/python3.7/shlex.py', 'PYMODULE'),
('mimetypes', '/usr/lib64/python3.7/mimetypes.py', 'PYMODULE'),
('http.cookiejar', '/usr/lib64/python3.7/http/cookiejar.py', 'PYMODULE'),
('tracemalloc', '/usr/lib64/python3.7/tracemalloc.py', 'PYMODULE'),
('concurrent.futures',
'/usr/lib64/python3.7/concurrent/futures/__init__.py',
'PYMODULE'),
('concurrent.futures.thread',
'/usr/lib64/python3.7/concurrent/futures/thread.py',
'PYMODULE'),
('concurrent.futures.process',
'/usr/lib64/python3.7/concurrent/futures/process.py',
'PYMODULE'),
('concurrent.futures._base',
'/usr/lib64/python3.7/concurrent/futures/_base.py',
'PYMODULE'),
('concurrent', '/usr/lib64/python3.7/concurrent/__init__.py', 'PYMODULE'),
('dataclasses', '/usr/lib64/python3.7/dataclasses.py', 'PYMODULE'),
('typing', '/usr/lib64/python3.7/typing.py', 'PYMODULE'),
('datetime', '/usr/lib64/python3.7/datetime.py', 'PYMODULE'),
('_strptime', '/usr/lib64/python3.7/_strptime.py', 'PYMODULE'),
('shutil', '/usr/lib64/python3.7/shutil.py', 'PYMODULE'),
('zipfile', '/usr/lib64/python3.7/zipfile.py', 'PYMODULE'),
('py_compile', '/usr/lib64/python3.7/py_compile.py', 'PYMODULE'),
('lzma', '/usr/lib64/python3.7/lzma.py', 'PYMODULE'),
('tarfile', '/usr/lib64/python3.7/tarfile.py', 'PYMODULE'),
('platform', '/usr/lib64/python3.7/platform.py', 'PYMODULE'),
('subprocess', '/usr/lib64/python3.7/subprocess.py', 'PYMODULE'),
('argparse', '/usr/lib64/python3.7/argparse.py', 'PYMODULE'),
('logging', '/usr/lib64/python3.7/logging/__init__.py', 'PYMODULE'),
('json', '/usr/lib64/python3.7/json/__init__.py', 'PYMODULE'),
('json.encoder', '/usr/lib64/python3.7/json/encoder.py', 'PYMODULE'),
('json.decoder', '/usr/lib64/python3.7/json/decoder.py', 'PYMODULE'),
('json.scanner', '/usr/lib64/python3.7/json/scanner.py', 'PYMODULE')],
[('libpython3.7m.so.1.0', '/usr/lib64/libpython3.7m.so.1.0', 'BINARY'),
('lib-dynload/select.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/select.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/math.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/math.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/zlib.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/zlib.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/pyexpat.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/pyexpat.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_ssl.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_ssl.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/binascii.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/binascii.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_random.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_random.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_bisect.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_bisect.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_hashlib.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_hashlib.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_sha3.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_sha3.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_blake2.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_blake2.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_sha512.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_sha512.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_sha256.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_sha256.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_md5.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_md5.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_sha1.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_sha1.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_contextvars.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_contextvars.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_decimal.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_decimal.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_multiprocessing.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_multiprocessing.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_struct.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_struct.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_socket.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_socket.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_posixsubprocess.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_posixsubprocess.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/mmap.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/mmap.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_ctypes.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_ctypes.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/array.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/array.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_queue.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_queue.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_pickle.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_pickle.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_opcode.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_opcode.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_heapq.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_heapq.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_multibytecodec.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_multibytecodec.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_jp.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_jp.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_kr.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_kr.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_iso2022.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_iso2022.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/unicodedata.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/unicodedata.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_cn.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_cn.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_tw.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_tw.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_bz2.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_bz2.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_hk.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_hk.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/termios.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/termios.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/grp.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/grp.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_datetime.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_datetime.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_lzma.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_lzma.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_json.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_json.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/resource.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/resource.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('libz.so.1', '/usr/lib64/libz.so.1', 'BINARY'),
('libexpat.so.1', '/usr/lib64/libexpat.so.1', 'BINARY'),
('libssl.so.1.1', '/usr/lib64/libssl.so.1.1', 'BINARY'),
('libcrypto.so.1.1', '/usr/lib64/libcrypto.so.1.1', 'BINARY'),
('libffi.so.7', '/usr/lib64/libffi.so.7', 'BINARY'),
('libbz2.so.1', '/usr/lib64/libbz2.so.1', 'BINARY'),
('liblzma.so.5', '/usr/lib64/liblzma.so.5', 'BINARY')],
[],
[],
[('base_library.zip',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/base_library.zip',
'DATA')],
[])
('/data1/csy/project/small_model/dcuprofiletools/tools/dist/dpt_analyzer',
True,
False,
False,
None,
None,
False,
False,
None,
True,
True,
False,
None,
None,
None,
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/dpt_analyzer.pkg',
[('PYZ-00.pyz',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/PYZ-00.pyz',
'PYZ'),
('lib-dynload/_struct.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_struct.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/zlib.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/zlib.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('struct',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/localpycs/struct.pyc',
'PYMODULE'),
('pyimod01_archive',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/localpycs/pyimod01_archive.pyc',
'PYMODULE'),
('pyimod02_importers',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/localpycs/pyimod02_importers.pyc',
'PYMODULE'),
('pyimod03_ctypes',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/localpycs/pyimod03_ctypes.pyc',
'PYMODULE'),
('pyiboot01_bootstrap',
'/usr/local/lib/python3.7/site-packages/PyInstaller/loader/pyiboot01_bootstrap.py',
'PYSOURCE'),
('pyi_rth_pkgutil',
'/usr/local/lib/python3.7/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py',
'PYSOURCE'),
('pyi_rth_inspect',
'/usr/local/lib/python3.7/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py',
'PYSOURCE'),
('pyi_rth_multiprocessing',
'/usr/local/lib/python3.7/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py',
'PYSOURCE'),
('dcu_performance_analyzer',
'/data1/csy/project/small_model/dcuprofiletools/tools/dcu_performance_analyzer.py',
'PYSOURCE'),
('libpython3.7m.so.1.0', '/usr/lib64/libpython3.7m.so.1.0', 'BINARY'),
('lib-dynload/select.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/select.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/math.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/math.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/pyexpat.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/pyexpat.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_ssl.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_ssl.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/binascii.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/binascii.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_random.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_random.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_bisect.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_bisect.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_hashlib.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_hashlib.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_sha3.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_sha3.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_blake2.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_blake2.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_sha512.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_sha512.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_sha256.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_sha256.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_md5.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_md5.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_sha1.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_sha1.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_contextvars.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_contextvars.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_decimal.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_decimal.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_multiprocessing.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_multiprocessing.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_socket.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_socket.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_posixsubprocess.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_posixsubprocess.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/mmap.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/mmap.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_ctypes.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_ctypes.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/array.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/array.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_queue.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_queue.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_pickle.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_pickle.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_opcode.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_opcode.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_heapq.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_heapq.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_multibytecodec.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_multibytecodec.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_jp.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_jp.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_kr.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_kr.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_iso2022.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_iso2022.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/unicodedata.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/unicodedata.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_cn.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_cn.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_tw.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_tw.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_bz2.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_bz2.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_hk.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_hk.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/termios.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/termios.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/grp.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/grp.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_datetime.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_datetime.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_lzma.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_lzma.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_json.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_json.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/resource.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/resource.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('libz.so.1', '/usr/lib64/libz.so.1', 'BINARY'),
('libexpat.so.1', '/usr/lib64/libexpat.so.1', 'BINARY'),
('libssl.so.1.1', '/usr/lib64/libssl.so.1.1', 'BINARY'),
('libcrypto.so.1.1', '/usr/lib64/libcrypto.so.1.1', 'BINARY'),
('libffi.so.7', '/usr/lib64/libffi.so.7', 'BINARY'),
('libbz2.so.1', '/usr/lib64/libbz2.so.1', 'BINARY'),
('liblzma.so.5', '/usr/lib64/liblzma.so.5', 'BINARY'),
('base_library.zip',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/base_library.zip',
'DATA')],
[],
False,
False,
1772783957,
[('run',
'/usr/local/lib/python3.7/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run',
'EXECUTABLE')])
('/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/dpt_analyzer.pkg',
{'BINARY': True,
'DATA': True,
'EXECUTABLE': True,
'EXTENSION': True,
'PYMODULE': True,
'PYSOURCE': True,
'PYZ': False,
'SPLASH': True},
[('PYZ-00.pyz',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/PYZ-00.pyz',
'PYZ'),
('lib-dynload/_struct.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_struct.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/zlib.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/zlib.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('struct',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/localpycs/struct.pyc',
'PYMODULE'),
('pyimod01_archive',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/localpycs/pyimod01_archive.pyc',
'PYMODULE'),
('pyimod02_importers',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/localpycs/pyimod02_importers.pyc',
'PYMODULE'),
('pyimod03_ctypes',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/localpycs/pyimod03_ctypes.pyc',
'PYMODULE'),
('pyiboot01_bootstrap',
'/usr/local/lib/python3.7/site-packages/PyInstaller/loader/pyiboot01_bootstrap.py',
'PYSOURCE'),
('pyi_rth_pkgutil',
'/usr/local/lib/python3.7/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py',
'PYSOURCE'),
('pyi_rth_inspect',
'/usr/local/lib/python3.7/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py',
'PYSOURCE'),
('pyi_rth_multiprocessing',
'/usr/local/lib/python3.7/site-packages/PyInstaller/hooks/rthooks/pyi_rth_multiprocessing.py',
'PYSOURCE'),
('dcu_performance_analyzer',
'/data1/csy/project/small_model/dcuprofiletools/tools/dcu_performance_analyzer.py',
'PYSOURCE'),
('libpython3.7m.so.1.0', '/usr/lib64/libpython3.7m.so.1.0', 'BINARY'),
('lib-dynload/select.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/select.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/math.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/math.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/pyexpat.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/pyexpat.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_ssl.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_ssl.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/binascii.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/binascii.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_random.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_random.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_bisect.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_bisect.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_hashlib.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_hashlib.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_sha3.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_sha3.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_blake2.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_blake2.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_sha512.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_sha512.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_sha256.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_sha256.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_md5.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_md5.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_sha1.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_sha1.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_contextvars.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_contextvars.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_decimal.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_decimal.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_multiprocessing.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_multiprocessing.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_socket.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_socket.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_posixsubprocess.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_posixsubprocess.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/mmap.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/mmap.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_ctypes.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_ctypes.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/array.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/array.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_queue.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_queue.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_pickle.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_pickle.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_opcode.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_opcode.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_heapq.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_heapq.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_multibytecodec.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_multibytecodec.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_jp.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_jp.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_kr.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_kr.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_iso2022.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_iso2022.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/unicodedata.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/unicodedata.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_cn.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_cn.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_tw.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_tw.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_bz2.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_bz2.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_codecs_hk.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_codecs_hk.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/termios.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/termios.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/grp.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/grp.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_datetime.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_datetime.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_lzma.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_lzma.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/_json.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/_json.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('lib-dynload/resource.cpython-37m-x86_64-linux-gnu.so',
'/usr/lib64/python3.7/lib-dynload/resource.cpython-37m-x86_64-linux-gnu.so',
'EXTENSION'),
('libz.so.1', '/usr/lib64/libz.so.1', 'BINARY'),
('libexpat.so.1', '/usr/lib64/libexpat.so.1', 'BINARY'),
('libssl.so.1.1', '/usr/lib64/libssl.so.1.1', 'BINARY'),
('libcrypto.so.1.1', '/usr/lib64/libcrypto.so.1.1', 'BINARY'),
('libffi.so.7', '/usr/lib64/libffi.so.7', 'BINARY'),
('libbz2.so.1', '/usr/lib64/libbz2.so.1', 'BINARY'),
('liblzma.so.5', '/usr/lib64/liblzma.so.5', 'BINARY'),
('base_library.zip',
'/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/base_library.zip',
'DATA')],
False,
False,
False,
[],
None,
None,
None)
('/data1/csy/project/small_model/dcuprofiletools/tools/build/dpt_analyzer/PYZ-00.pyz',
[('_compat_pickle', '/usr/lib64/python3.7/_compat_pickle.py', 'PYMODULE'),
('_compression', '/usr/lib64/python3.7/_compression.py', 'PYMODULE'),
('_py_abc', '/usr/lib64/python3.7/_py_abc.py', 'PYMODULE'),
('_pydecimal', '/usr/lib64/python3.7/_pydecimal.py', 'PYMODULE'),
('_strptime', '/usr/lib64/python3.7/_strptime.py', 'PYMODULE'),
('_threading_local', '/usr/lib64/python3.7/_threading_local.py', 'PYMODULE'),
('argparse', '/usr/lib64/python3.7/argparse.py', 'PYMODULE'),
('ast', '/usr/lib64/python3.7/ast.py', 'PYMODULE'),
('base64', '/usr/lib64/python3.7/base64.py', 'PYMODULE'),
('bisect', '/usr/lib64/python3.7/bisect.py', 'PYMODULE'),
('bz2', '/usr/lib64/python3.7/bz2.py', 'PYMODULE'),
('calendar', '/usr/lib64/python3.7/calendar.py', 'PYMODULE'),
('concurrent', '/usr/lib64/python3.7/concurrent/__init__.py', 'PYMODULE'),
('concurrent.futures',
'/usr/lib64/python3.7/concurrent/futures/__init__.py',
'PYMODULE'),
('concurrent.futures._base',
'/usr/lib64/python3.7/concurrent/futures/_base.py',
'PYMODULE'),
('concurrent.futures.process',
'/usr/lib64/python3.7/concurrent/futures/process.py',
'PYMODULE'),
('concurrent.futures.thread',
'/usr/lib64/python3.7/concurrent/futures/thread.py',
'PYMODULE'),
('contextlib', '/usr/lib64/python3.7/contextlib.py', 'PYMODULE'),
('contextvars', '/usr/lib64/python3.7/contextvars.py', 'PYMODULE'),
('copy', '/usr/lib64/python3.7/copy.py', 'PYMODULE'),
('ctypes', '/usr/lib64/python3.7/ctypes/__init__.py', 'PYMODULE'),
('ctypes._endian', '/usr/lib64/python3.7/ctypes/_endian.py', 'PYMODULE'),
('dataclasses', '/usr/lib64/python3.7/dataclasses.py', 'PYMODULE'),
('datetime', '/usr/lib64/python3.7/datetime.py', 'PYMODULE'),
('decimal', '/usr/lib64/python3.7/decimal.py', 'PYMODULE'),
('dis', '/usr/lib64/python3.7/dis.py', 'PYMODULE'),
('email', '/usr/lib64/python3.7/email/__init__.py', 'PYMODULE'),
('email._encoded_words',
'/usr/lib64/python3.7/email/_encoded_words.py',
'PYMODULE'),
('email._header_value_parser',
'/usr/lib64/python3.7/email/_header_value_parser.py',
'PYMODULE'),
('email._parseaddr', '/usr/lib64/python3.7/email/_parseaddr.py', 'PYMODULE'),
('email._policybase',
'/usr/lib64/python3.7/email/_policybase.py',
'PYMODULE'),
('email.base64mime', '/usr/lib64/python3.7/email/base64mime.py', 'PYMODULE'),
('email.charset', '/usr/lib64/python3.7/email/charset.py', 'PYMODULE'),
('email.contentmanager',
'/usr/lib64/python3.7/email/contentmanager.py',
'PYMODULE'),
('email.encoders', '/usr/lib64/python3.7/email/encoders.py', 'PYMODULE'),
('email.errors', '/usr/lib64/python3.7/email/errors.py', 'PYMODULE'),
('email.feedparser', '/usr/lib64/python3.7/email/feedparser.py', 'PYMODULE'),
('email.generator', '/usr/lib64/python3.7/email/generator.py', 'PYMODULE'),
('email.header', '/usr/lib64/python3.7/email/header.py', 'PYMODULE'),
('email.headerregistry',
'/usr/lib64/python3.7/email/headerregistry.py',
'PYMODULE'),
('email.iterators', '/usr/lib64/python3.7/email/iterators.py', 'PYMODULE'),
('email.message', '/usr/lib64/python3.7/email/message.py', 'PYMODULE'),
('email.parser', '/usr/lib64/python3.7/email/parser.py', 'PYMODULE'),
('email.policy', '/usr/lib64/python3.7/email/policy.py', 'PYMODULE'),
('email.quoprimime', '/usr/lib64/python3.7/email/quoprimime.py', 'PYMODULE'),
('email.utils', '/usr/lib64/python3.7/email/utils.py', 'PYMODULE'),
('ftplib', '/usr/lib64/python3.7/ftplib.py', 'PYMODULE'),
('getopt', '/usr/lib64/python3.7/getopt.py', 'PYMODULE'),
('getpass', '/usr/lib64/python3.7/getpass.py', 'PYMODULE'),
('gettext', '/usr/lib64/python3.7/gettext.py', 'PYMODULE'),
('gzip', '/usr/lib64/python3.7/gzip.py', 'PYMODULE'),
('hashlib', '/usr/lib64/python3.7/hashlib.py', 'PYMODULE'),
('hmac', '/usr/lib64/python3.7/hmac.py', 'PYMODULE'),
('http', '/usr/lib64/python3.7/http/__init__.py', 'PYMODULE'),
('http.client', '/usr/lib64/python3.7/http/client.py', 'PYMODULE'),
('http.cookiejar', '/usr/lib64/python3.7/http/cookiejar.py', 'PYMODULE'),
('importlib', '/usr/lib64/python3.7/importlib/__init__.py', 'PYMODULE'),
('importlib._bootstrap',
'/usr/lib64/python3.7/importlib/_bootstrap.py',
'PYMODULE'),
('importlib._bootstrap_external',
'/usr/lib64/python3.7/importlib/_bootstrap_external.py',
'PYMODULE'),
('importlib.abc', '/usr/lib64/python3.7/importlib/abc.py', 'PYMODULE'),
('importlib.machinery',
'/usr/lib64/python3.7/importlib/machinery.py',
'PYMODULE'),
('importlib.util', '/usr/lib64/python3.7/importlib/util.py', 'PYMODULE'),
('inspect', '/usr/lib64/python3.7/inspect.py', 'PYMODULE'),
('json', '/usr/lib64/python3.7/json/__init__.py', 'PYMODULE'),
('json.decoder', '/usr/lib64/python3.7/json/decoder.py', 'PYMODULE'),
('json.encoder', '/usr/lib64/python3.7/json/encoder.py', 'PYMODULE'),
('json.scanner', '/usr/lib64/python3.7/json/scanner.py', 'PYMODULE'),
('logging', '/usr/lib64/python3.7/logging/__init__.py', 'PYMODULE'),
('lzma', '/usr/lib64/python3.7/lzma.py', 'PYMODULE'),
('mimetypes', '/usr/lib64/python3.7/mimetypes.py', 'PYMODULE'),
('multiprocessing',
'/usr/lib64/python3.7/multiprocessing/__init__.py',
'PYMODULE'),
('multiprocessing.connection',
'/usr/lib64/python3.7/multiprocessing/connection.py',
'PYMODULE'),
('multiprocessing.context',
'/usr/lib64/python3.7/multiprocessing/context.py',
'PYMODULE'),
('multiprocessing.dummy',
'/usr/lib64/python3.7/multiprocessing/dummy/__init__.py',
'PYMODULE'),
('multiprocessing.dummy.connection',
'/usr/lib64/python3.7/multiprocessing/dummy/connection.py',
'PYMODULE'),
('multiprocessing.forkserver',
'/usr/lib64/python3.7/multiprocessing/forkserver.py',
'PYMODULE'),
('multiprocessing.heap',
'/usr/lib64/python3.7/multiprocessing/heap.py',
'PYMODULE'),
('multiprocessing.managers',
'/usr/lib64/python3.7/multiprocessing/managers.py',
'PYMODULE'),
('multiprocessing.pool',
'/usr/lib64/python3.7/multiprocessing/pool.py',
'PYMODULE'),
('multiprocessing.popen_fork',
'/usr/lib64/python3.7/multiprocessing/popen_fork.py',
'PYMODULE'),
('multiprocessing.popen_forkserver',
'/usr/lib64/python3.7/multiprocessing/popen_forkserver.py',
'PYMODULE'),
('multiprocessing.popen_spawn_posix',
'/usr/lib64/python3.7/multiprocessing/popen_spawn_posix.py',
'PYMODULE'),
('multiprocessing.popen_spawn_win32',
'/usr/lib64/python3.7/multiprocessing/popen_spawn_win32.py',
'PYMODULE'),
('multiprocessing.process',
'/usr/lib64/python3.7/multiprocessing/process.py',
'PYMODULE'),
('multiprocessing.queues',
'/usr/lib64/python3.7/multiprocessing/queues.py',
'PYMODULE'),
('multiprocessing.reduction',
'/usr/lib64/python3.7/multiprocessing/reduction.py',
'PYMODULE'),
('multiprocessing.resource_sharer',
'/usr/lib64/python3.7/multiprocessing/resource_sharer.py',
'PYMODULE'),
('multiprocessing.semaphore_tracker',
'/usr/lib64/python3.7/multiprocessing/semaphore_tracker.py',
'PYMODULE'),
('multiprocessing.sharedctypes',
'/usr/lib64/python3.7/multiprocessing/sharedctypes.py',
'PYMODULE'),
('multiprocessing.spawn',
'/usr/lib64/python3.7/multiprocessing/spawn.py',
'PYMODULE'),
('multiprocessing.synchronize',
'/usr/lib64/python3.7/multiprocessing/synchronize.py',
'PYMODULE'),
('multiprocessing.util',
'/usr/lib64/python3.7/multiprocessing/util.py',
'PYMODULE'),
('netrc', '/usr/lib64/python3.7/netrc.py', 'PYMODULE'),
('nturl2path', '/usr/lib64/python3.7/nturl2path.py', 'PYMODULE'),
('numbers', '/usr/lib64/python3.7/numbers.py', 'PYMODULE'),
('opcode', '/usr/lib64/python3.7/opcode.py', 'PYMODULE'),
('optparse', '/usr/lib64/python3.7/optparse.py', 'PYMODULE'),
('pickle', '/usr/lib64/python3.7/pickle.py', 'PYMODULE'),
('pkgutil', '/usr/lib64/python3.7/pkgutil.py', 'PYMODULE'),
('platform', '/usr/lib64/python3.7/platform.py', 'PYMODULE'),
('pprint', '/usr/lib64/python3.7/pprint.py', 'PYMODULE'),
('py_compile', '/usr/lib64/python3.7/py_compile.py', 'PYMODULE'),
('queue', '/usr/lib64/python3.7/queue.py', 'PYMODULE'),
('quopri', '/usr/lib64/python3.7/quopri.py', 'PYMODULE'),
('random', '/usr/lib64/python3.7/random.py', 'PYMODULE'),
('runpy', '/usr/lib64/python3.7/runpy.py', 'PYMODULE'),
('selectors', '/usr/lib64/python3.7/selectors.py', 'PYMODULE'),
('shlex', '/usr/lib64/python3.7/shlex.py', 'PYMODULE'),
('shutil', '/usr/lib64/python3.7/shutil.py', 'PYMODULE'),
('signal', '/usr/lib64/python3.7/signal.py', 'PYMODULE'),
('socket', '/usr/lib64/python3.7/socket.py', 'PYMODULE'),
('ssl', '/usr/lib64/python3.7/ssl.py', 'PYMODULE'),
('string', '/usr/lib64/python3.7/string.py', 'PYMODULE'),
('stringprep', '/usr/lib64/python3.7/stringprep.py', 'PYMODULE'),
('subprocess', '/usr/lib64/python3.7/subprocess.py', 'PYMODULE'),
('tarfile', '/usr/lib64/python3.7/tarfile.py', 'PYMODULE'),
('tempfile', '/usr/lib64/python3.7/tempfile.py', 'PYMODULE'),
('textwrap', '/usr/lib64/python3.7/textwrap.py', 'PYMODULE'),
('threading', '/usr/lib64/python3.7/threading.py', 'PYMODULE'),
('tracemalloc', '/usr/lib64/python3.7/tracemalloc.py', 'PYMODULE'),
('typing', '/usr/lib64/python3.7/typing.py', 'PYMODULE'),
('uu', '/usr/lib64/python3.7/uu.py', 'PYMODULE'),
('xml', '/usr/lib64/python3.7/xml/__init__.py', 'PYMODULE'),
('xml.parsers', '/usr/lib64/python3.7/xml/parsers/__init__.py', 'PYMODULE'),
('xml.parsers.expat',
'/usr/lib64/python3.7/xml/parsers/expat.py',
'PYMODULE'),
('xml.sax', '/usr/lib64/python3.7/xml/sax/__init__.py', 'PYMODULE'),
('xml.sax._exceptions',
'/usr/lib64/python3.7/xml/sax/_exceptions.py',
'PYMODULE'),
('xml.sax.expatreader',
'/usr/lib64/python3.7/xml/sax/expatreader.py',
'PYMODULE'),
('xml.sax.handler', '/usr/lib64/python3.7/xml/sax/handler.py', 'PYMODULE'),
('xml.sax.saxutils', '/usr/lib64/python3.7/xml/sax/saxutils.py', 'PYMODULE'),
('xml.sax.xmlreader',
'/usr/lib64/python3.7/xml/sax/xmlreader.py',
'PYMODULE'),
('xmlrpc', '/usr/lib64/python3.7/xmlrpc/__init__.py', 'PYMODULE'),
('xmlrpc.client', '/usr/lib64/python3.7/xmlrpc/client.py', 'PYMODULE'),
('zipfile', '/usr/lib64/python3.7/zipfile.py', 'PYMODULE')])
This file lists modules PyInstaller was not able to find. This does not
necessarily mean this module is required for running your program. Python and
Python 3rd-party packages include a lot of conditional or optional modules. For
example the module 'ntpath' only exists on Windows, whereas the module
'posixpath' only exists on Posix systems.
Types if import:
* top-level: imported at the top-level - look at these first
* conditional: imported within an if-statement
* delayed: imported within a function
* optional: imported within a try-except-statement
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
tracking down the missing module yourself. Thanks!
missing module named 'org.python' - imported by copy (optional), xml.sax (delayed, conditional)
missing module named 'java.lang' - imported by platform (delayed, optional), xml.sax._exceptions (conditional)
missing module named _winapi - imported by encodings (delayed, conditional, optional), subprocess (conditional), multiprocessing.connection (optional), multiprocessing.reduction (conditional), multiprocessing.heap (conditional), multiprocessing.popen_spawn_win32 (top-level)
missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level)
missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
missing module named org - imported by pickle (optional)
missing module named msvcrt - imported by subprocess (conditional), getpass (optional), multiprocessing.spawn (delayed, conditional), multiprocessing.popen_spawn_win32 (top-level)
missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional)
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional)
missing module named pyimod02_importers - imported by /usr/local/lib/python3.7/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py (delayed)
missing module named nt - imported by os (conditional, optional), ntpath (conditional, optional), pathlib (conditional), shutil (conditional)
missing module named winreg - imported by mimetypes (optional), urllib.request (delayed, conditional, optional), platform (delayed, optional)
missing module named _scproxy - imported by urllib.request (conditional)
missing module named vms_lib - imported by platform (delayed, conditional, optional)
missing module named java - imported by platform (delayed)
missing module named _winreg - imported by platform (delayed, optional)
This source diff could not be displayed because it is too large. You can view the blob instead.
#!/usr/bin/env python3
"""
DCU Performance Analyzer Tool
A comprehensive performance analysis tool for DCU environment checking and monitoring.
"""
import os
import sys
import json
import time
import logging
import argparse
import subprocess
import platform
import tarfile
import shutil
import re
from datetime import datetime
from pathlib import Path
from typing import Dict, List, Optional, Tuple
from dataclasses import dataclass
from concurrent.futures import ThreadPoolExecutor, as_completed
from collections import defaultdict
__version__ = "1.0.0"
__author__ = "DCU Performance Team"
def analyze_region_line(region_line: str):
match = re.search(r"Memory at (\S+)", region_line)
if not match:
return "ERROR", "无法解析BAR地址", False
address = match.group(1)
if address == "unassigned":
return "FAIL", "BAR未分配,可能MMIO不足", True
if address == "<ignored>":
return "FAIL", "BAR被忽略,需开启Above 4G或pcie=realloc", True
try:
addr_int = int(address, 16)
if addr_int > 0xFFFFFFFFFFF:
return "WARNING", "BAR超过44bit", False
except:
pass
return "PASS", "正常", False
def get_cpu_numa_topology():
topology = {}
try:
for node in os.listdir("/sys/devices/system/node/"):
if node.startswith("node"):
node_id = int(node.replace("node", ""))
cpulist_path = f"/sys/devices/system/node/{node}/cpulist"
if os.path.exists(cpulist_path):
cpulist = open(cpulist_path).read().strip()
topology[node_id] = cpulist
except:
pass
return topology
@dataclass
class CheckResult:
"""检查结果数据结构"""
module: str
status: str # 'PASS', 'FAIL', 'WARNING', 'INFO'
message: str
details: Dict
timestamp: str
execution_time: float
class DCUPerformanceAnalyzer:
"""DCU性能分析工具主类"""
def __init__(self, output_dir: str = None, debug: bool = False, quiet: bool = True):
self.start_time = datetime.now()
self.output_dir = output_dir or f"dcu_analysis_{self.start_time.strftime('%Y%m%d_%H%M%S')}"
self.debug = debug
self.quiet = quiet
self.results: List[CheckResult] = []
os.makedirs(self.output_dir, exist_ok=True)
os.makedirs(f"{self.output_dir}/logs", exist_ok=True)
os.makedirs(f"{self.output_dir}/reports", exist_ok=True)
os.makedirs(f"{self.output_dir}/data", exist_ok=True)
self.logger = self._setup_logging()
# self.scripts_path = Path("/data1/csy/project/small_model/dcuprofiletools/env_check/dcu_env_check-main")
def _setup_logging(self) -> logging.Logger:
logger = logging.getLogger('DCUAnalyzer')
logger.setLevel(logging.DEBUG if self.debug else logging.INFO)
log_dir = f'{self.output_dir}/logs'
os.makedirs(log_dir, exist_ok=True)
fh = logging.FileHandler(f'{log_dir}/analysis.log')
fh.setLevel(logging.DEBUG)
if self.quiet:
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
logger.addHandler(ch)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
def run_command(self, cmd: str, timeout: int = 300, cwd: Optional[str] = None) -> Tuple[int, str, str]:
effective_cwd = cwd
self.logger.debug(f"执行命令: {cmd} in {effective_cwd}")
try:
result = subprocess.run(cmd, shell=True, capture_output=True, text=True, timeout=timeout, cwd=effective_cwd)
return result.returncode, result.stdout, result.stderr
except subprocess.TimeoutExpired:
self.logger.error(f"命令超时: {cmd}")
return -1, "", "Command timeout"
except Exception as e:
self.logger.error(f"命令执行失败: {cmd}, 错误: {str(e)}")
return -1, "", str(e)
def check_system_info(self) -> CheckResult:
start_time = time.time()
self.logger.info("开始系统信息检查...")
try:
commands = {
"cpu_info.txt": "lscpu",
"mem_info.txt": "free -h && echo '\n' && dmidecode -t memory",
"network.txt": "ip a && echo '\n' && lspci -nn | grep -i -E \"eth|mellanox\"",
"os_info.txt": [
"cat /etc/os-release", "uname -a", "cat /proc/cmdline",
"numactl -H", "rpm -qf $(which ldd)", "ldd --version",
"strings $(find /usr/ -name libc.so.6) | grep ^GLIBC_",
"strings $(find /usr -name libstdc++.so.6) | grep GLIBCXX"
],
}
details = {}
for filename, command in commands.items():
full_path = f"{self.output_dir}/data/{filename}"
if isinstance(command, list):
with open(full_path, "w") as f:
for cmd_item in command:
ret_code, stdout, stderr = self.run_command(cmd_item)
f.write(f"### {cmd_item} ###\n")
f.write(stdout if ret_code == 0 else f"ERROR: {stderr}")
f.write("\n\n")
else:
ret_code, stdout, stderr = self.run_command(command)
with open(full_path, "w") as f:
f.write(stdout if ret_code == 0 else f"ERROR: {stderr}")
details[filename] = "saved"
return CheckResult("System Information", "PASS", "系统信息收集完成", details, datetime.now().isoformat(), time.time() - start_time)
except Exception as e:
return CheckResult("System Information", "FAIL", f"系统信息收集失败: {str(e)}", {"error": str(e)}, datetime.now().isoformat(), time.time() - start_time)
def check_pcie_devices(self) -> CheckResult:
start_time = time.time()
self.logger.info("开始PCIe设备检查...")
log_dir = f"{self.output_dir}/data/pcie_info"
os.makedirs(log_dir, exist_ok=True)
summary_log = f"{self.output_dir}/data/pcie_dcu.log"
os.makedirs(f"{self.output_dir}/data", exist_ok=True)
details = {
"total_dcu": 0,
"models": {},
"devices": {},
"bar_errors": 0,
"mmio_issue_count": 0,
"link_downgrade": 0,
"cross_numa_count": 0,
"pcie_topology": ""
}
dcu_id_map = {
"54b7": ["Z100"],
"55b7": ["Z100L"],
"62b7": ["K100"],
"6210": ["K100-AI"],
"6211": ["K100-AI-ECO"],
"6320": ["BW1000"]
}
ret, lspci_full, _ = self.run_command("lspci -D -nn")
with open(f"{log_dir}/pcie_info.log", "w") as f:
f.write(lspci_full)
ret, lspci_tree, _ = self.run_command("lspci -t")
details["pcie_topology"] = lspci_tree
with open(f"{log_dir}/pcie_vt.log", "w") as f:
f.write(lspci_tree)
ret, lspci_all_verbose, _ = self.run_command("lspci -vvv")
with open(f"{log_dir}/pcie_more.log", "w") as f:
f.write(lspci_all_verbose)
cpu_topology = get_cpu_numa_topology()
try:
with open(summary_log, "w", encoding="utf-8") as logf:
logf.write("===== PCIe 拓扑 =====\n")
logf.write(lspci_tree + "\n")
for line in lspci_full.splitlines():
if not re.search(r"display|co-processor", line, re.IGNORECASE):
continue
match = re.search(r"\[(\w+):(\w+)\]", line)
if not match:
continue
device_id = match.group(2).lower()
if device_id not in dcu_id_map:
continue
bdf = line.split()[0]
model_name = ",".join(dcu_id_map[device_id])
details["total_dcu"] += 1
details["models"].setdefault(model_name, 0)
details["models"][model_name] += 1
# 获取单设备verbose
ret, verbose, _ = self.run_command(f"lspci -vv -s {bdf}")
# 单设备日志单独保存
with open(f"{log_dir}/lspci_{bdf.replace(':','_').replace('.','_')}.log", "w") as f:
f.write(verbose)
# 链路
cur_speed = re.search(r"LnkSta:.*Speed (\S+)", verbose)
cur_width = re.search(r"LnkSta:.*Width x(\d+)", verbose)
max_speed = re.search(r"LnkCap:.*Speed (\S+)", verbose)
max_width = re.search(r"LnkCap:.*Width x(\d+)", verbose)
downgrade = False
if cur_speed and max_speed and cur_speed.group(1) != max_speed.group(1):
downgrade = True
if cur_width and max_width and cur_width.group(1) != max_width.group(1):
downgrade = True
if downgrade:
details["link_downgrade"] += 1
# BAR
bar_regions = re.findall(r"Region \d+:.*", verbose)
bar_analysis = []
for region in bar_regions:
status, msg, mmio_issue = analyze_region_line(region)
if status == "FAIL":
details["bar_errors"] += 1
if mmio_issue:
details["mmio_issue_count"] += 1
bar_analysis.append({
"region": region.strip(),
"status": status,
"message": msg
})
# NUMA
numa_path = f"/sys/bus/pci/devices/{bdf}/numa_node"
numa_node = "unknown"
if os.path.exists(numa_path):
numa_node = open(numa_path).read().strip()
cross_numa = False
if numa_node != "unknown":
node_id = int(numa_node)
if node_id not in cpu_topology:
cross_numa = True
details["cross_numa_count"] += 1
device_info = {
"device_id": device_id,
"model": model_name,
"numa_node": numa_node,
"cross_numa": cross_numa,
"downgrade": downgrade,
"bar_regions": bar_analysis
}
details["devices"][bdf] = device_info
logf.write("\n" + "=" * 60 + "\n")
logf.write(f"DCU设备: {bdf}\n")
for k, v in device_info.items():
logf.write(f"{k}: {v}\n")
# 最终判定
status = "PASS"
if details["mmio_issue_count"] > 0:
status = "FAIL"
elif details["bar_errors"] > 0:
status = "FAIL"
elif details["cross_numa_count"] > 0:
status = "WARNING"
elif details["link_downgrade"] > 0:
status = "WARNING"
return CheckResult(
module="PCIe Devices",
status=status,
message=f"检测到 {details['total_dcu']} 张 DCU",
details=details,
timestamp=datetime.now().isoformat(),
execution_time=time.time() - start_time
)
except Exception as e:
return CheckResult(
module="PCIe Devices",
status="FAIL",
message=str(e),
details={"error": str(e)},
timestamp=datetime.now().isoformat(),
execution_time=time.time() - start_time
)
def check_driver_status(self) -> CheckResult:
log_dir = f"{self.output_dir}/data/"
os.makedirs(log_dir, exist_ok=True)
start_time = time.time()
self.logger.info("开始驱动状态检查...")
details = {
"driver_loaded": False,
"hydcu_driver_loaded": False,
"iommu_status": "",
"vfio_attached": False,
"missing_kos": [],
"driver_info": {}
}
messages = []
ret_code, stdout, stderr = self.run_command("lsmod | grep hycu")
if ret_code == 0 and stdout.strip():
details["hydcu_driver_loaded"] = True
details["driver_loaded"] = True
messages.append("hydcu 驱动已成功加载")
messages.append(f"lsmod 输出: {stdout.strip()}")
else:
messages.append("hydcu 驱动未加载")
if details["driver_loaded"]:
ret_code, stdout, stderr = self.run_command("/opt/hyhal/bin/hy-smi -a")
with open(f"{log_dir}/hy_smi_info.txt", "w") as f:
f.write(stdout)
if ret_code == 0 and stdout.strip():
driver_match = re.search(r"Driver Version:\s*([^\s]+)", stdout)
vbios_matches = re.findall(r"VBIOS version:\s*([^\s]+)", stdout)
driver_version = driver_match.group(1) if driver_match else "Not Found"
details["driver_info"]["version"] = driver_version
details["driver_info"]["vbios"] = vbios_matches
messages.append("成功获取 hydcu 驱动信息")
else:
messages.append("无法获取 hydcu 驱动信息")
if stderr:
messages.append(f"错误: {stderr}")
ret_code, stdout, stderr = self.run_command("lsmod | grep iommu_v2")
if ret_code == 0 and stdout.strip():
details["iommu_status"] = "iommu_v2_loaded"
messages.append("IOMMU v2 驱动已加载")
else:
ret_code, stdout, stderr = self.run_command("lsmod | grep amd_iommu_v2")
if ret_code == 0 and stdout.strip():
details["iommu_status"] = "amd_iommu_v2_loaded"
messages.append("AMD IOMMU v2 驱动已加载")
else:
# 检查驱动是否存在但未加载
ret_code, stdout, stderr = self.run_command("modinfo iommu_v2")
if ret_code == 0 and stdout.strip():
details["iommu_status"] = "iommu_v2_present_not_loaded"
messages.append("IOMMU v2 驱动存在但未加载")
else:
ret_code, stdout, stderr = self.run_command("modinfo amd_iommu_v2")
if ret_code == 0 and stdout.strip():
details["iommu_status"] = "amd_iommu_v2_present_not_loaded"
messages.append("AMD IOMMU v2 驱动存在但未加载")
else:
details["iommu_status"] = "no_iommu_driver"
messages.append("系统中未找到 IOMMU 驱动")
ret_code, stdout, stderr = self.run_command("lsmod | grep vfio_pci")
if ret_code == 0 and stdout.strip():
details["vfio_attached"] = True
messages.append("检测到 VFIO-PCI 驱动,某些设备可能已附加到虚拟机")
else:
ret_code, stdout, stderr = self.run_command("lsmod | grep vfio-pci")
if ret_code == 0 and stdout.strip():
details["vfio_attached"] = True
messages.append("检测到 VFIO-PCI 驱动,某些设备可能已附加到虚拟机")
ko_list = [
"hycu.ko",
"hycu-sched.ko",
"hydrm_ttm_helper.ko",
"hy-extra.ko",
"hykcl.ko",
"hyttm.ko"
]
ko_dir = "/opt/hyhal/dkms"
for ko in ko_list:
ko_path = os.path.join(ko_dir, ko)
if not os.path.isfile(ko_path):
details["missing_kos"].append(ko)
messages.append(f"缺失驱动文件: {ko}")
elif not os.access(ko_path, os.R_OK):
details["missing_kos"].append(ko)
messages.append(f"驱动文件无读取权限: {ko}")
status = "PASS"
if details["missing_kos"]:
status = "FAIL"
elif not details["driver_loaded"]:
status = "FAIL"
elif details["iommu_status"] in ["no_iommu_driver", "iommu_v2_present_not_loaded", "amd_iommu_v2_present_not_loaded"]:
status = "WARNING"
elif details["vfio_attached"]:
status = "WARNING"
return CheckResult(
module="Driver Status",
status=status,
message="驱动检查完成",
details={
"summary": "\n".join(messages),
**details
},
timestamp=datetime.now().isoformat(),
execution_time=time.time() - start_time
)
def check_system_logs(self, log_age_hours: int = 24, log_size_limit_mb: int = 10) -> CheckResult:
start_time = time.time()
self.logger.info("开始系统日志检查...")
try:
details = {}
ret_code, dmesg_output, _ = self.run_command("dmesg -T")
if ret_code == 0:
with open(f"{self.output_dir}/data/dmesg.log", "w") as f: f.write(dmesg_output)
details["dmesg.log"] = "saved"
syslog_path = "/var/log/syslog" if os.path.exists("/var/log/syslog") else "/var/log/messages" if os.path.exists("/var/log/messages") else None
dest_path = f"{self.output_dir}/data/system.log"
if syslog_path:
try:
if os.path.getsize(syslog_path) / (1024*1024) > log_size_limit_mb:
with open(dest_path, "w") as f: f.write("[日志文件超过大小限制未采集]")
details["system.log"] = "skipped_too_large"
else:
shutil.copy(syslog_path, dest_path)
details["system.log"] = "copied"
except Exception as e:
with open(dest_path, "w") as f: f.write(f"无权限读取日志: {e}")
details["system.log"] = "permission_denied"
else:
ret_code, journal_logs, _ = self.run_command(f"journalctl --since '{log_age_hours} hours ago'")
with open(dest_path, "w") as f: f.write(journal_logs if ret_code == 0 else "无法获取系统日志")
details["system.log"] = "journal_saved" if ret_code == 0 else "journal_failed"
ret_code, sme_log, _ = self.run_command(f"grep -i sme {self.output_dir}/data/dmesg.log")
# with open(f"{self.output_dir}/data/sme.log", "w") as f: f.write(sme_log)
details["sme_status"] = "非CSV场景,需要BIOS关闭SME设置" if sme_log.strip() else "OS SME目前没有打开, 非CSV场景下,该状态正常"
return CheckResult("System Logs", "PASS", "系统日志收集完成", details, datetime.now().isoformat(), time.time() - start_time)
except Exception as e:
return CheckResult("System Logs", "FAIL", f"系统日志检查失败: {str(e)}", {"error": str(e)}, datetime.now().isoformat(), time.time() - start_time)
def check_hardware_info(self) -> CheckResult:
start_time = time.time()
self.logger.info("开始硬件信息检查...")
try:
commands = {"hardware.txt": ["ipmitool fru", "ipmitool mc info", "dmidecode -s system-product-name", "dmidecode -t bios"]}
details = {}
for filename, command_list in commands.items():
full_path = f"{self.output_dir}/data/{filename}"
with open(full_path, "w") as f:
for cmd_item in command_list:
ret_code, stdout, stderr = self.run_command(cmd_item)
f.write(f"### {cmd_item} ###\n")
f.write(stdout if ret_code == 0 else f"ERROR: {stderr}")
f.write("\n\n")
details[filename] = "saved"
ret_code, serial_num, _ = self.run_command("dmidecode -t 2 | grep -i 'Serial Number' | awk '{print $3}'")
if ret_code == 0 and serial_num.strip():
details["serial_number"] = serial_num.strip()
if "AS" in serial_num.strip(): details["board_warning"] = "检测到主板型号过旧,满负载情况可能出现掉卡"
elif "BH" in serial_num.strip(): details["board_status"] = "主板型号符合要求"
return CheckResult("Hardware Information", "PASS", "硬件信息收集完成", details, datetime.now().isoformat(), time.time() - start_time)
except Exception as e:
return CheckResult("Hardware Information", "FAIL", f"硬件信息检查失败: {str(e)}", {"error": str(e)}, datetime.now().isoformat(), time.time() - start_time)
def check_pkg_status(self, auto_install: bool = False) -> CheckResult:
start_time = time.time()
self.logger.info("开始软件包状态检查...")
details = {
"missing_packages": [],
"installed_packages": [],
"package_manager": None,
"auto_install_attempted": auto_install,
"auto_install_success": False
}
messages = []
# 检测系统类型和包管理器
if os.path.exists("/etc/debian_version"):
details["package_manager"] = "apt"
pkgs_info = {
"dmidecode": "dmidecode",
"lshw": "lshw",
"lspci": "pciutils",
"numactl": "numactl-devel",
"ipmitool": "ipmitool",
"locate": "locate"
}
elif os.path.exists("/etc/redhat-release") or os.path.exists("/etc/centos-release"):
details["package_manager"] = "yum"
pkgs_info = {
"dmidecode": "dmidecode",
"lshw": "lshw",
"lspci": "pciutils",
"numactl": "numactl-dev",
"ipmitool": "ipmitool",
"locate": "mlocate"
}
else:
details["package_manager"] = "unknown"
pkgs_info = {
"dmidecode": "dmidecode",
"lshw": "lshw",
"lspci": "pciutils",
"numactl": "numactl-devel",
"ipmitool": "ipmitool",
"locate": "locate"
}
# 检查每个命令是否可用
commands_to_check = ["dmidecode", "lshw", "lspci", "numactl", "ipmitool", "locate"]
for cmd in commands_to_check:
ret_code, stdout, stderr = self.run_command(f"command -v {cmd}")
if ret_code == 0 and stdout.strip():
details["installed_packages"].append(cmd)
messages.append(f"✓ {cmd} 已安装")
else:
details["missing_packages"].append(cmd)
pkg_name = pkgs_info.get(cmd, cmd)
messages.append(f"✗ {cmd} 未安装 (包名: {pkg_name})")
# 状态判定
status = "PASS" if not details["missing_packages"] else "WARNING"
# 如果需要自动安装且缺失包存在
if auto_install and details["missing_packages"] and details["package_manager"] in ["apt", "yum"]:
messages.append("尝试自动安装缺失的软件包...")
if details["package_manager"] == "apt":
install_cmd = f"sudo apt-get update && sudo apt-get install -y {' '.join([pkgs_info[pkg] for pkg in details['missing_packages']])}"
else: # yum
install_cmd = f"sudo yum install -y {' '.join([pkgs_info[pkg] for pkg in details['missing_packages']])}"
ret_code, stdout, stderr = self.run_command(install_cmd)
if ret_code == 0:
details["auto_install_success"] = True
messages.append("自动安装成功")
# 重新检查
still_missing = []
for cmd in details["missing_packages"]:
ret_code, stdout, stderr = self.run_command(f"command -v {cmd}")
if ret_code != 0:
still_missing.append(cmd)
if not still_missing:
status = "PASS"
messages.append("所有软件包安装完成")
else:
messages.append(f"仍有软件包安装失败: {', '.join(still_missing)}")
else:
messages.append(f"自动安装失败: {stderr}")
return CheckResult(
module="Package Status",
status=status,
message="软件包检查完成",
details={
"summary": "\n".join(messages),
**details
},
timestamp=datetime.now().isoformat(),
execution_time=time.time() - start_time
)
# def check_rccl_info(self) -> CheckResult:
# start_time = time.time()
# self.logger.info("开始RCCL信息检查...")
# log_dir = f"{self.output_dir}/data/"
# os.makedirs(log_dir, exist_ok=True)
def run_all_checks(self, log_age: int = 24, log_size: int = 10, auto_install_pkg: bool = False) -> List[CheckResult]:
self.logger.info("开始执行所有检查模块...")
checks = [
self.check_system_info, self.check_pcie_devices, self.check_driver_status,
lambda: self.check_system_logs(log_age, log_size),
self.check_hardware_info,
lambda: self.check_pkg_status(auto_install_pkg)
]
with ThreadPoolExecutor(max_workers=4) as executor:
futures = {executor.submit(check): check.__name__ for check in checks}
for future in as_completed(futures):
check_name = futures[future]
try:
result = future.result()
self.results.append(result)
self.logger.info(f"{check_name} 完成 - 状态: {result.status}")
except Exception as e:
self.logger.error(f"{check_name} 执行失败: {str(e)}")
return self.results
def generate_report(self) -> str:
self.logger.info("生成分析报告...")
report_file = f"{self.output_dir}/reports/analysis_report.json"
summary_file = f"{self.output_dir}/reports/analysis_summary.txt"
status_counts = {"PASS": 0, "FAIL": 0, "WARNING": 0, "INFO": 0}
total_execution_time = sum(r.execution_time for r in self.results)
for result in self.results: status_counts[result.status] += 1
report = {
"metadata": {"tool_version": __version__, "analysis_date": self.start_time.isoformat(), "hostname": platform.node(), "total_execution_time": total_execution_time, "output_directory": self.output_dir},
"summary": {"total_checks": len(self.results), "status_distribution": status_counts, "overall_status": "PASS" if status_counts["FAIL"] == 0 else "FAIL"},
"results": [r.__dict__ for r in self.results]
}
with open(report_file, "w", encoding="utf-8") as f: json.dump(report, f, indent=2, ensure_ascii=False)
with open(summary_file, "w", encoding="utf-8") as f:
f.write(f'DCU性能分析报告摘要\n分析时间: {self.start_time.strftime("%Y-%m-%d %H:%M:%S")}\n')
f.write(f"整体状态: {report['summary']['overall_status']}\n")
for result in self.results:
f.write(f"\n模块: {result.module} - 状态: {result.status}\n消息: {result.message}\n")
self.logger.info(f"报告生成完成: {report_file}")
return report_file
def create_package(self) -> str:
self.logger.info("创建分析结果包...")
package_name = f"{self.output_dir}.tar.gz"
with tarfile.open(package_name, "w:gz") as tar: tar.add(self.output_dir, arcname=os.path.basename(self.output_dir))
self.logger.info(f"分析结果包创建完成: {package_name}")
return package_name
def run_analysis(self, checks: List[str] = None, log_age: int = 24, log_size: int = 10, auto_install_pkg: bool = False) -> str:
self.logger.info("开始DCU性能分析...")
try:
available_checks = {
"pkg": lambda: self.check_pkg_status(auto_install_pkg),
"system": self.check_system_info, "pcie": self.check_pcie_devices, "driver": self.check_driver_status,
"logs": lambda: self.check_system_logs(log_age, log_size), "hardware": self.check_hardware_info,
}
if checks:
for check_name in checks:
if check_name in available_checks: self.results.append(available_checks[check_name]())
else: self.run_all_checks(log_age, log_size, auto_install_pkg)
report_file = self.generate_report()
package_file = self.create_package()
self.logger.info(f"DCU性能分析完成! 报告: {report_file}, 包: {package_file}")
return package_file
except Exception as e:
self.logger.error(f"分析过程失败: {str(e)}", exc_info=self.debug)
raise
def create_cli():
parser = argparse.ArgumentParser(description="DCU Performance Analyzer", formatter_class=argparse.RawDescriptionHelpFormatter, epilog="示例:\n %(prog)s -o /tmp/analysis\n %(prog)s -c system pcie\n %(prog)s --auto-install-pkg # 自动安装缺失的软件包\n %(prog)s -c pkg --auto-install-pkg # 只检查并安装软件包")
parser.add_argument("-c", "--checks", nargs="+", choices=["system", "pcie", "driver", "logs", "hardware", "pkg"], help="指定要运行的检查模块")
parser.add_argument("-o", "--output", help="指定输出目录")
parser.add_argument("-t", "--log-age", type=int, default=24, help="收集日志的时间范围(小时) (默认: 24)")
parser.add_argument("-s", "--log-size", type=int, default=10, help="日志文件大小限制(MB) (默认: 10)")
parser.add_argument("--auto-install-pkg", action="store_true", help="自动安装缺失的软件包")
parser.add_argument("-d", "--debug", action="store_true", help="启用调试模式")
parser.add_argument("-q", "--quiet", action="store_true", help="静默模式")
parser.add_argument("-v", "--version", action="version", version=f"%(prog)s {__version__}")
return parser
def main():
parser = create_cli()
args = parser.parse_args()
try:
analyzer = DCUPerformanceAnalyzer(output_dir=args.output, debug=args.debug, quiet=args.quiet)
package_file = analyzer.run_analysis(checks=args.checks, log_age=args.log_age, log_size=args.log_size, auto_install_pkg=args.auto_install_pkg)
print(f"\n分析完成! 结果包: {package_file}")
if analyzer.results:
status_counts = {"PASS": 0, "FAIL": 0, "WARNING": 0, "INFO": 0}
for result in analyzer.results: status_counts[result.status] += 1
print("\n检查结果统计:")
for status, count in status_counts.items(): print(f" {status}: {count}")
return 0
except Exception as e:
print(f"错误: {str(e)}")
if args.debug: import traceback; traceback.print_exc()
return 1
if __name__ == "__main__":
sys.exit(main())
\ No newline at end of file
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['dcu_performance_analyzer.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='dpt_analyzer',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
# DCU 环境检查脚本
这是一个用于检查和诊断 DCU(数据中心处理单元)环境的脚本。它收集系统信息、日志和 DCU 特定的诊断数据,以帮助识别和解决与 DCU 相关的问题。
## 用法
要使用此脚本,请以 root 权限运行它:
```bash
sudo ./dcu_env_check.sh [选项]
```
脚本将生成一个 `.tar.gz` 文件,其中包含所有收集到的信息。您可以将此文件提供给支持人员以供进一步分析。
## 选项
- `-o DIR`: 指定输出目录(默认为自动生成的目录)。
- `-k KEYWORD`: 设置用于在日志中搜索的关键字(默认为 `hydcu`)。
- `-t HOURS`: 收集日志的时间范围(以小时为单位)(默认为 24)。
- `-s SIZE`: 日志文件的最大大小(以 MB 为单位)(默认为 10)。
- `-q`: 静默模式(仅输出错误)。
- `-d`: 调试模式。
- `-h`: 显示帮助信息。
## `hydcutune` 依赖
此脚本依赖于 `hydcutune` 工具来检查 PCIe 速度。在运行此脚本之前,请确保 `hydcutune` 可执行文件位于您的系统的 `PATH` 环境变量中。
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment