1 A-Tune介绍
A-Tune是一款基于AI开发的系统性能优化引擎,它利用人工智能技术,对业务场景建立精准的系统画像,感知并推理出业务特征,进而做出智能决策,匹配并推荐最佳的系统参数配置组合,使业务处于最佳运行状态。
1.1 A-Tune核心技术架构:
1.2 支持特性与业务模型
支持特性:
-
七大类11款应用负载类型自动优化
-
自定义负载类型和业务模型
-
参数自调优
A-Tune支持的业务模型包括https应用、大数据、计算密集型应用、网络密集型应用、内存密集型应用,以及系统IDLE等。安装与部署
1.3 软硬件要求
硬件要求:鲲鹏920处理器
软件要求:openEuler 20.03 LTS 操作系统
1.4 环境准备
-
安装openEuler系统。
-
安装A-Tune需要使用root权限。
2 安装A-Tune
2.1 安装模式
A-Tune支持单机模式和分布式模式安装:
2.2 安装过程
由于曾经在本地尝试安装过,但下载速度极慢,且由于虚拟机硬盘空间不足、较容易崩溃等原因,产生了很多不便,因此我在此使用了源码编译安装的方式,以及ssh远程登录云服务器来做这部分实验。
华为云服务器:
配合弹性公网IP一起使用:
windows命令行进行ssh登录:
ssh root@121.36.233.210
登陆成功。
接下来在云服务器上安装A-Tune。
# 安装依赖软件包
yum install -y golang-bin python3 perf sysstat hwloc-gui
# 安装A-Tune服务的依赖包
yum install -y python3-dict2xml python3-flask-restful python3-pandas python3-scikit-optimize python3-xgboost python3-pyyaml
# 安装数据库依赖包
yum install -y python3-sqlalchemy python3-cryptography
yum install -y python3-psycopg2
# 下载源码并编译安装
git clone https://gitee.com/openeuler/A-Tune.git # 使用git命令克隆远程gitee仓库到openEuler服务器
cd A-Tune
make models
make
make collector-install
make install
安装依赖:
克隆源码:
编译安装:
这里出现一个错误(文件未找到),再编译一遍:(-i暂时忽略错误)
开始编译(make):
……………………
编译完成的最后几行:
安装:
……………………
安装完成。云服务器设置最大带宽为 50Mbps,下载过程速度很快,不到十分钟,A-Tune就已经安装完毕,而之前在虚拟机上本地安装仅是安装依赖和clone源码就花了一个多小时,编译过程中也出现过一些小插曲。而这些问题对于更稳定、更高性能的云服务器是不存在的。
3 部署A-Tune服务
本章介绍A-Tune的配置部署。
3.1 配置介绍
A-Tune配置文件位于 /etc/atuned/atuned.cnf,配置项说明:
3.2 查看配置信息
cat /etc/atuned/atuned.cnf # 查看配置文件
部分配置信息:
从图中可看出system板块中磁盘选项为 sda;网络选项为 enp189s0f0;用户名为 root。
4 启动、管理A-Tune
4.1 启动A-Tune服务
systemctl daemon-reload # 加载服务
systemctl start atuned # 启动服务
systemctl start atune-engine
systemctl status atuned # 查看服务状态
查看状态,atuned 和 atune-engine 显示 active(running),服务启动成功,然后输入” Ctrl+c “ 退出。
4.2 管理A-Tune
-
使用A-Tune需要使用root权限。
-
atune-adm支持的命令可以通过 atune-adm help/–help/-h 查询。
-
使用方法中所有命令的使用举例都是在单机部署模式下,如果是在分布式部署模式下,需要指定服务器IP和端口号。
-
define、update、undefine、collection、train、upgrade不支持远程执行。
-
命令格式中,[ ] 表示参数可选,<> 表示参数必选,具体参数由实际情况确定。
-
命令格式中,各命令含义如下:
-
WORKLOAD_TYPE:用户自定义负载类型的名称,负载支持的类型参考list命令查询结果。
-
PROFILE_NAME:用户自定义profile的名称
-
PROFILE_PATH:用户自定义profile的路径
查询负载类型:
查询系统当前支持的workload_type和对应的profile,以及当前处于active状态的profile:
atune-adm list
……………………
查询profile信息:
查看workload_type对应的profile内容。
atune-adm info <WORKLOAD_TYPE_>_
例如查看 basic-test-suite-baseline-lmbench 的profile内容:
激活profile:
手动激活workload_type对应的profile,使得workload_type处于active状态:
atune-adm profile [ProfileName]
例如想要激活 basic-test-suite-baseline-lmbench:
会显示如上一系列提示信息以及安全警告信息。
验证是否激活成功:
basic-test-suite-baseline-lmbench 一行活动状态为 ”true“,表明该 profile 已被成功激活。
此外,还有对profile的更新、回滚,以及系统信息查询,用法都比较简单在此不再一一举例。
5 调优实际操作(优化nginx)
这部分参考了openeuler说明文档,同时受到OpenEuler上A-Tune的部署与使用albert-rabbit的博客-CSDN博客a-tune的离线调优过程的启发。
首先进入示例目录:
实例目录位于 /root/A-Tune/examples/tuning,该目录下有若干实例,我们进入 ./nginx 目录,并准备环境:
# 打开nginx目录
cd nginx
# 查看当前路径
pwd
/root/A-Tune/examples/tuning/nginx
# 查看目录内所有文件
ls
nginx_benchmark.sh nginx_client.yaml nginx_http_long_client.yaml prepare.sh README
# 准备调优环境
sh prepare.sh
执行sh命令后,系统会自动安装nginx、启动nginx、更新nginx客户端:
查看一下 nginx_client.yaml 的内容:
可以看到相关优化设置:
-
nginx的调优算法为 gbrt;
-
调优的迭代次数为 30;
-
随即迭代次数为 10;
-
benchmark执行命令为 "sh /root/A-Tune/examples/tuning/nginx/nginx_benchmark.sh";
-
性能评价指标为 ”rps“。
再看 ./nginx_benchmark.sh 的内容:
该文件用来在执行调优时获取评价指标的具体数值,由上面的 nginx_client.yaml 文件中第 6 行执行该文件。
接下来正式执行调优:
一般命令:
atune-adm tuning --project <PROJECT_NAME> --detail <client.yaml> # <PROJECT_NAME>为调优实例名;client.yaml保存了客户端调优的评价指标等信息
本实验中执行如下命令:
atune-adm tuning --project nginx --detail nginx_client.yaml
……………………
10~15分钟后调优结束,注意到最后几行:
The final optimization result is: nginx.access_log=off,nginx.error_log=/dev/null
The final evaluation value is: rps=53493.00
Baseline Performance is: (rps=46279.00)
Tuning Finished
[root@openeuler-huaweicloud nginx]#_
告诉我们错误日志信息保存在 /dev/null,rps 由最初的 46297.00 增长到 53493.00。
RPS:全名为 Requests per second,表示 nginx 每秒处理的请求数,以此作为 nginx 的性能指标,其他的一些性能指标参考Nginx 压测和性能分析的一些经验 - K码农 (kmanong.top)。
所以不难得出,通过A-Tune调优,nginx 的性能提升了约 15.5%。