【性能调优】真实体验 “系统调用是重开销”

news2024/11/24 22:49:31

实践背景是开发云原生背景下的指纹识别插件,主要针对的是镜像、容器等云时代的软件资产。

信息安全语境下的 指纹识别 指的是定位软件的特征,如名称、版本号、开源许可证等,就像指纹是人的独特生物凭证,这些特征是软件的独特电子凭证。除了识别软件外,指纹识别还用于上报资产,即辅助探针发现镜像中的软件资产,包括组件、中间件、系统工具、系统库、CMS(Content Management System)等。

一、调优背景 🂠

Trivy 是一个优秀的用于扫描镜像漏洞的开源工具,但商业场景下需要定制化开发,因此自研指纹识别工具。
根据知乎文章的介绍,Trivy 有以下特点:

因此自研产品应当对标 Trivy 且有一定改进,但在首次 Benchmark 测试时,针对 4.9G 大小的镜像,自研产品扫描用时 53 秒,且占用了一个 CPU 核。这个时间和硬件开销和 Trivy 相比是不可接受的,因此分析 CPU 用时信息。具体如何分析,见之前的博客 单元测试、基准测试和性能分析 。

二、分析 CPU Profile ⚛︎

分析 cpu.prof 后发现系统调用占了 38 秒,往上查找,发现 IsExist() 是主要的时间消耗对象,其底层实现是 Stat() 系统调用 。IsExist() 用于判断文件是否存在,但在遍历镜像的文件系统时,各个检测器都要对所有的文件进行检测(Detect 函数),而 Detect 函数中都有一个 IsExist() 判断,这将造成海量的系统调用,使检测速度大幅下降。

解决策略:

  1. 根据计算机领域的万能准则,以空间换时间,只考虑遍历一次文件系统,记录下有用信息到 map 中,后续使用时从 map 中取出。
  2. 后续详细阅读代码,发现 IsExist() 函数逻辑根本没必要,因为在遍历文件系统时不可能遍历到不存在的文件。

因此修改代码逻辑后,系统调用大大减少,整体扫描时间下降至 14 秒。

三、为什么系统调用是重开销 💸(待详写)

所谓的重开销指的是消耗 CPU 资源,CPU 资源较为宝贵,因此需要合理分配。此外,从用户态陷入内核态时,还有上下文切换和现场保护,这部分也需要消耗较多资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/599422.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

六一儿童节 全网最全的微服务+Outh2套餐,你确定不来试一试?(入门到精通,附源码)满足你的味蕾需要(二)

咱们废话不多说,直接开干!!! 目录 一、项目目录 二、Token 三、授权服务器oauth 1.pom 2.application 3.OauthApp启动类 4.DiyUserDetails 5.MyUserDetailService 6.KeyPairController 7.TokenConfig 8.WebSecurityCo…

LNMP架构

LNMP架构 一、LNMP架构原理二、LNMP部署1、安装 Nginx 服务1.安装依赖包2.创建运行用户3.编译安装4.优化路径5.添加 Nginx 系统服务 2、安装 MySQL 服务1.安装Mysql环境依赖包2.创建运行用户3.编译安装4.修改mysql 配置文件5.更改mysql安装目录和配置文件的属主属组6.设置路径环…

电子模块|压力传感器模块HX711---硬件介绍

电子模块|压力传感器模块HX711---硬件介绍与C51&&STM32驱动 实物照片模块简介模块特点 硬件模拟输入供电电源时钟选择串口通讯复位和断电HX711相关部分的 PCB 设计 实物照片 模块简介 HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。与同类型其它芯片相比…

后端接口调式工具

后端接口调式工具 目录概述需求: 设计思路实现思路分析1.Postman2.Swagger 文档测试工具3.Sniff 文档测试工具4.APIpost 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardne…

【SCADA】启动KingSCADA运行系统,提示加载报警库服务失败?

大家好,我是雷工! 今天启动KingSCADA时,发现无法运行,提示“加载 报警库服务 失败”,现将问题排查及解决问题的过程记录如下。 一、问题描述: 1、提示如下图: 2、信息窗口提示: …

性能测试从零开始落地实施全过程指南之性能测试计划怎么写?

目录 前言 一、测试背景 二、测试目的 三、测试范围 四、术语约定 五、环境说明 六、需求分析 七、测试策略 八、准备工作 九、组织架构 十、风险分析 十一、交付清单 十二、阶段进度 前言 最近有些同学找我咨询关于性能测试计划相关的问题,原因是他们…

《C++ list的模拟实现》

本文主要介绍list容器的模拟实现 文章目录 1、迭代器正向迭代器类反向迭代器类 2、push_back尾插函数3、 push_front头插函数4、 insert插入函数5、erase删除函数6、pop_front函数7、pop_back函数8、 构造函数9、 拷贝构造函数10、 list赋值重载函数11、clear12、 析构函数程序…

AI注册流程

1、首先需要有一个OpenAI账号,如果有方法的,就可以自己先注册一下。如果没有方法的,还有一个付费版本的可以备选,亲测可用。 2、注册建议使用谷歌账号关联登录,最方便。微软账号太慢了,也可以使用。注册使用…

SAP-MM库存进销存报表

1、总览: 事务代码MB5B是查询选择期间之内的收发存报表; 其中,收、发为汇总选择期间的收、发信息,存为选择期间的期初、期末库存数据;我们也可以用该报表查询历史上某一天的库存,但注意有一些限制条件。 …

【Selenium】提高测试爬虫效率:Selenium与多线程的完美结合

前言 使用Selenium 创建多个浏览器,这在自动化操作中非常常见。 而在Python中,使用 Selenium threading 或 Selenium ThreadPoolExecutor 都是很好的实现方法。 应用场景: 创建多个浏览器用于测试或者数据采集;使用Selenium…

Region Proposal Network (RPN) 架构详解

动动发财的小手,点个赞吧! 简介 如果您正在阅读这篇文章[1],那么我假设您一定听说过用于目标检测的 RCNN 系列,如果是的话,那么您一定遇到过 RPN,即区域提议网络。如果您不了解 RCNN 系列,那么我…

Github copilot的详细介绍,竞品比对分析,效率使用方法总结。

Copilot介绍,与竞品对比 Copilot是GitHub和OpenAI合作开发的一款人工智能代码助手,它可以根据用户输入的注释和代码片段,自动生成高质量的代码。Copilot使用了OpenAI的GPT模型,可以学习和理解大量的代码库和文档,从而…

javascript基础十三:说说 typeof 与 instanceof 区别?

一、typeof typeof 操作符返回一个字符串,表示未经计算的操作数的类型 举个粟子: typeof 1 number typeof 2 string typeof undefined undefined typeof false boolean typeof Symbol() symbol typeof null object typeof [] object typeof {} object…

TCP传输性能的关键因素除了流量控制,还有这些!

TCP网络通信基本原理 文章目录 TCP网络通信基本原理TCP效率(滑动窗口)流量控制拥塞控制延时应答捎带应答 面向字节流异常情况分析总结UDP/TCP特性与不同应用场景 TCP效率(滑动窗口) 滑动窗口:在TCP通信协议下&#xf…

【UnityShader入门精要】【总结记录】【第二章-2】

☀️博客主页:CSDN博客主页 💨本文由 萌萌的小木屋 原创,首发于 CSDN💢 🔥学习专栏推荐:面试汇总 ❗️游戏框架专栏推荐:游戏实用框架专栏 ⛅️点赞 👍 收藏 ⭐留言 📝&a…

1901-2021年1km分辨率逐月最高气温栅格数据(全国/分省)

气温数据是我们最常用的气象指标之一,之前我们给大家分享过来源于国家青藏高原科学数据中心提供的1901-2021年1km分辨率逐月平均气温栅格数据(可查看之前的文章获悉详情)! 本次我们分享的同样是来自国家青藏高原科学数据中心的高…

【探索】在 JavaScript 中使用 C 程序

JavaScript 是个灵活的脚本语言,能方便的处理业务逻辑。当需要传输通信时,我们大多选择 JSON 或 XML 格式。 但在数据长度非常苛刻的情况下,文本协议的效率就非常低了,这时不得不使用二进制格式。 去年的今天,在折腾…

Redis中的整数集合(IntSet)

Redis节省内存的两个优秀设计思想:一个是使用连续的内存空间,避免内存碎片开销;二个是针对不同长度的数据,采用不同大小的元数据,以避免使用统一大小的元数据,造成内存空间的浪费。IntSet便具备以上两个设计…

160套小程序源码

源码列表如下: AppleMusic (知乎日报) 微信小程序 d artand 今日更新求职招聘类 医药网 口碑外卖点餐 城市天气 外卖小程序 定位天气 家居在线 微信小程序-大好商城,wechat-weapp 微信小程序的掘金信息流 微信跳一跳小游戏源码 微票源码-demo 急救应急处…

MyBatis- plus

实战总结 1.批量插入性能 1.批量插入性能差的原因 使用saveBatch()方法时, MySQL JDBC驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入&a…