Skip to content

Latest commit

 

History

History
254 lines (201 loc) · 15 KB

File metadata and controls

254 lines (201 loc) · 15 KB

1、项目作品 基于 AI 的 Linux 系统参数智能调优平台 一套面向开源操作系统的系统参数自动优化平台,基于 AI 模型实现参数动态预测与应用,支持实时监控、可视化控制、一键优化、自动评估等核心功能。

2、项目目标 本项目旨在探索基于 AI 的 Linux 系统参数调优技术,构建一套能自动识别系统负载并智能推荐最优参数组合的系统级优化平台,从而提升系统执行效率与资源使用率。

3、功能特性 ✅ 实时监控 CPU/内存/I/O/网络 等系统运行指标 ✅ 自动识别当前 workload 类型(如 CPU/IO/Mem/Mixed) ✅ 基于 AI 模型预测最优参数组合,支持一键优化 ✅ 提供可视化控制面板,操作简便,调优过程透明 ✅ 自动对比调优前后性能,生成图表与评估日志 ✅ 支持自定义 sysctl 参数调节与模拟测试负载

4、快速启动

1)克隆项目代码 git clone https://github.com/xiaobo1025/OS_competiton.git cd OS_competition

2)安装环境依赖 如: pip install streamlit psutil scikit-learn matplotlib joblib

3)启动UI控制台 :~/**# PYTHONPATH=$(pwd) streamlit run ui/dashboard.py

5、目录结构说明

目录 说明
monitor/ 实时采集系统运行指标(CPU、内存、I/O、网络等)
sysparams/ 读取内核可调参数(vm、kernel、net)
controller/ 应用 AI 推荐的参数配置
data/ 构建模型训练样本,包含采集脚本与原始 CSV
optimizer/ AI 模型训练与推理,包括分类器与参数预测器
evaluation/ 调优前后性能评估工具
workloads/ 标准化测试负载生成器(CPU/IO/内存/混合)
ui/ 可视化控制面板(Streamlit)

1)📁 monitor/ 模块说明 该模块负责采集系统关键运行指标,是系统智能参数调优的输入基础。支持实时数据采集,并以结构化字典形式返回,便于后续记录、建模与优化。

--模块接口说明

模块名 方法/函数 功能描述
cpu.py get_cpu_info() 获取 CPU 利用率和 1/5/15 分钟负载平均值
gpu.py get_gpu_info(gpu_id) 获取指定 NVIDIA GPU 的利用率、温度、功耗等
io_runtime.py get_disk_io() 获取磁盘读写速率(MB/s)
memory.py get_memory_info() 获取内存和交换区使用情况
network.py get_network_info() 获取网络收发数据总量
tcp.py get_tcp_congestion() 获取当前 TCP 拥塞控制算法名

--工程实现说明 大部分资源数据由 psutil 提供,跨平台、性能好。 I/O、网络等采样基于系统差异,可在数据采集器中定时采样统一调度。 异常处理得当,避免模块调用失败导致主程序中断。

2)📁 sysparams/ 模块说明 我们设计了双阶段数据生成系统,首先运行多类标准化 workload,采集 CPU、内存、网络等运行时指标,训练 workload 分类器。然后构建系统参数组合空间,运行 workload 并评估实际执行效率(执行时长、CPU 使用率),据此打分,生成用于训练参数推荐模型的回归样本。最终,系统可根据识别的 workload 自动推荐最优参数。 该模块用于从 Linux 内核导出接口动态读取系统参数,涵盖了调度、内存、网络与 I/O 各方面,是系统调优的基础支撑模块。所有读取的参数最终统一由 collector.py 封装输出,供优化器/训练器/控制器使用。

--子模块与参数说明

子模块 函数 描述
kernel.py get_kernel_params() 读取内核调度类参数:如 sched_latency_ns
vm.py get_vm_params() 虚拟内存管理相关参数:如 swappiness, dirty_ratio
net.py get_all_net_params() 网络协议栈参数(包括 TCP 拥塞控制算法、缓存大小等)
io.py get_io_params() 获取所有物理磁盘的 I/O 调度器、预读大小、队列深度等
collector.py collect_all_sysparams() 汇总上述所有模块输出,结构化输出字典

--模块设计

特性 说明
✅ 多子系统参数支持 涵盖 CPU 调度、虚拟内存、网络、磁盘 I/O
✅ Linux /proc/sys / /sys/block 接口直读 无需外部依赖,使用原生接口
✅ 参数展平结构统一 例如 tcp_rmem 展平为 tcp_rmem_min 等字段
✅ 支持调试运行 每个模块支持独立调试,方便验证采集结果

3)📁 data/ 模块说明 该模块用于系统监控数据与系统参数采样数据的生成,是整个 AI 调优系统的“数据基座”。通过模拟多类负载,采集实时性能数据与对应参数配置,为模型训练和优化提供数据支持。

--模块结构功能

脚本名 功能说明
generate_training_data.py 运行标准负载(CPU/IO/内存/混合),采集系统性能监控指标,构建 workload 分类模型所需的数据集
generate_param_sysdata.py 遍历参数组合空间,运行多个 workload,采集参数配置下的性能指标,构建用于训练参数推荐模型的数据集(带有 perf_score

--数据生成策略 负载模拟(共四类)

负载类型 描述 使用模块
CPU Bound 高强度 CPU 计算 stress --cpu
IO Bound 高频磁盘读写 dd if=/dev/zero ... oflag=dsync
Memory Bound 大内存页分配 stress --vm
Mixed 同时运行 CPU/MEM/IO 混合调用以上任务

参数采样策略 使用笛卡尔积生成组合空间(product(...) 仅选取前 N=100 个组合采样,避免维度爆炸 每组参数应用后运行固定 workload 并记录执行表现

4)📁 optimizer/ 模块功能总览

该模块负责基于系统性能监控数据与采样训练数据,训练 AI 模型并实现两大核心功能: ---工作负载分类器(workload classifier) 判断当前系统运行负载类型(如 CPU 密集型、IO 密集型等) ---参数性能回归模型(parameter performance regressor) 根据 workload 类型和当前系统指标,预测最佳系统参数组合(使系统性能评分最大)

模型 1:工作负载分类器 train_workload_model.py ---功能 训练 RandomForestClassifier 模型 数据集来源:workload_training_data.csv 输出结果:模型文件 workload_model.pkl

模型评估: 准确率、分类报告 混淆矩阵图:model_confusion_matrix.png 特征重要性图:feature_importance.png 模型文件:optimizer/workload_model.pkl 训练日志:train_log.txt

模型 2:性能评分回归模型 train_param_model.py ---功能 训练 RandomForestRegressor 模型 数据集来源:sysparam_training_data.csv 输出结果:性能预测模型 perf_model.pkl

模型评估: 均方误差(MSE) R² 评分 可视化:实际 vs 预测性能评分图

---推理模块: --工作负载预测 workload_classifier.py 封装了 workload_model.pkl 的加载与调用 接收一行系统性能数据 → 返回 workload_type 字符串 特征缺失自动补 0

--最佳参数推荐 predict_best_param.py 给定实时系统状态和 workload 类型 枚举参数组合(100 组) 预测每组组合的 perf_score 返回排序 Top-K 参数组合(默认 Top-1)

5)📁 controller/ 模块功能概览 该模块主要负责将 AI 推荐的参数组合应用到系统中。通过调用 sysctl -w 命令动态设置内核参数,完成从“推荐”到“调优”的最后一步。 系统推荐的调优参数通过 controller/param_applier.py 中的 apply_sysctl_params() 接口注入系统。该模块基于 sysctl 命令,支持所有内核参数动态修改(无需重启)。考虑到 rmem/wmem 等参数格式特殊,系统自动对包含空格的参数加引号处理。

--接口说明 apply_sysctl_params(param_dict: dict) 输入:字典形式的参数组合

--行为 遍历字典,使用 sysctl -w key=value 应用参数 若值中包含空格(如 tcp_rmem),自动加引号处理 支持输出日志:成功或失败都打印 错误抛出供上层捕获,如需回滚/提示用户等

6)📁 evaluation/ 模块功能概览 该模块负责对 AI 调优系统的效果进行自动化评估。通过运行特定 workload,在调优前后分别采集系统性能指标,并输出数据文件与对比图表,用于展示参数优化带来的系统性能改善。 测试通过 evaluation/evaluate_optimization.py 脚本执行,对每类 workload(CPU/IO/MEM/Mixed)采集调优前后系统运行数据。以 cpu_percent、mem_percent 等关键指标为依据,评估优化效果,输出详细数据文件与可视化图表。 测试结果可量化展示优化效果,并验证系统在不同 workload 类型下均有明显性能提升(目标 ≥10%)

--功能流程:

阶段 步骤
① 优化前采样 运行 workload,采集 CPU/内存等性能指标
② 应用推荐参数 使用 predict_best_param() 获取 AI 推荐配置,并通过 apply_sysctl_params() 应用
③ 优化后采样 再次运行相同 workload,采集新一轮系统指标
④ 效果评估 计算性能指标变化(提升或下降),并输出可视化图表和 CSV 数据

7)📁 ui/ 模块功能总览 该项目提供基于 Streamlit 的 Web UI,用户可在浏览器中访问系统控制平台,查看实时系统状态,执行一键优化、自定义参数、模拟负载等操作。 该模块基于 Streamlit 实现了一个直观、交互式的Web 可视化控制面板,用户可通过浏览器界面进行: 实时查看系统监控数据 自动识别工作负载类型 一键调用 AI 优化参数 手动输入 sysctl 参数调节 运行模拟负载进行测试 下载监控日志分析数据

核心功能区说明:

功能区域 功能说明
🖥 系统指标展示 实时展示 CPU、内存使用率和当前 workload 分类
📈 指标趋势图 cpu_percentmem_percent 的动态折线图
⚙️ 一键智能优化 自动调用 predict_best_param() 推荐并应用最优参数组合
🧪 负载模拟工具 在侧边栏选择并运行模拟负载,用于测试优化策略
🛠 自定义参数调节 用户可手动输入参数键值,精细化调整系统行为
📋 实时数据表格 最近 10 条监控数据实时展示
📥 日志下载按钮 支持导出当前所有监控数据为 CSV

AI逻辑说明 每次系统指标采样后,会通过 workload_classifier 模型识别当前负载类型 若识别出的 workload 与上一次不同,则自动触发 AI 推荐并应用参数("智能自动调优") 用户也可手动点击按钮或运行模拟负载以触发调优与测试

8)📁 workloads/ 模块功能说明 该模块提供四类标准化负载生成函数,分别模拟系统在典型工作负载下的运行状态。所有函数都暴露统一接口:run(duration=10),方便在训练/测试/调优过程中统一调用。

--四类负载说明:

脚本名 函数 类型 说明
cpu_bound.py run() CPU 密集型 大量计算操作:多次平方求和,占用核心 CPU
io_bound.py run() IO 密集型 写入文件至 /tmp 并循环覆盖,模拟磁盘读写压力
memory_bound.py run() 内存密集型 快速分配大块内存,持续扩大内存页,模拟高压 RAM
mixed.py run() 混合型 同时运行 CPU、IO 和 Memory 三种负载,模拟复合压力

--模块特色:

特点 说明
✅ 统一接口 所有函数结构标准化,便于批处理采样训练
✅ 真实可控负载 通过原生 CPU 运算 / 文件写入 / 内存申请 实现真实资源压力
✅ 易扩展 可新增 GPU、网络等类型 workload
✅ 自动清理 IO 任务结束自动清除临时文件,避免磁盘累积污染

6、模型说明

模型 1:工作负载分类器 训练目标:识别 CPU/IO/内存/混合型负载 模型类型:RandomForestClassifier 输入特征:CPU/MEM/IO/GPU 监控指标 输出:workload_type 标签

模型 2:性能评分预测器 训练目标:预测每组系统参数组合对应的性能分数 模型类型:RandomForestRegressor 输入特征:系统状态 + workload 类型 输出:perf_score,用于推荐最优配置

7、优化评估示例 通过自动测试脚本可验证调优效果: python3 evaluation/evaluate_optimization.py cpu_bound

输出示例:

cpu_percent: 53.2% ➜ 64.8%(提升 +21.8%)

8、软件亮点

✅ 实时采集 + 自动识别 + AI 优化 + 自动调参 = 闭环智能系统 ✅ 设计结构清晰,模块解耦,便于二次开发 ✅ 参数扩展方便,新增参数或替换模型只需修改单一模块