目录
目录README.md

基于龙蜥操作系统的应用性能监测与预测软件

1. 赛题背景

业界分析显示,数据中心的资源利用率普遍较低。为降低成本和减少资源浪费,采取了各种共置策略,即在同一服务器上运行多个应用程序。然而,这种做法引发了资源争夺问题,尤其是在资源竞争激烈时,可能会严重影响应用性能,并使得无法保证应用的服务质量。此外,出于隐私和资源限制等因素,生产环境中在线应用的性能指标往往难以获得。因此,一个高效且精准的应用性能监测与预测软件对于应用调度至关重要。参赛者需基于龙蜥操作系统开发一款能够通过低级平台指标预测高级应用指标的应用性能预测软件。

2. 赛题要求

  1. 软件需稳定运行于龙蜥操作系统上,并充分利用该操作系统的特性,提供一个安全、可靠、可扩展的应用性能监测与预测解决方案。
  2. 技术和性能指标要求如下: 技术指标:软件需具备良好的可扩展性,能够适应不同类型的应用负载;尽量减少对应用程序的侵入性;具有高鲁棒性,在多种环境下都能准确预测应用性能。 性能指标:尽可能地提高预测准确率,至少不低于75%;提高预测速度,达到秒级预测;在保证预测准确率的前提下,减少监测的指标类型,从而减少软件的资源消耗和运行成本;实现对操作系统和应用程序数据的全局监测和实时响应,可持续地进行预测。

3.项目介绍

在本次比赛中,我们团队开发了两款性能监测软件来实现性能监测与预测(仓库代码中分为内核模块和eBPF目录)。首先,通过学习使用内核模块方案实现的开源诊断工具diagnose-tools,并且在这个项目里实现了深度的系统性能监测,能够在内核空间高效地收集和分析系统性能数据,提供精准的性能指标和自定义监测功能。其次,我们利用 eBPF 技术开发了一个动态和高效的性能监测工具,并且通过promethues和Granfa这两款可视化和异常报警工具来实时监测应用的各项指标,并且给出一个指标预测方案,确保用户能及时发现异常情况并且给出优化方案。

结合这两种技术的优势,项目在内核模块中实现了高效的数据采集和处理逻辑,避免了频繁的用户空间与内核空间切换,从而减少了监测对系统性能的影响。同时,通过 eBPF,项目可以实时捕捉多种内核事件,并将这些事件与内核模块的数据进行整合,提供全面的性能分析。项目设计了灵活的自定义功能,用户可以根据具体需求调整监测策略和数据处理方式。内核模块和 eBPF 的结合使得该项目不仅能够满足常规的性能监测需求,还支持高度定制化的监测解决方案,适应不同的应用场景和业务需求。

本项目所监测的应用指标比较全面,包括了CPU、网络、KVM、等许多方面,可以对具体应用进行非常细粒度和全面的性能监测,并且再通过可视化和异常报警功能,可以准确地定位到应用的异常点。

4.仓库目录结构:

.
├── 操作系统开源创新大赛项目功能说明书_小蜜蜂.docx
├── 操作系统开源创新大赛项目功能说明书_小蜜蜂.pdf
├── 操作系统开源创新大赛ppt_小蜜蜂.pptx
├── 小蜜蜂团队功能演示视频.mp4
├── 内核模块                          #内核模块实现方式
│   ├── 项目功能详细说明.md
│   ├── diagnose-tools
│   ├── docs                         #功能说明、测试文档
│   ├── images
│   ├── README.md
│   ├── test                         #测试代码及文档
│   ├── slowpast恶意攻击监测及诊断.mp4
│   └── 高负载高并发场景下问题进程诊断案例演示视频.mp4
│ 
├── eBPF                              #eBPF实现方式      
│     ├── eBPF_Visualization          #可视化模块   
│     │     │── README.md
│     │     ├── eBPF_prometheus       
│     ├── prediction                    #预测部分
│     ├── eBPF_Supermarket    
│     │     ├── CPU_Subsystem          #监测CPU模块
│     │     ├── eBPF_data_collector    #数据导出模块
│     │     ├── kvm_watcher            #监测KVM模块
│     │     ├──eBPF_Performance_Analysis      #eBPF性能分析
│     │     ├── lib
│     │     └── Network_Subsystem      #监测网络模块
│     ├── lib 

5.项目成果

1.在内核模块实现中,我们新增了如下7个工具。

工具名称 功能描述
tcp-states 监控并输出系统中TCP连接的具体信息
udp-states 监控并输出系统中UDP连接具体信息
sched-image 监控并输出系统中长时间不被调度的进程相关信息
keytime-image 监控进程的关键信息,例如进程的上下CPU、创建子进程、执行exec等过程
resource-image 监控并输出进程对系统资源实时的使用情况
syscall-image 监控进程的系统调用信息,包括系统调用号,系统调用次数,系统调用耗时
migrate-image 监控并输出进程的核间迁移过程中的具体信息

2.在eBPF实现方案中,我们开发了对如下三个Linux子系统的性能检测:

子系统名称 介绍
CPU子系统 对CPU子系统的重要指标进行采集并进行可视化和预警配置
网络子系统 对网络子系统的重要指标进行采集并进行可视化和预警配置
虚拟化KVM子系统 对 VM的重要指标进行采集并进行可视化和预警配置

3.在实现好以上功能后,本团队对每个功能进行了详细的测试和优化,具体测试过程和结果以及优化过程请查阅《项目功能说明书》和仓库中的项目文档。

4.本项目所开发的功能可以解决龙蜥操作系统上的一些应用监测需求,如:使用kvm检测工具来监测龙蜥操作系统上的《Boxes》这个应用软件的性能。并且网络监测工具和CPU监测工具可以来监测龙蜥操作系统上的网络和CPU的详细情况。内核模块中开发的功能所涉及的应用场景在仓库中内核模块目录下有详细的介绍和说明。

6 参考与引用

本项目在谢宝友老师团队的开源工具diagnose-tools的基础上进行性能优化、二次开发与应用;该开源工具地址:diagnose-tools

本项目在搭建真实高负载环境时,采用了开源电商平台Fecshop项目,该开源项目地址:Fecshop

本项目在可视化部分使用了开源工具Promethues和Granfa

致谢

感谢团队成员(徐晗博、张铭轩、杨月顺)之间的相互鼓励和相互支持

感谢指导老师(陈莉君教授)不辞劳苦对本项目的指导

感谢项目老师(诗雁老师)不辞劳苦对本项目的悉心指点

关于
286.6 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号