当前位置: 首页 > 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 命令添加和删除主键显示索引信息 约束非空约束:唯一约束:主键约束&…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

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

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

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...