基于LKP测试框架的LINUX内核测试说明书.doc

上传人:Q145****609 文档编号:6686802 上传时间:2020-03-02 格式:DOC 页数:35 大小:1.83MB
返回 下载 相关 举报
基于LKP测试框架的LINUX内核测试说明书.doc_第1页
第1页 / 共35页
基于LKP测试框架的LINUX内核测试说明书.doc_第2页
第2页 / 共35页
基于LKP测试框架的LINUX内核测试说明书.doc_第3页
第3页 / 共35页
点击查看更多>>
资源描述
目 录摘 要IIAbstractIII1 绪 论11.1 研究的背景及意义11.2 国内外发展状况和最新发展趋势11.3 课题的主要研究工作21.4 论文的组织结构32 系统需求分析与架构设计42.1 系统需求分析42.2 系统总体架构设计62.3 系统可行性分析82.4 本章小结83 系统详细设计与实现93.1 LKP测试框架应用93.2 LKP-WEB后端部署103.3 LKP-WEB 前端实现153.4 Jenkins服务和Docker213.5 本章小结224 系统测试与验证234.1测试环境234.2测试用例验证234.3验证代码风格284.4本章小结285 总结与展望30参考文献31致谢3229基于LKP测试框架的LINUX内核测试摘 要近年来,随着人们对计算机系统需求的日益提升,Linux的发展日新月异。Linux版本的更替加速过程中,由于客观原因的存在,大量Linux漏洞被暴露出来,在新版本发布之前,如何快速有效的定位这些漏洞,成为Linux开发速度的首要难题。当今,Linux发展面对的主要问题是不断更新的版本,无法快速有效的检测可能存在的错误。而针对检测Linux内核的性能、功能、编译等问题,LKP测试框架能够行之有效的检测出问题,并生成测试结果邮件。然而,LKP测试框架为运行在Linux客户端的程序,只能通过命令行操作与展示结果,因此,LKP-WEB是运行在网页端的LKP应用程序,具有LKP的部分功能,并能对LKP的测试结果进行整合,实现数据可视化。本课题主要研究LKP的测试流程,并完成LKP-WEB的功能设计及页面展示。未来,本课题还将继续对LKP-WEB进行功能的完善与改进。关键词:Linux;内核测试;内核漏洞;数据可视化Linux kernel test based on the test framework of linux kernel performanceAbstractIn recent years, with the increasing demand for computer systems, the development of Linux is changing with each passing day. With the acceleration of the replacement of multiple Linux versions, a large number of Linux vulnerabilities are exposed because of the existence of objective reasons. Before the new version is released, how to quickly and effectively fix these vulnerabilities becomes the first problem of the development of Linux.Nowadays, the main problem of the development of Linux is the constantly updated versions cannot be detected errors quickly and effectively. For testing the performance, function and compiling of Linux kernel, LKP can effectively detect problems and generate test results. However, the LKP which runs on the Linux client, can only operate and display the results through the command line. Therefore, LKP-WEB is a LKP application running on the web end. It has some functions of LKP, it can integrate the test results of LKP and realize data visualization. This topic mainly studies the testing process of LKP, and completes the function design and page display of LKP-WEB. In the future, this topic will continue to improve the function of LKP-WEB.Keywords: Linux; Kernel Test; Kernel Bug; Data Visualization1 绪 论1.1 研究的背景及意义Linux操作系统诞生于20世纪90年代初,此后便进入了飞速的发展期。Linux存在着许多不同的发行版本,数量众多的Linux发行版本也推动了Linux的发展。Linux可安装在各种计算机硬件设备中,比如手机、台式计算机、平板电脑、路由器、大型机、视频游戏控制台等等 1-2。Linux发展至今,已拥有成百上千的用户数量,因为Linux系统实用的广泛性,且Linux本身为开源项目,极大的自由度给Linux系统带来了快速的发展和更新,Linux社区也是全球最活跃的社区之一。大量的开发者使得Linux内核拥有极快的更新速度3-4 ,然而,快速变化的同时,也给Linux内核带来数量众多的漏洞和错误,如何在有效的时间内,处理尽可能多的测试,找出尽可能多的漏洞和错误,也成为了难题之一。LKP项目的诞生,使得这一切成为了可能,它可以在极短的时间内,检验出内核补丁是否存在编译、启动、功能和性能问题。本课题旨在研究LKP项目的实现原理,对于不同内核版本,分析比较其测试结果5-8。为了更方便的使用LKP框架,对LKP生成的测试结果进行数据可视化,对LKP的测试用例的状态进行监控,并把其展现在网页端,使开发者能够快速便捷的发现问题。在命令行下,可以根据需求快速、便捷地通过几条命令进行测试,在网页端,能清晰明了地展现测试数据、监控测试用例状态,这样就能飞快地提升Linux的开发速度。1.2 国内外发展状况和最新发展趋势评估软件价值,发现软件中的错误和缺陷,是软件测试的主要目的。在软件开发过程中,人们更多的关注软件的实用性和质量,这让软件测试的地位逐步提高。操作系统属于系统软件,测试操作系统的功能的实用性与系统的稳定性是提高操作系统质量的重要环节。而内核负责完成操作系统核心功能9,因此,测试内核能及时发现更新内核版本中的源码错误、功能缺陷以及性能瓶颈等10。很多系统采用内核的一个显著特点就是安全性。由于系统调用是内核提供的一组用于实现各种功能的接口,用户只能通过系统调用实现对内核空间的访问,这大大增加了内核测试的难度11。Linux内核正在变得越来越庞大,而且对各种系统框架平台的兼容性越来越强。因此,充分保障Linux内核的可靠、健壮和稳定成了当务之急。与LKP类似,Linux Test Project是一个以改善日益庞大的Linux内核为目标的组织结构,它通过引入自动化测试来完成Linux内核的测试。为了实现自动化测试这一目标,LTP开发出了可运行在多种Linux操作系统上的测试工具组件12。LTP组件是由SGI、IBM、OSDL、Bull以及Wipro Technologies合作组织开发的一套针对各种Linux操作系统的开源内核测试工具。它基于系统资源的利用率统计而设计,为系统提供足够的压力测试13-14。目前LTP支持的Linux操作系统有Ubuntu、SUSE、Redhat/Fedoras、Debian、Mandriva、Slackware等。LTP组件架构的主要内容分为目录和脚本。其中包括文档目录(doc)、测试用例目录(testcase)、测试脚本目录(testscripts)、测试命令文件目录(runtest)、测试结果目录(results)、测试驱动程序目录(pan)、库目录(lib)、头文件目录(include)等15。LTP组件提供测试用例用于测试用接口和广泛的内核子系统。其中,内核子系统包括内存管理、系统回调、资源管理、POSIX语义、定时任务、网络、文件系统、容器IPC、安全等。这些测试用例用于系统压力测试,制造干扰效果和极端情况。目前,LTP官网已收录了3000多个测试用例集,并且其数目还在不断增多16。Pan工作原理,从一个测试命令文件中读取要测试的条目到要执行的命令行,然后等待用例测试结束,并记录详细的测试输出17。默认状态下pan会随机地选择一个命令行来运行,使用者可以选择时间段内的执行次数。Pan会记录测试产生的不同格式的数据和结果,但不对其进行分析和格式化处理。数据整理和统计工作由scanner来完成。Scanner是一个格式化分析工具,它会解析pan的数据结构,并输出一个表格的形式来总结通过的测试用例或失败的测试用例。LTP组件对于测试Linux内核非常行之有效,但它仍然有一些显著的缺点,比如不能自动进行内核编译/重启,内核代码覆盖率不算很高,某些输出日志和终端的测试用例不能被正确解析,某些用例难以实施等。1.3 课题的主要研究工作本课题主要针对LKP测试框架,熟悉其应用功能,并对其测试结果进行分析、总结,并监控测试用例状态,把内容展现在网页上。在课题的设计研究过程中,主要存在以下几点研究任务:(1)LKP生成的测试报告,大多以邮件形式发回到开发者的邮箱,并在本地服务器上留下邮件备份,针对这些邮件,采用正则表达式对其进行模糊匹配,方便快捷地统计邮件类型和内容,再对其进行数据处理。(2)由于每天都会有大量的测试用例执行完毕,生成新的测试数据,所以需要定期对数据库中的数据进行更新,这里搭建了Jenkins服务,把网页项目部署到Jenkins服务器上,可以对项目进行定时定点地执行,并把执行结果以邮件形式通知开发者,在Jenkins上也可以监测项目的运行状态。(3)由于此项目为Intel对外开放的开源项目,项目的测试都在其提供的三个服务器上,分别为Haswell、inn、bee。Haswell服务器用来调试LKP的代码实现,使用测试时,需要安装的依赖,服务配置等。熟悉Haswell、bee、inn各个服务器的功能和配置,才能更加熟练的账务LKP测试框架的用法。(4)LKP测试框架里拥有极其复杂和丰富的代码量,其中有自己的启动命令lkp,lkp是LKP测试框架的基本启动语法,其下还有run、install、split-job、result、queue等等命令。不同的命令有着不同的作用,了解不同命令的作用有助于更好的理解LKP-WEB的功能实现。1.4 论文的组织结构本文主要分为五个章节介绍LKP测试框架的研究过程,各个方面的介绍如下:第1章 绪论。阐述LKP的研究背景,Linux发行版本的意义,当前Linux测试工具在国内外的发展情况,针对现状,需要采取的措施,以及本文的组织结构。第 2 章 系统需求分析与结构设计。首先介绍LKP-WEB的功能需求和研究重点,提出性能需求,并根据性能需求设计系统。然后分析整个项目的结果,对各个功能模块进行阐述。最后对LKP-WEB进行目标可行性分析和所用的技术栈难度阐述。第 3 章 系统的详细设计与实现。介绍LKP框架的背景知识、环境搭建和依赖包,然后详细介绍LKP的搭建与实现,包括LKP-WEB的后端实现、前端界面实现,最后介绍Jenkins和Docker服务。第 4 章 系统测试与验证。在本章节中,首先测试环境以及测试用例的编写,然后介绍性能测试的结果,界面功能测试的概述,最后是Ruby和JavaScript代码的风格和代码规范的介绍。第 5 章 总结与展望。在本章节中,对本次项目的完成情况做一个概述和总结,分析其中完成的功能和存在的问题,并提出未来功能的发展方向。2 系统需求分析与架构设计在本章节中,首先介绍LKP-WEB的功能需求和研究重点,提出性能需求,并根据性能需求设计系统。然后分析整个项目的结果,对各个功能模块进行阐述。最后对LKP-WEB进行目标可行性分析和所用的技术栈难度阐述。2.1 系统需求分析2.1.1 功能需求分析本课题设计实现的LKP网页端,主要供Linux开发者使用。LKP测试框架可以快速、有效地检测出Linux内核存在的性能、编译等问题,然而其每次运行后,会生成大量测试数据,不易于观察总结,而LKP-WEB则会对LKP的部分功能进行可视化,使其更加方便操作。图2.1 系统功能需求图主要实现功能如图2.1所示,该图详细显示了系统需求功能,总结如下:(1)当Linux发布新版本时,或者内核更新了新补丁,开发者通过调用LKP测试框架,依照不同的测试用例,对于新更新的内容生成不同的测试报告,并将数据存储在服务器上。(2)由于生成大量的测试结果文件夹,并不方便开发者进行比较、总结内核错误的类型,所以网页端调用搭建LKP测试框架的服务器上的数据,对其进行数据处理,并可视化的显现在网页上。(3)开发者在LKP测试框架上运行测试用例,会生成大量的日志文件,网页端通过解析日志文件,网页端使用表格形式反映tbox的运行状态。并把服务器上已有的tbox的各项信息,详细的显示在网页端,并提供tbox信息的增删改查功能。另外,可以查看到自己运行的tbox状态信息,浏览器缓存第一次选择时的状态,下次登陆时自动展示开发者自己的tbox状态信息。(4)通过在网页端执行bisect命令,可以反映bisect的运行结果,记录bisect的运行状态,下次登陆可以直接观察bisect的运行状态。另外,可以实时监控所有bisect的运行状态。以上功能的实现主要依托于LKP测试框架,由开发者通过运行LKP测试框架产生原始数据,数据存储于相应的服务器上,然后通过后端获取数据,对其解析处理,再传送给前端页面,最后展示在网页端上。LKP-WEB在实现以上功能的同时,考虑到以下难点需要解决:(1)图形的自适应由于在运行LKP测试框架时可能会产生大量的错误和漏洞,而这些漏洞种类繁多,数量巨大,而在数据可视化时,会使用到图例,这样就会挤压图形,使其变形,所以要对图例进行可视化。(2)产生新数据时及时更新问题在对测试报告结果进行提取数据时,需要把最新的数据保存到数据库中,以便之后统计数据时,可以获得最新的数据,而LKP测试框架每天都会产生大量的测试报告,需要及时、准确地统计其数量。(3)统计数据时速度过慢在统计测试报告时,会按时段将各数据存储在相应的数据库中,但是因为会有大量的测试报告生成的邮件,每次统计都需要访问所有的邮件,因此,大大影响了统计时的效率,需要对其进行速度优化。(4)及时更新tbox状态 LKP测试框架在运行tbox测试用例时,会生成大量日志文件,LKP-WEB需要不停的获取tbox的最新日志内容,并把tbox最新的状态反应到网页端上,提取有效的数据,计算其最新状态,来获得即时数据。2.1.2 性能需求分析对于所有的网页项目来说,HTTP请求响应的速度,一直是影响网页端性能的主要原因。随着LKP-WEB功能的增多,性能问题的重要性也会越发显著。HTTP的请求响应也是影响用户体验行的主要原因。另外,由于要不断的从本地服务器获取数据,而本地服务器上存储着大量的原始数据,也会影响请求速度。对于LKP-WEB来说,性能要求主要包括以下几点:(1)HTTP请求速度网页需要获得服务器的数据,就必须建立大量的HTTP请求,通过HTTP连接,向服务器端发送数据和接受数据,而如果同时有大量HTTP请求,就会占用资源,影响性能。所以,必须减少无用的HTTP请求,或者采取预加载,预先加载数据。这样可以有效的提升HTTP请求速度。(2)数据库连接性能不间断的连接数据库,会不停的消耗数据库的性能。LKP-WEB采用Ruby on Rails搭建后端,其拥有丰富的数据库处理API,可以省时高效的进行数据库处理操作。而采用Mongodb数据库,其是非关系型数据库,在使用上有很大的自由度,也能简洁、有效的对数据库进行操作。(3)数据处理性能LKP测试框架运行后生成的大量数据存储在本地服务器上,当需要对其内容进行辨别分析时,难免需要访问所有本地数据,这就会造成访问一个数据时,需要处理多个数据,为了避免这种情况,考虑使用数据库来缓存其第一次处理数据的结果,再次调用时,使用已缓存的数据。(4)本地文件访问速度由于大量的LKP测试框架的有效文件存储在本地服务器上,如果要监测其状态,或者实时更新最新的数据,对于本地文件的不停访问就必不可少。然而服务器上的文件存储过万,如果每次统计时都需要重新读取文件,势必会影响到服务器的性能,可以考虑如果文件没有发生变化,便不对其更新,这样可以大大降低访问文件的数量,降低服务器的性能的消耗。2.2 系统总体架构设计2.2.1 系统设计目标本课题主要实现LKP测试框架的生成结果展现在网页端上,并在网页上实现部分LKP测试框架的功能,是开发者在面对细小问题时,可以方便地使用网页端解决,而不必使用LKP测试框架。在使用LKP-WEB时,LKP-WEB可以有效、快捷、方便的反映LKP上的测试状态和结果。2.2.2 系统总体架构设计整个网页项目采用MVC结构,即模型层、视图层、控制层。用户通过图形层,可以查看网页所拥有的功能,例如:数据可视化、查看tbox等,而在图形层上,也会设置与服务器交互的功能,通过HTTP请求传送到控制层,而控制层则会接受图形层所传送的数据,根据不同的请求,在对数据进行简单的处理后,把数据移交到模型层,经过模型层的处理后,再把最终结果返回到控制层,由控制层把结果传回到图形层。在模型层中,负责数据的处理以及调用,在接受控制层传送的数据后,会把需要存储的数据保存到相应的数据库中,而模型层同时也会对数据库进行更新、删除等操作,并把结果返回。除了对数据库进行操作外,模型层也会调用外部的链接库,使用LKP的功能,并把返回结果保存到模型层中。图2.2 系统结构图如图2.2所示,该图详细显示了本课题的系统总体架构,以及LKP-WEB的数据流向,以及LKP、LKP-WEB 、开发者之间的关系。2.2.3 系统功能模块设计本课题系统功能模块主要包含数据可视化、tbox、bisect。如图2.3所示,该图对LKP-WEB中的功能进行详细划分,并详细地介绍了系统功能模块所包含的功能以及各模块之间的关系。以下将详细介绍各模块的详细功能和结构,总结如下:1. 统计数据的可视化LKP-WEB通过对LKP测试框架生成的存在于服务器端的数据进行处理,对数据进行可视化,它可以显示不同时段的数据,例如:按月、按年等,方便用户对比数据的变化。对于不同设备,其可以自适应大小,增加用户体验,同时可以更新数据来源的命令,并按时更新数据中存储的数据。2. tbox应用该模块可以读取LKP服务器上所有的测试用例,即tbox的所有配置参数,反映在网页端上,让用户了解服务器上已经存在的测试机。同时,对于所有运行在服务器上的tbox,可以监测其运行状态,对其进行实时监控。3. bisect应用在网页端上可以执行bisect命令,更改bisect的参数及配置项,同时可以将其运行状反映在网页上。对于所有用户的bisect的运行状态,也可以实时监测其运行状态,高效地反映在网页上。2.3 系统可行性分析2.3.1 目标可行性该项目基于LKP测试框架进行设计,反映LKP测试框架的结果于网页上,对开发者友好,使开发者可以方便、便捷的使用LKP功能。本项目部署在LKP的测试服务器上,对于开发者来说,可以直接使用功能。由于其依托LKP测试框架,需要LKP的功能支持。网页端实现的功能,多数为开发者的需求功能。2.3.2 技术可行性LKP-WEB主要采用Ruby实现功能,通过Ruby on Rails搭建服务器后端功能,由于LKP底层也是采用Ruby搭建,所以移植性好。数据库方面,使用Mongodb作为存取数据的媒介。Mongodb是一个介于nosql数据库和mysql数据库之间的一个数据存储系统,它没有严格的数据格式,但同时支持复杂查询。网页部分,采用Ruby所提供的.erb.html文件,Rails框架会把这种格式的文件解析成html格式的文件,并渲染到网页。使用这种文件格式的优点是可以在html使用Ruby语言,这样可以方便的进行数据交互。对于定时任务,采用Jenkins服务,搭建在服务器本地,可以定时重复的执行计划的任务。由于开发过程中涉及多种语言,包括:Ruby、html、JavaScript、css、shell等,所以开发难度大、周期较长。2.4 本章小结实现了LKP-WEB的总体设计,提出LKP-WEB的需求功能,对于这些功能的实现,分析其中可能存在的性能问题,并阐述原因,详细介绍LKP-WEB各个模块的设计和内容,最后分析了LKP-WEB的目标,技术栈的难度,并证明了其技术实现的可能性。3 系统详细设计与实现在上一章中对系统进行了需求分析并确立了系统设计的目标,根据设计目标设计系统的总体架构,并对整个系统进行可行性分析,得出系统是可行性的结论。在本章中将对系统进行详细的设计与实现。3.1 LKP测试框架应用3.1.1 开发环境搭建lkp-tests是一个开源工具,允许开发人员以彻底的方式评估他们的修补程序。它集成了80多种流行的行业开源测试套件,并提供一个标准接口来进行安装、执行和结果分析。它可以运行在Debain、Ubuntu14.04、arch Linux、OpenSUSE、Fedora、Centos等。由于工作环境为intel所提供的bee和inn服务器上,而bee和inn都为Ubuntu系统,所以考虑把LKP搭建在Ubuntu上。开发工具使用VIM进行编辑操作,因为LKP是由Ruby实现的,所以预先安装好相应的Ruby版本。3.1.2 测试流程LKP测试框架里拥有及其复杂和丰富的代码量,其中有自己的启动命令lkp,lkp是LKP测试框架的基本启动语法,其下还有run、install、split-job、result、queue等等命令,他们都在LKP的运行过程中,起着重要作用,lkp的命令都集中在其文件下bin目录。Doc是lkp测试的帮助文档,上面会有一些基本的命令操作,以及一些工具的使用方法。Jobs目录下是LKP的配置项目,对于不同的测试对象,job都会有不同的配置环境。Monitor为LKP运行时的一些检测程序,它们从LKP运行时,就会启动,默默地在运行过程中给予lkp帮助,并提供功能检测。图3.1 测试流程图如图3.1所示,可以简单的运行其中一个测试用例。Job文件下有已经配置好的可以测试的种类,其下文件都是yaml格式的文件,里面已经配置好所需要测试的参数,测试时间等等。然后使用split-job命令,把yaml文件分解成多个yaml文件,可以分别对其种的某一项进行操作。在选定后,使用install命令,为这个yaml文件安装其所需要的依赖。安装完成后,再使用run命令运行这个测试。最后它会在根目录下生成一个lkp相关的测试结果的报告,其存在与/lkp/result目录下。3.1.3 测试结果lkp-tests可以用来帮助内核开发人员分析性能。lkp-tests使运行基准测试变得更容易。然后内核开发人员可以使用测试结果来评估其更改对性能的影响。除了运行基准测试之外,lkp-tests还可以同时运行一组显示器来收集各种性能统计数据,以帮助分析性能,确定热点等等。运行基准测试后,将在当前目录中创建一个名为“result”的符号链接,该链接指向当前运行的结果目录。结果目录的内容示例如下所示:图3.2 测试结果图该示例是运行虚拟机ebizzy基准的结果。生成的文件很多,具体取决于各种显示器。.json文件和.json.gz文件是具有解析结果的文件。该matrix.json.gz和stats.json都解析结果的聚集和相关的统计信息。其余的文件是原始结果文件。例如,上面的ebizzy基准测试运行了监视器diskstats、interrupts、meminfo、slabinfo、proc-stat、proc-vmstat、softirqs和vmstat。没有.json或.json.gz的文件是相关监视器的原始数据,相应的.json或.json.gz是解析结果。该matrix.json.gz和stats.json都是解析结果的聚集和相关的统计信息。3.2 LKP-WEB后端部署3.2.1 开发环境搭建1. Rails部署Rails框架是基于Ruby语言开发的WEB开发框架,不同于传统的WEB开发框架,其具有自己独特的功能特点。Rails自创的Active Record数据存储模式,使在操作数据库时,拥有极高的性能和处理速度。安装最新版Ruby后,利用Ruby的gem安装工具,可以安装Rails框架,同时需要安装Rails的包安装工具bundle,它具有数量巨大的Rails开发库,在Rails中配置依赖包后,通过bundle命令可以安装所有的依赖。2. 数据库部署数据库方面,使用Mongodb作为该项目的主要数据库。因为存储数据的种类的不确定性,对于数据之间的关联要求并不高,所以采用非关系型数据库Mongodb。与传统的数据库不同,其采用json格式存储数据,是WEB开发中传输常用的数据类型,可以有效地提高数据的通用性。在Linux下,安装Mongodb十分方便,可以使用命令直接安装。之后使用mongo命令进入数据库操作界面,对数据进行操作处理。Rails支持三种开发模式,即测试(test)、产品(production)和开发(development)。针对不同的使用场景,可以使用不同的数据库。3.2.2 测试结果统计1. 获得统计数据当用户需要获得过去一段时间内,某种内核错误的数量时,就需要统计服务器上已经存储在数据库中的数据。如图3.3所示,为获得统计数据的流程图。当接受到前端时间参数后,首先解析其时间格式,判断所需要的时间段。这里提供了按月、按年和按季度查询内核错误数量。这些数据每隔一段时间会被更新到数据库中。由于统计数据是以月份为区别存储在数据中,所以当接收到的日期不是月份时,按照格式把其变为月份,再从数据库中提取数据。从数据库中提取到数据后,因为时区问题,需要统计前一天的数据。然后把这些数据以时间为分存储到变量中,格式化数据,最后以json格式返回。2. 更新数据由于统计数据是从数据库中获得,而数据库中的数据是由统计数据的脚本执行统计命令后,把每天的数据存储于数据库图3.3 获得统计数据图中,这样就能保持数据库中数据的不断更新。如图3.4所示,借助Jenkins的定时服务可以实现不间断的定时更新数据到数据库。当接收到更新数据的指令时,判断其更新类别,可以是按时间更新,也可以是按种类更新(lkp,kbuild)。确定种类后,便可以通过更新脚本,来获得需要更新的邮件路径。为了避免重复的工作,对邮件进行统计前,先判断邮件内容是否有变化,使用Linux命令sha1sum获得文件的唯一校验码,与其之前存储在数据库中的校验码进行比对,如果相等,那么直接跳过下面的更新步骤,这样可以节省大量的时间。然后对这些邮件进行重新统计,利用正则表达式匹配其中的关键数据,例如:发件人、收件人、邮件主题、commit等等,对于提取出的数据,根据逻辑判断其有效性,然后判断其所属内核错误种类,最后生成结果并把它存储到数据库中。图3.4 更新数据图3. 数据库数据库中主要存储统计脚本运行后的数据结果,还有执行统计脚本的命令。在命令存储表中,type表示图表的种类,包括lkp和kbuild。scope表示内部还是外部错误。json_output存储着统计脚本运行后所得出的结果,date记录着统计的时间段,sha1sum为记录文件的唯一标识符。下图3.5详细表示了数据库各项的结构关系。图3.5 数据库图3.2.3 tbox实现1. 获取tbox信息在LKP测试框架中存在着大量的测试机(test box),其中记录着所需机器的参数信息,例如cpu、内存等,方便开发者使用不同的主机测试bug。如图3.6所示,LKP测试框架下的hosts目录存储着所有已经配置到的测试机,所以,当向服务器发送获取tbox信息时,需要读取hosts文件夹下的所有文件信息,再根据要求的操作,更新、修改或者过滤得到的测试机信息,把其中的参数格式化为键值对的Hash形式,可以方便快捷的进行数值比较、值替换等。因为可以获取tbox的信息,使用户在使用LKP测试框架前,可以了解所有的开发测试机,方便用户对于不同环境下,内核的测试需求。图3.6 获取tbox信息2. 获取tbox状态开发者在服务器上运行LKP测试框架后,有时需要一段时间才能修复问题。然而在运行过程中,开发者需要知道测试状态,以便应对不同状态,所以需要获取tbox的测试运行状态。如图3.7所示,通过LKP测试框架运行时所产生的日志文件,可以准确地定位到tbox的运行状态。在获得tbox的名称后,对服务器上日志文件所在的目录进行搜索,得到对应的tbox日志文件,为了获取最新的tbox信息,读取其最后1000行,对其进行格式化、去重,删除无效数据,最后得到格式化后的Hash数据。在这个过程中,对其状态进行判断,例如:运行、空闲等,为其分配不同的颜色,以颜色代表tbox的运行状态或运行级别,可以方便、有效地展示tbox状态。图3.7 获取tbox状态3.2.4 bisect实现1. 运行bisect在LKP测试框架中bisect命令一直时其中比较重要的之一,然而因为其复杂的参数,以及配置选项,导致其不容易掌握。为了提高其使用性,简化其操作,为其提供使用说明,都可以提高bisect的使用率。如图3.8所示,当接收到用户运行bisect命令时,提供其必要的参数和配置选项,方便用户理解和使用bisect的功能,然后,将其所选参数对应的详细选项加入到bisect命令中,调用底层的lkp bisect命令,实现bisect在LKP测试框架中运行,将其结果返回到服务器中,最后以json格式返回。图3.8 运行bisect2. 获取个人bisect与tbox类似,bisect命令在运行时,也会产生日志文件,并且运行时,需要一定时间,LKP-WEB不仅提供了所有bisect的运行状态,对其重要参数进行监测管理,而且可以查看自己运行的bisect。而对于开发者来说,只需要定位、观察自己所运行的bisect命令即可。如图3.9所示,为获取个人bisect的过程。用户运行bisect命令时,所产生的日志文件名称被存储在前端页面,当收到日志文件名称时,服务器查询日志文件,把其对应的文件信息返回给服务器,在对其进行格式化、过滤等数据处理后,返回给前端页面,前端页面再对其展示。图 3.9 获取个人bisect3.3 LKP-WEB 前端实现网页部分,采用Ruby所提供的.erb.html文件,Rails框架会把这种格式的文件解析成html格式的文件,并渲染到网页。使用这种文件格式的优点,是可以在html使用Ruby语言,这样可以方便的进行数据交互。页面交互使用JavaScript和Css。3.3.1 统计数据获取图3.10 统计数据图由于要进行LKP的结果分析,对大量数据的可视化处理,考虑使用Chart.js。Chart.js 是一个基于 HTML5 canvas 的响应式、灵活的、轻量化的图表库。库中提供了数量众多的图表类型,每种类型都带有大量的API供开发者使用。如果这些还不够,你还可以创造自己的图表类型。Chart.js 体积非常小,所有图表类型代码一共只有11 kb,并做了gzip压缩处理,另外该库是封装模块化的,可以仅仅使用自己需要的图表类型,从而进一步节省了空间。如图3.10所示,为已完成的统计数据示意图。图表一般会带有图例,而canvas类的图表插件,不会对图例进行自适应。由于内核错误本身数量和中类的不确定性,就会导致柱状图在显示的时候,图例的大小和数量也不能确定,所以,需要对图例进行可视化处理。根据图表的性质,如果加高图表的高度设计了一套图例自适应的算法。首先,根据所要显示的数据的横轴数量判断,决定图表的高度。然后计算图例的数量和最大图例的尺寸,当图例的数量或者最大尺寸到达一定值时,图表根据横轴数量变化,如果达到临界值,使宽度根据图例数量和尺寸的一定比例变化。如图3.11所示,为图例自适应流程图。图3.11 图例自适应图表可以根据所选择的日期来显示不通过时间段的数据,也可以按照不同年月,还可以分季度展示,考虑到比较数据的多样性。这里提供了很多不同方式的数据展示,来比较区间内不同数据的关系。通过点击select date按钮可以弹出一个日期选择框,这里使用bootstrap的modal中的show方法,当界面出现时,不能选中界面的其他地方。如图3.12所示。图3.12 选择时段图除此之外,网页端也提供更新获取数据的命令功能,可以修改获得数据的脚本命令,对于kbuild和LKP的数据来源,使用不同的统计脚本统计数据结果,更新数据来源,如图3.13所示。图3.13 更新统计数据命令可以看到,这里用的统计脚本是,kbuild-bug-statges和runtime-bug-warning。在这里可以随时更新kbuild和LKP的更新脚本的命令,当脚本发生变化时,不用去修改底层代码,只需要通过网页端修改运行脚本的命令。也可以修改执行脚本的命令参数,这样就可以改变原数据,方便在不同时期,观察类型的数据。3.3.2 tbox页面展示LKP测试框架的根目录下hosts文件下,存储着大量的tbox用例,为了方便开发者使用和查看,将其放到网页上,并提高查询、修改和根据参数筛选tbox的功能。也可以为其添加个性标签,方便下次使用时找到。这里提供了多种筛选条件,并且在输入筛选项时,使用jquery的autocomplete对于搜索结果进行自动匹配,使其具有浏览器中的智能匹配功能,不同把筛选项的全称输入方框中,提高了用户的体验性。如图3.14所示,为tbox的详细信息显示图。图3.14 tbox信息除此之外,还要显示所有tbox的运行状态,把它的详细信息显示到网页上。由于信息数量巨大,考虑使用datatable表格插件。其功能完整,具有相当丰富的参数和函数对空间进行定义和控制,能实现各种灵活的配置和功能,拥有优秀的质量、稳定性和性能,2900多套单位测试代码的支持,其主JS库压缩以后只有26K。另外,还提供ajax数据获取,自动分页,支持响应式设计等等。利用datatable的特性,实现表格数据自动更新的功能,不用刷新页面,异步更新表格为最新数据。使用jquery监测datatable的ajax请求,当每次执行ajax请求后,如果成功返回有效数据,更新表格上方的数据更新时间。并且,返回数据后,使用延迟函数,对datatable的数据重新更新,这样同样会触发ajax请求,使得这个过程可以无限循环下去,实现数据的实时更新。使用不同颜色代表不同优先级别,并把其对应的wtmp和serial文件的内容通过超链接显示在表格最后,如图3.15所示。当点击wtmp和serial的detail超链接时,使用bootstrap的显示功能,跳出文件的内容显示界面,通过ajax请求,异步获取服务器上对应的wtmp和serial文件的内容,使用数据懒加载,如果ajax请求未完成,即数据还未传输完毕时,使用加载图标提示,当数据加载完成后,将文件内容显现在网页上,因为需要反映最新的数据,当数据显现在网页上后,使用延迟函数,将文件调到最新内容,使最近的数据呈现在眼前。图3.15 tbox状态图3.16为个人tbox信息展示图,界面与tbox页面类似,但是通过tbox的参数belongs_to划分tbox的所属用户,当tbox没有这项参数时,默认将它们归类为lkp组。并使用localstorage缓存数据,使得下次访问时直接显示上次访问的数据。图3.16 个人tbox信息图3.3.3 bisect页面展示bisect命令是LKP框架下的重要命令之一,将它的功能在网页上实现,可以方便开发者使用,手动选择配置项,如result、stat、base等,不用记忆大量的参数和配置,使运行bisect命令的效率提高。如图3.17所示,这里同样使用jquery的autocomplete函数,对base内容进行智能匹配,因为其内容不便记忆,当点击base时,就会自动弹出所有的base的可选值,在输入数值后,会自动匹配与之相符的匹配值,方便使用者快速选择有效的参数。图3.17 bisect命令当用户使用完bisect命令后,使用localstorage把bisect的文件名存储在网页端,只要不清空浏览器缓存,每次登陆后,都能看到自己运行的bisect命令的状态,不用再去点击查找bisect命令。图3.18 bisect状态如图3.18所示,为所有bisect的状态图。这里,因为bisection页面与my bisection页面非常相似,为了避免代码重复,以及提高代码的重用性,使用Rails中的接口返回相同的界面,利用.erb文件能支持Ruby语言的特点,对于不同接口,返回不同的数据,同时利用js渲染不同功能,实现同一个页面,展现不同数据的功能。这样提高了耦合性,使代码更易维护。其中log_file存储着bisect的状态文件,与tbox页面类似,通过点击超链接,返回ajax请求,便能直接阅读bisect文件的内容,实现网页端访问服务器文件的功能,文件里同样存储着bisect的状态信息。3.4 Jenkins服务和Docker3.4.1 JenkinsJenkins是一个独立的开源自动化服务器,可以用于各种定时任务,减少人工的操作,以自动化的定时任务,高效的执行,如搭建、测试和布置软件。在本项目中,编写Jenkins文件,当LKP-WEB中有新版本发布时,启动Jenkins服务,为LKP-WEB自动搭建服务器环境,使用spec测试代码Ruby的正确性,初始化数据库数据,搭建Docker服务器等。除此之外,还配置了每天运行的Jenkins服务,更新数据库中的统计数据,更新服务器上的tbox信息和bisect信息。如果统计数据的脚本发生变化,需要初始化所有数据库中的数据,也可以启动Jenkins中对于统计数据的初始化的功能,方便快捷的应对数据的变化。图3.19 Jenkins服务如图3.19所示,为LKP-WEB相关的所有Jenkins服务,包含按天、按月和一次性的执行任务。其中带有颜色的圆球,可以代表该任务的执行状态,每个任务的开始时间和已经执行的时间都会展现在Jenkins的dashboard界面上,方便用户使用和分析任务执行状况。3.4.2 DockerDocker是一个开源的容器引擎,与虚拟机的功能类似,但是并不需要虚拟机的繁琐操作和大量的内存消耗,它能在现在所有的Linux机器上运行,具有非常高的延展性,生成一个独立运行的服务器空间,供开发者使用其中的环境。使用Docker搭建LKP-WEB,将最新的LKP-WEB代码,以及所需要的依赖通过Jenkins服务下载下来,将其安装在Docker服务器上,使项目在Docker服务器上运行,服务器上的改变不会影响到Docker中运行的项目,而在Docker中也可以使用服务器上的文件,大大增加了项目的安全性。此外,Docker的镜像可以方便的移植,当需要将LKP-WEB项目搭载到其他服务器上时,只需要移动Docker镜像,不用考虑项目运行所需要安装的依赖和环境,因为在Docker中已经配置好,这样大大提高了项目的可移植性。3.5 本章小结本章中首先介绍了LKP测试框架的搭建和使用,针对LKP测试框架的测试结果,使用Ruby on Rails搭建网页后台,获取服务器数据,再通过网页的页面展示,把处理后获取到的数据展示在WEB上。4 系统测试与验证在上一章中主要介绍了LKP的搭建和LKP-WEB的实现。在本章中,针对上一章的实现代码,对其可能存在的逻辑、语法规范上进行测试,主要是Ruby和JavaScript。另外,对于性能和网页上的部分功能同样进行验证。4.1测试环境在测试时,使用Ruby自带的测试工具spec,它有着独立的测试方法,当项目启动时,一些方法函数,只要有在其收到触发时,才会执行函数的功能,spec可以模仿Rails中函数的执行过程,使其不用接受外界触发,直接运行功能函数,检测其中可能存在的功能、语法、判断等问题,范围包括数据库、控制器和所有函数的问题。在新建Rails项目后,先安装Ruby的依赖库,再执行Rails命令:Rails generate repec:install便可以在项目根目录下生成一个spec文件,在spec文件下就可以编写测试用例,可以对其进行分类,分别判断不同状态下函数的功能问题。4.2测试用例验证4.2.1 代码功能验证编写测试代码主要验证与数据库相关的数据。根据Ruby的语法规则,对数据库的增删改查,进行测试。图4.1 spec运行结果值得一提的是,在spec测试执行时,Rails会自动创建一个测试数据库,供测试函数调用,测试增删改查等操作,当测试执行完毕后,Rails会将这个临时用于测试的数据库永久删掉,不留下任何痕迹,这样就不用再对系统数据库进行测试。测试时,也不会影响到有效的数据。如图4.1所示,一个有38个例子需要测试,0个失败,有3个未执行。只消耗了2.91秒,这说明了spec的执行效率非常高,可以在很短的时间内,执行尽可能多的测试用例,并反映结果。如果执行测试时,遇到错误,也可以方便快捷的定位错误,有效的判断报错点,并更正它。通常,在运行Rails项目之前,都需要执行spec测试,以保证项目的准确无误性。代码安全性测试,也是Rails项目能够上线的根本保证。4.2.2 性能测试该项目使用Jenkins服务实现代码的自动更新和部署,以及部分自动采集数据的功能。Jenkins的性能和执行效率直接影响网页内容的准确性。图4.2 Jenkins每天执行性能图如图4.2所示,可以看出tbox消耗的运行性能最少,一般为几秒,这主要因为tbox所需要收集的信息不多,占用的内存也不高。bisect消耗超过2小时的性能,这主要是读取文件时可能会占用大量内存。占用性能最多的就是data了,由于其需要统计所有数据文件,并且运行测试脚本匹配有效数据,导致其占用资源量非常大。目前采用的是优化其数据逻辑方法,改良判断条件,提高代码的执行效率,来提高它的运行性能。与之相似的是当LKP-WEB项目开始部署时,也是运用Jenkins服务进行部署,当LKP-WEB项目发生变化时,需要对其重新部署,启动Jenkins的部署服务。如图4.3所示,LKP-WEB的部署主要经过unit-test、analysis、deploy三个过程,其中耗时最长的是deploy,这主要因为deploy需要部署Docker的服务器环境,对服务器的依赖和环境进行配置,确保项目能在服务器上运行起来,而Docker中也会将服务器上的文件系统挂载到Docker的虚拟镜像中,更好的模拟服务器环境。图4.3 LKP-WEB项目部署4.2.3 界面功能测试1.图表自适应验证图4.3 自适应侧视图对于图表的自适应问题,由于图例数量的不确定性,极易发生图例数量过多,导致图表变形或者挤压,这极大的影响了用户的体验性和项目的功能性。对图表的自适应功能进行测试,选择图例数量较多的月份,并且选择多个月的数据,其情况具有特殊性,更能准确说明自适应功能是否能够实现。如图4.3所示,选择2017年整年共12月份,其图例数量远远大于50个,且其中图例长度长短不一,具有普遍性。由图可看出,图表并没有发生变形或者挤压,说明图表的自适应功能已经实现。2.tbox筛选功能验证在tbox页面中,提供了tbox的筛选功能,一般的筛选功能只针对某一个条件。但是,这里可以对多个条件同时进行筛选。tbox具有多项不同类型的参数,参数的类型包括整型、字符型、数组等等,由于其类型的多样性,导致在筛选比较参数时,具有一定的困难性。在测试时,选择多个不同属性的条件,验证筛选功能是否实现。图4.4 tbox筛选图针对tbox的nr_cpu和nr_node这2个属性,筛选nr_cpu在4和8之间,而nr_node大于2的tbox,再点击apply之后。结果如图4.4所示,成功筛选除了2个满足条件的tbox,他们分别是lkp-sb02和lkp-sb02-prt。图4.5 tbox标签添加图3.tbox标签功能验证tbox标签功能是为了提供用户个性化的分类功能,虽然tbox本身拥有相当多的属性,但是,这些属性皆为功能性属性,具有配置的功能。现在,为tbox提供一个可以为它分类的功能。如图4.5所示,在点击tbox对应的edit按钮后,弹出tbox的修改界面,为其添加“0day”标签,结果如图4.6所示。在tbox的lable选项里,已经有了“0day”标签,这说明tbox的标签添加成功。图4.6 tbox标签图4.serial和wtmp功能验证tbox的信息中,除了必要的状态信息,最后2栏为serial和wtmp信息,这是tbox对应的在服务器上的文件信息。为了提供用户准确的信息,增加了可以查看serial和wtmp文件内容,方便用户详细查看数据。图4.7 serial信息图如图4.7所示,在点击对应tbox的serial信息后,成功显示serial信息。其中展示了serial文件的路径位置和最新的更新时间,为了方便开发者观察tbox的状态,默认显示了tbox的最新数据,即下拉框默认为最底部,这样便可以显示serial的最新信息。4.3验证代码风格4.3.1 Ruby代码规范由于本项目属于intel公司,所以对代码风格要求较高。对于代码的可读性,风格都有严格规定。使用rubocop检测Ruby代码,主要为一些语法风格,例如:变量的命名、变量未定义、条件的简写等。当需要传入多个参数时,每个参数逗号后空一格,例如函数的参数,引用函数时参数的位置。另外,在Ruby中,如果只有单个参数,可以省略括号,改用空格替代。在Ruby中,使用变量名加冒号的形式,可以代替Hash的表达方式。如图4.8所示,为大括号两侧空格。
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!