跳转至

tuned-adm vs KeenTune vs A-Tune 对比分析

三款 Linux 系统性能调优工具的全方位对比。


1. 基本信息

维度 tuned-adm KeenTune A-Tune
来源 Red Hat (2008~) 阿里云/龙蜥社区 华为/openEuler
仓库 redhat-performance/tuned anolis/keentuned + 5 个子仓库 openeuler/A-Tune
License GPLv2 Mulan PSL v2 Mulan PSL v2
二进制 tuned (daemon) + tuned-adm (CLI) keentuned (daemon) + keentune (CLI) atuned (daemon) + atune-adm (CLI)
语言 Python 3 Go 1.21 + Python (brain/target/bench) Go 1.14 + Python (engine/rest)
部署范围 Fedora/RHEL/CentOS 默认集成 AnolisOS + 龙蜥生态 openEuler 社区
文档 man pages + 英文 README README + misc/docs/ (中英文) README + docs/ (中英文, 24.03 LTS)

2. 架构对比

tuned-adm (单仓库,单守护进程):
┌──────────────┐     DBus      ┌──────────────┐
│  tuned-adm   │◄─────────────►│    tuned     │
│   (CLI)      │               │  (daemon)    │
└──────────────┘               └──────────────┘

KeenTune (6 仓库,4 服务):
                                ┌─ keentune-brain :9872 (AI 搜索)
┌──────────────┐     DBus       │
│  keentune    │◄──────────────►│─ keentuned :9871 (调度核心)
│   (CLI)      │               │
└──────────────┘               ├─ keentune-target :9873 (下发参数)
                               └─ keentune-bench  :9874 (压测)

A-Tune (4-5 仓库,4 服务):
                                ┌─ atune-engine :3838 (ML 引擎)
┌──────────────┐    gRPC        │
│  atune-adm   │◄──────────────►│─ atuned (gRPC + Unix socket)
│   (CLI)      │               │
└──────────────┘               ├─ atune-rest :8383 (监控采集)
                               └─ A-Tune-Collector (独立采集器)

IPC 机制差异

tuned-adm KeenTune A-Tune
CLI ↔ Daemon DBus DBus system bus gRPC (Unix socket / TCP)
Daemon ↔ 子服务 N/A (无子服务) REST (HTTP, port 9871) REST (HTTP, port 8383/3838)
子服务间通信 N/A DBus session bus (bench/sensi信号) gRPC 双向流
TLS 安全 ✅ gRPC + REST 双向 TLS
多节点集群 支持多 target/bench 机器 ✅ gRPC TCP 集群模式

3. 调优能力对比

3.1 静态 Profile

tuned-adm KeenTune A-Tune
Profile 数量 39 个预定义 可动态创建 + JSON 管理 15 大类型 (数百个 .conf)
配置文件格式 INI 风格 tuned.conf JSON 参数文件 INI 风格 .conf
配置粒度 [cpu], [vm], [sysctl], [disk], [net] 等 section domain + name + range + step + dtype [sysctl], [sysfs], [bios], [bootloader], [schedule_policy], [script]
Profile 继承 include=throughput-performance include=default-default
历史回滚 profile rollback profile rollback
Profile 校验 tuned-adm verify

示例 — tuned-adm 的 network-throughput profile:

[main]
include=throughput-performance

[sysctl]
net.ipv4.tcp_rmem="4096 131072 16777216"
net.ipv4.tcp_wmem="4096 16384 16777216"

示例 — KeenTune 的参数 JSON:

{
    "domain": "sysctl",
    "name": "net.unix.max_dgram_qlen@group-1",
    "range": [128, 1048576],
    "dtype": "int",
    "step": 128,
    "base": "400383"
}

示例 — A-Tune 的 profile conf:

[sysctl]
vm.swappiness=10
kernel.sched_min_granularity_ns=10000000
net.core.rmem_default=262144

[schedule_policy]
group=0:0:f:p:0

3.2 动态调优

tuned-adm KeenTune A-Tune
调优方式 内置 monitor 自适应调整 AI 迭代搜索 + benchmark 反馈 AI 优化 + benchmark 反馈 + 规则引擎
AI 引擎 ❌ 无 random, hord, lamcts, bgcs 13 种: Bayes(GP), GA, PPO, TPE, grid, random, forest, extraTrees, gbrt, lhs, abtest, traverse, Bayesian_Transfer
负载感知 磁盘/网络/CPU 动态监控 ❌ 无监控 ✅ RandomForest/SVM 在线识别 11 种负载
瓶颈检测 ✅ 5 种 (CPU/Memory/Network/NetIO/DiskIO)
规则引擎 grool + YQL 动态规则调优
自适应 ✅ 根据负载变化实时调整 CPU governor 等 ✅ 负载分类后自动匹配 profile + 规则

3.3 敏感度分析

tuned-adm KeenTune A-Tune
敏感度分析 ✅ LASSO, SHAPKernel, XGBTotalGain, MI, GP ✅ wefs / vrfs 特征选择
用途 N/A 先识别重要参数,缩小搜索空间 同,减少调优参数数量

3.4 基准测试

tuned-adm KeenTune A-Tune
内置 benchmark ✅ bench 组件 (wrk/sysbench/fio/nginx 等) ✅ Evaluation YAML 定义
多轮重复 N/A ✅ 可配置 baseline/tuning/recheck 轮次 ✅ 配置迭代次数
结果格式 N/A key=value,key=value 支持 grep 正则提取

4. 高级特性

tuned-adm KeenTune A-Tune
CPU 调度绑定 ✅ 内置 scheduler (绑核/IRQ/NUMA)
异常检测 ✅ Python 异常检测模块
自动 Profile 推荐 ✅ 基于 system-release-cpe + virt-what ✅ ML 模型自动分类 + 推荐
Web UI ✅ keentune-ui (Node.js) ✅ A-Tune-UI (Node.js)
Bash 补全
自动配置检测 make autoconfig 自动检测磁盘/网卡
Docker ✅ engine 独立 Dockerfile

5. 工程化对比

5.1 构建

tuned-adm KeenTune A-Tune
构建系统 Makefile + RPM spec go mod vendor + Makefile go mod vendor + Makefile
构建命令 make make daemon && make cli make
二进制输出 Python (不编译) pkg/keentuned, pkg/keentune pkg/atuned, pkg/atune-adm
编译依赖 Python 3 Go 1.21 + -mod=vendor -extldflags "-static" Go 1.14 + -mod=vendor
子组件安装 N/A 需单独安装 brain/target/bench (各从独立 repo) 需单独安装 A-Tune-Collector (pip3 install)

5.2 测试

tuned-adm KeenTune A-Tune
单元测试 ✅ Python unittest (profiles/plugins/monitors/utils) ✅ Go gomonkey + goconvey (仅 daemon/service_test.go) ❌ 无 Go 单元测试
集成测试 ✅ beakerlib 7 个场景 ✅ Python unittest 60+ 用例 (需 4 服务全启动) ✅ 27 个 Shell 测试脚本
测试运行 make test make check (需要 4 服务运行中) make check
CI/CD ✅ Packit / Fedora CI
E2E 覆盖 profile 切换 / API / error 处理 CLI 功能 + 可靠性 + REST API + UI + 长时间稳定性 CLI 功能 + 配置 + 启停

5.3 数据库

tuned-adm KeenTune A-Tune
数据库 SQLite3 SQLite3 (xorm ORM)
存储内容 N/A job 历史 CSV (/var/keentune/) profile 元数据 / 历史日志 / 规则

6. 架构拓扑

tuned-adm:
  ┌─ 单机部署 ─────────────────────────┐
  │  tuned (daemon)                     │
  │  ├─ CPU governor                   │
  │  ├─ disk readahead / scheduler     │
  │  ├─ vm dirty ratio                 │
  │  ├─ sysctl (tcp/udp/net buffer)    │
  │  └─ monitor (disk/load/net)        │
  └─────────────────────────────────────┘

KeenTune:
  ┌─ 单机或多机 ──────────────────────────────────────────────────┐
  │  keentuned :9871 (调度核心)                                    │
  │  ├─ DBus ──► keentune (CLI)                                  │
  │  ├─ REST ──► keentune-brain :9872 (AI 搜索算法)              │
  │  ├─ REST ──► keentune-target :9873 (参数下发到目标机器)       │
  │  └─ REST ──► keentune-bench :9874 (基准测试执行)              │
  │       target/bench 可部署在远端不同机器                        │
  └────────────────────────────────────────────────────────────────┘

A-Tune:
  ┌─ 单机或集群 ─────────────────────────────────────────────────────────────────┐
  │  atuned (gRPC server, Unix socket + TCP)                                     │
  │  ├─ gRPC ──► atune-adm (CLI)                                                │
  │  ├─ REST ──► atune-rest :8383 (监控/采集/配置)                               │
  │  ├─ REST ──► atune-engine :3838 (ML 优化引擎, 支持独立 Docker 部署)           │
  │  │            ├─ 负载分类 (RandomForest/SVM)                                 │
  │  │            ├─ 瓶颈检测 (5 种)                                             │
  │  │            ├─ 贝叶斯优化 + GA + PPO + Transfer Learning                   │
  │  │            └─ 规则引擎 (grool + YQL)                                      │
  │  ├─ 扩展 ──► A-Tune-Collector (独立 collector 采集系统指标)                   │
  │  ├─ 扩展 ──► A-Tune-UI (Node.js Web 界面)                                   │
  │  └─ 集群 ──► 多 atuned 实例 gRPC TCP 互联 (集群模式)                         │
  └───────────────────────────────────────────────────────────────────────────────┘

7. 核心思路对比

工具 核心哲学 一句话
tuned-adm 专家知识驱动 — "我知道什么场景该调什么参数" 一键切换预设方案,开箱即用
KeenTune 迭代搜索驱动 — "让算法在参数空间里试出最优值" 对特定 workload 精准寻优,需要配置 benchmark 脚本
A-Tune 智能识别驱动 — "先识别你是谁,再决定怎么优化你" 全自动化,适合复杂异构环境,特性最全面但复杂度最高

三者是逐步演进的关系:

tuned-adm ──► KeenTune ──► A-Tune
(静态规则)    (AI 搜索)     (识别+搜索+规则)
  • tuned-adm 解决"知道怎么调,快速切换"的问题
  • KeenTune 解决"不知道最优值,让算法找"的问题
  • A-Tune 解决"不知道当前是什么负载,先识别再优化"的问题,同时保留了前两者的能力

8. 选型建议

场景 推荐
Fedora/RHEL/CentOS 环境,通用场景 tuned-adm(零依赖,系统自带)
需要对特定 benchmark 做极限性能调优 KeenTune(AI 搜索 + benchmark 闭环)
openEuler 环境,需要全自动化 A-Tune(负载识别 + 自动匹配 + AI 优化)
混合/异构集群调优 A-Tune(gRPC 集群模式 + TLS 安全)
需要敏感度分析缩小参数空间 KeenTune 或 A-Tune(两者都有特征选择)
需要调度优化(绑核/IRQ/NUMA) A-Tune(内置 scheduler)
需要异常检测 A-Tune(内置 anomaly detection)
需要 Docker 化部署 A-Tune(engine 支持独立 Dockerfile)
快速验证,不依赖外部服务 tuned-adm

💬 评论