当前位置: 首页 > news >正文

python 画多盘的写放大曲线方法

在服务器测试中我们经常会遇见客户要求画出每个SSD的WAF曲线,也就是写放大,通常的做法就是我们每隔10分钟记录一下每个SSD的host写入量和nand写入量,下面我们介绍一下python处理多盘的WAF的做法
如图所示 假设这是一个记录多盘的写入量信息的表格
在这里插入图片描述我们最终的目的是生成对应的每个SSD的WAF的图品,那么该如何简单快速的实现呢?
第一步,就是把第一列的disk分组。这里让pandan帮忙处理

import pandas as pd
from matplotlib import pyplot as plt# 读取CSV文件
df = pd.read_excel('waaaf.xls')
# 按照 disk 列分组
grouped = df.groupby('disk')# 创建一个字典来存储每个 disk 的 WAF 值
waf_dict = {}# 计算每个 disk 的 WAF 值
for name, group in grouped:waf_values = []print('----------', name)

结果如下:

C:\Users\13737\AppData\Local\Programs\Python\Python312\python.exe D:/python_pro/chap1/waf.py
---------- nvme0
---------- nvme1
---------- nvme2进程已结束,退出代码为 0

第二步,就是把每个disk的WAF计算出来,并且存放在字典里

import pandas as pd
from matplotlib import pyplot as plt# 读取CSV文件
df = pd.read_excel('waaaf.xls')
# 按照 disk 列分组
grouped = df.groupby('disk')# 创建一个字典来存储每个 disk 的 WAF 值
waf_dict = {}# 计算每个 disk 的 WAF 值
for name, group in grouped:waf_values = []# 按照索引计算相邻行的 WAFfor i in range(1, len(group)):# 当前行和前一行的 nand 和 host 值nand_diff = group.iloc[i]['nand'] - group.iloc[i - 1]['nand']host_diff = group.iloc[i]['host'] - group.iloc[i - 1]['host']# 计算 WAFif host_diff != 0:waf = nand_diff / host_diffformatted_waf = format(waf, '.2f')waf_values.append(formatted_waf)# 将 WAF 值存储到字典中waf_dict[name] = waf_values# 打印 WAF 值
for disk, wafs in waf_dict.items():print(f"Disk: {disk}")print(f"WAF Values: {wafs}")

运行结果如下:

Disk: nvme0
WAF Values: ['1.11', '0.45', '1.14', '2.67', '1.00']
Disk: nvme1
WAF Values: ['0.50', '0.55', '1.44', '1.78', '9.50']
Disk: nvme2
WAF Values: ['0.60', '1.75', '0.85', '2.00', '1.87']

第三步,就是把这个字典生成对应的每个SSD的CSV文件

import pandas as pd
from matplotlib import pyplot as plt# 读取CSV文件
df = pd.read_excel('waaaf.xls')
# 按照 disk 列分组
grouped = df.groupby('disk')# 创建一个字典来存储每个 disk 的 WAF 值
waf_dict = {}# 计算每个 disk 的 WAF 值
for name, group in grouped:waf_values = []# 按照索引计算相邻行的 WAFfor i in range(1, len(group)):# 当前行和前一行的 nand 和 host 值nand_diff = group.iloc[i]['nand'] - group.iloc[i - 1]['nand']host_diff = group.iloc[i]['host'] - group.iloc[i - 1]['host']# 计算 WAFif host_diff != 0:waf = nand_diff / host_diffformatted_waf = format(waf, '.2f')waf_values.append(formatted_waf)# 将 WAF 值存储到字典中waf_dict[name] = waf_values# 打印 WAF 值
for disk, wafs in waf_dict.items():print(f"Disk: {disk}")print(f"WAF Values: {wafs}")for disk_waf in wafs:print(disk_waf)with open(f'{disk}.csv', 'a') as file:file.write(f'{str(disk_waf)}\n')

运行会生成对应的每个SSD的CSV文件
在这里插入图片描述第四步把每个对应CSV表格转化成图片就可以啦

import pandas as pd
from matplotlib import pyplot as plt# 读取CSV文件
df = pd.read_excel('waaaf.xls')
# 按照 disk 列分组
grouped = df.groupby('disk')# 创建一个字典来存储每个 disk 的 WAF 值
waf_dict = {}# 计算每个 disk 的 WAF 值
for name, group in grouped:waf_values = []# 按照索引计算相邻行的 WAFfor i in range(1, len(group)):# 当前行和前一行的 nand 和 host 值nand_diff = group.iloc[i]['nand'] - group.iloc[i - 1]['nand']host_diff = group.iloc[i]['host'] - group.iloc[i - 1]['host']# 计算 WAFif host_diff != 0:waf = nand_diff / host_diffformatted_waf = format(waf, '.2f')waf_values.append(formatted_waf)# 将 WAF 值存储到字典中waf_dict[name] = waf_values# 打印 WAF 值
for disk, wafs in waf_dict.items():print(f"Disk: {disk}")print(f"WAF Values: {wafs}")for disk_waf in wafs:print(disk_waf)with open(f'{disk}.csv', 'a') as file:file.write(f'{str(disk_waf)}\n')
for disk in waf_dict.keys():data = pd.read_csv(f"{disk}.csv")fig = plt.figure(figsize=(10, 6), dpi=300)y1 = data.iloc[:, 0]plt.xlabel(u'time (10min)', size=10)plt.ylabel("WAF")plt.plot(y1, label='WAF')plt.title(f"{disk}_waf")plt.grid(alpha=0.4)plt.xlim(xmin=0)plt.ylim(ymin=0)plt.savefig(str(disk) + ".png")

图片如下:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

相关文章:

python 画多盘的写放大曲线方法

在服务器测试中我们经常会遇见客户要求画出每个SSD的WAF曲线,也就是写放大,通常的做法就是我们每隔10分钟记录一下每个SSD的host写入量和nand写入量,下面我们介绍一下python处理多盘的WAF的做法 如图所示 假设这是一个记录多盘的写入量信息的…...

计算机网络TCP/UDP知识点

这是一些在学习过程中关于计算机网络八股文的一些知识点记录: TCP/UDP TCP怎么保证可靠性 1.序列号,确认应答,超时重传 数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号…...

JavaScript 文档元素获取

目录 通过id获取文档元素 任务描述 相关知识 什么是DOM 文档元素 节点树 通过id获取文档元素 编程要求 通过类名获取文档元素 任务描述 相关知识 通过类名获取文档元素 编程要求 通过标签名获取文档元素 任务描述 相关知识 通过标签的名字获取文档元素 获取标…...

docker pull实现断点续传

问题背景 在使用Docker拉取DockerHub的镜像时,经常会出现网络不稳定的问题,这就导致拉取到一半的镜像会重新拉取,浪费时间。例如下面这种情况: 第二次拉取 这是一个网络中断的场景,第二次重新拉取的时候,同…...

无字母数字webshell之命令执行

源码 题目限制: webshell长度不超过35位除了不包含字母数字,还不能包含$和_ 这里使用php5来解决 可以围绕以下两点展开: shell下可以利用.来执行任意脚本Linux文件名支持用glob通配符代替 .或者叫period,它的作用和source一样…...

华为OD笔试

机试总分400。三道题目。100+100+200 华为od考试时间为150分钟,共有三道编程题,分数分别为100、100和200。如果你是目标院校(查看目标院校请戳)的话,及格线是160分,非目标院校则不确…...

HAProxy理论+实验

目录 一、基于cookie的会话保持 1、配置选项 2、配置示例 3、验证cookie信息 二、IP透传 1、layer4 与 layer7 (1)四层:IPPORT转发 (2)七层:协议内容交换 三、haproxy的ACL应用 1、ACL配置选项 (1&#xf…...

Spring Boot ⽇志

1. ⽇志概述 为什么要学习⽇志 ⽇志对我们来说并不陌⽣, 从JavaSE部分, 我们就在使⽤ System.out.print 来打印⽇志了. 通过打 印⽇志来发现和定位问题, 或者根据⽇志来分析程序的运⾏过程. 在Spring的学习中, 也经常根据控制台 的⽇志来分析和定位问题. 随着项⽬的复杂…...

最详细!教你学习haproxy七层代理

一、工作原理 (1)包括 监听端口:HAProxy 会在指定的端口上监听客户端的请求。 例如,它可以监听常见的 HTTP 和 HTTPS 端口,等待客户端连接。请求接收:当客户端发起请求时,HAProxy 接收到请求。…...

ElementUI 事件回调函数传参技巧与自定义参数应用

ElementUI 事件回调函数传参技巧与自定义参数应用 在使用elementUI时,事件回调函数传递参数是一个常见的需求。根据搜索结果,我们可以了解到两种主要的方法来传递自定义参数: 使用回调函数:当elementUI组件触发事件时&#xff0c…...

优化Next的webpack配置

众所周知,next的webpack打包实际上分成了两个部分,一个是服务器端、一个是客户端,我们这里的配置主要是针对客户端的配置。 目的在于降低_app.js包大小,合理划分基础包、工具包、常用方法包、拆分lodash按需引入效果。 拆分lodas…...

Q-Dir vs 传统文件管理器:为何开发者更偏爱这款神器?

前言 在这个信息爆炸的时代,我们每天都在与海量的文件和文件夹打交道;你是否曾经为了找一个文件而翻遍了整个硬盘?是否因为繁琐的文件夹操作而头疼不已?今天,就让我小江湖带你走进一个全新的世界——Q-Dir,…...

日常疑问小记录

1、在抢票过程中,有些人显示服务器崩溃而另一些人仍能访问,可能是由于以下几个原因: (1)负载均衡:服务器可能采用了负载均衡技术,将用户请求分配到多个服务器上。部分用户可能被引导到正常运行…...

Java Web —— 第四天(HTTP协议,Tomcat)

HTTP-概述 概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则 特点: 1. 基于TCP协议:面向连接,安全 2.基于请求-响应模型的:一次请求对应一次响应 3. HTTP协议是无状态的协议: 对于事务处理没有…...

C++ list的基本使用

目录 1.list简要介绍 2. list的构造 3. list中迭代器的使用 (1). 双向迭代器与随机访问迭代器使用区别 4.判空、获取元素个数 5. list头、尾元素的访问 6. 插入与删除操作 (1). 头插头删,尾插尾删 (2). 插入,删除与清空 (3). 交换 7. list容器迭代…...

云中韧性:Spring Cloud服务调用重试机制深度解析

标题:云中韧性:Spring Cloud服务调用重试机制深度解析 在微服务架构中,服务间的调用可能会因为网络问题、服务不可达、资源竞争等原因失败。Spring Cloud作为微服务架构的主流实现框架,提供了一套完整的服务调用重试机制&#xf…...

83.SAP ABAP从前台找字段所在表的两种方法整理笔记

目录 方法1:F1查看技术信息 F1 技术信息 方法2:ST05开启跟踪 Activate Trace Input and save data Deactivate Trace Display Trace 分析你想要的表 方法1:F1查看技术信息 从前台找一个屏幕字段所在表,一般通过按F1来查找…...

docker为普通用户设置sudo权限

在 Linux 上使用 Docker 命令时,默认情况下需要 sudo 权限。这是因为 Docker 守护进程(Docker daemon)通常运行在 root 用户下,而访问和管理 Docker 守护进程的权限也默认被限制给 root 用户。 然而,为了方便日常使用…...

Nginx + PHP 8.0支持视频上传

在 Ubuntu 20.04 上配置 Nginx PHP 8.0 的架构以支持视频上传,需要从 Nginx 和 PHP 两个方面进行配置,以确保服务器能够处理大文件上传。以下是详细的步骤: 1. Nginx 配置 1.1 增加上传文件大小限制 默认情况下,Nginx 对上传文…...

MySQL基础详解(3)

文章目录 索引普通索引创建索引修改表结构(添加索引)创建表的时候直接指定删除索引的语法 唯一索引创建索引修改表结构创建表的时候直接指定 使用ALTER 命令添加和删除索引使用ALTER 命令添加和删除主键显示索引信息 约束非空约束:唯一约束:主键约束&…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...