# Relax **Repository Path**: growinware/relax ## Basic Information - **Project Name**: Relax - **Description**: 资源竞争检测和消解工具。贡献单位:国防科技大学 - **Primary Language**: C - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-08 - **Last Updated**: 2024-04-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Relax ### 介绍 #### 1. 项目背景:         随着云计算和大数据的兴起,软件的规模和复杂性也不断的增加,从而在复杂的运行环境中引起系统资源不断发生变化。由于软件的运行依赖于系统资源,当多个软件同时对系统资源产生竞争时,则会导致软件的性能明显下降。而性能又是衡量一个软件质量的重要标准,所以软件性能问题是当前国际学术研究的新焦点。         目前,诊断软件性能问题相关技术研究蓬勃兴旺,现有的研究工作都是关注由于软件自身问题所导致的性能问题,例如:软件代码存在无效或不必要的计算和软件配置不当都可以导致软件性能下降,这类性能问题是属于软件性能Bug。而现实中还存在另一类导致软件性能问题的因素,那就是多软件资源竞争。当运行环境中出现多软件资源竞争时,轻则会导致软件性能下降,重则会导致软件无法正常运行。         与软件代码问题或配置错误引起的性能问题相比较,由多软件资源竞争所引起的性能问题不属于Bug。因为每个软件单独运行是没有任何性能问题,只是当这些软件同时在特定负载下运行的时候就会出现性能问题。例如:网络端口号,同一时刻一个端口号只能与一个软件绑定,当多软件系统同时配置使用同一个网络端口号时,会造成端口资源的冲突使用,导致其中一个软件不能正常运行。         诊断由多软件资源竞争所引起的性能问题难点主要体现在以下三个方面:(1)目前没有一个合理的指标来衡量一个软件的性能高低。通常认为软件的运行时长和软件的性能有关。但是使用软件的运行时长来衡量一个软件的性能不是完全合理的,因为有些软件在执行特殊任务时本身需要很长的运行时间。例如:对视频进行渲染就是一个很耗时的过程,但是我们不能认为渲染视频的软件性能低。(2)判断性能问题是否由多软件资源竞争所导致是比较困难的。因为由资源竞争和代码Bug引发的性能问题都呈现出相似的结果。例如:长的响应延时和低的系统吞吐率。(3)当检测出运行环境中出现资源竞争时,应该重新调整哪些软件的资源使用情况以及将这些软件的资源使用调节为多大才能保证当前运行中的资源竞争被成功的消解。         当运行环境出现资源竞争时,应该及时的重新分配软件资源来消解竞争,确保软件正常高效的运行。而现有的操作系统又缺乏资源竞争检测和资源重新分配的中央调控机制。因此,自动地检测运行环境中多软件间资源竞争是非常重要的,从而有助于系统中的软件正常运行,这对于工业生产具有重大意义。         针对上述现状,本项目将深入分析运行环境中多软件资源依赖情况,研究自动化资源竞争检测和消解的方法,并设计实现多软件资源竞争检测和消解工具,提升软件适应外界环境变迁的能力,从而实现软件长期高效的运行。 #### 2. 解决方案:         从软件配置角度入手,对由多软件资源竞争引起的软件性能问题进行研究。通过对软件响应延时随负载变化关系分析发现,软件的响应延时随着负载的变化存在一个突变点。基于以上发现,本项目设计实现了自动检测与消解多软件资源竞争的工具Relax。Relax通过结合突变点处的软件资源请求延时和系统总资源使用率来检测运行环境中由资源竞争引发的性能问题,并受到网络拥塞控制的启发,Relax通过快减慢增的方法调整软件资源相关的配置项来消解竞争。 #### 3. 软件架构: ![输入图片说明](https://images.gitee.com/uploads/images/2021/0908/170827_1be7000f_891768.png "relax.png") ### 安装教程 #### 一、配置-资源依赖分析工具confResource: 前提和约束: - 已在虚拟机中安装好Ubuntu16.04; - 在Ubuntu16.04中安装好MySQL,并启动MySQL服务,用于支持confResource的中间过程存储; - 在Ubuntu16.04中源码安装Bear-2.4.2; - 依赖如下库: libmysqlclient: sudo apt-get install libmysqlclient-dev libxml2: sudo apt-get install libxml2-dev - 下载目标软件mysql-5.5.36源代码。 1、将others目录下的PreCompilerHandler文件夹复制到confresource目录下,重新编译生成可执行文件PreCompile;新建文件夹Debug,将PreCompile复制到Debug目录下。具体命令为: ``` gcc *.c -o PreCompile -lpthread mkdir Debug cp PreCompile ./Debug/ ``` 2、以root用户在mysql-5.5.36源码目录下运行以下命令生成mysql的编译数据库文件compile_commands.json: ``` bear cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=on ./ bear make ``` 3、修改PreCompilerHandler下的input.conf文件,将JsonPath设置为compile_commands.json的路径,进行预编译处理,mysql源码目录下生成预编译过后的文件(.E.c,.E.cc): ``` cd Debug ./PreCompile ``` 4、进入confresource/StaticAnalysis目录,修改input.conf文件,补充目标软件源码路径和与资源相关的配置项列表,配置完成input.conf文件 5、进入资源相关配置项排序分析工具StaticAnalysis/Debug所在目录,在终端中执行命令: ``` ./StaticAnalysis ``` ~/resultInfo.log文件包含配置项对资源影响程度。 #### 二、资源监控与冲突消解工具ResourceMonitor: 前提和约束: - 已在虚拟机中安装好Ubuntu14.04; - 已安装好MySQL和Redis对应版本,启动mysql服务和redis服务。 **准备工作:** **manually compile kernel** - 第一步:将内核源码(3.16.40)解压到/usr/src目录下 - 第二步:根据kernel-3-16-40目录下的ReadMe指导来修改内核源码 - 第三步:如果第一次编译源码可以跳过该步骤 ``` sudo rm -fr /boot/vmlinuz-3.16.40 sudo rm -fr /boot/Systemp.map-3.16.40 sudo rm -fr /boot/initrd.img-3.16.40 ``` - 第四步:编译安装源码 第一次编译源码的时候,需要将原有内核源码的.config文件(/usr/src/linux-headers-*-generic/.config)拷贝到新内核源码目录下,这样就不用重新配置内核源码了。 cd /usr/src/linux-3.16.40 sudo make -j8 && sudo make modules_install && sudo make install - 第五步:重启电脑 ``` sudo reboot ``` **automatic compile kernel** ``` sudo ./autoInstall.sh Path: linux-3.16.40.tar.gz Example: sudo ./autoInstall /home/User/linux-3.16.40.tar.gz ``` **ResourceMonitor服务程序源码编译安装(在内核层监控软件运行冲突信息)** ``` cd /root/Desktop/relax-analyze/ResourceMonitor/Server make && sudo make install ``` **ResourceMonitor服务程序卸载(在内核层监控软件运行冲突信息)** ``` cd /root/Desktop/relax-analyze/ResourceMonitor/Server sudo make uninstall ``` **ResourceMonitor客户程序源码编译安装(通知用户冲突软件信息)** ``` cd /root/Desktop/relax-analyze/ResourceMonitor/Client make && sudo make install ``` **ResourceMonitor客户程序使用** sudo ResourceMonitor启动用户层监控程序,该程序用于查看当有软件发生冲突后可以通过ResourceMonitor来查看冲突信息 #### 三、构造资源竞争场景,进行冲突检测与消解测试: 1、根据resultInfo.log结果,配置/etc/ResourceMonitor/Client/ResourceMonitorClient.conf文件; 2、进入/root/Desktop/relax-analyze/MEMContention目录,在此目录的终端中执行命令“python benchmark-3.py”。启动测试环境(脚本会先执行Redis软件,运行一段时间后执行MySQL软件,构造两个软件内存冲突场景。Redis使用redis-cli连接数据库,对存在1万条数据的表,进行4万次随机读操作;MySQL对存在10万条数据的表进行并发读操作,并发数为500,每个连接读取10次),可以在软件执行速率的实时显示界面中观察到Redis和MySQL的执行速率(操作的平均执行时间,该值越高表示软件执行速率越低); 3、在终端中执行命令“ResourceMonitor”。启动ResourceMonitor工具,自动检测系统是否存在CPU、Memory、IO、NET资源冲突。如果存在资源冲突,ResourceMonitor工具会自动调节目标软件的配置项,消解系统中的资源竞争。 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)