rwcheck:为嵌入式设备设计的读写压测工具
我设计的一款读写压测工具,开源在我的github仓库
rwcheck是一个对嵌入式设备进行读写压测的工具
什么是rwcheck
正如其名,rwcheck工具用于读写压测。它是什么工作原理呢?为什么要用rwcheck呢?
rwcheck的初衷是为嵌入式Linux设备提供读写冒烟测试的工具,在大压力的IO测试中,确保存储稳定。rwcheck也被用于读写掉电测试,在读写时掉电,并在上电后对掉电前写入的文件进行检查。
他有以下特点:
- 多种测试模式,覆盖各种尺寸的测试文件
- 读写随机数据,覆盖到各种数据组合
- CRC校验数据,错误即刻退出并保留问题现场
- 支持读写掉电,重启后校验历史数据
- 动态获取系统信息,按存储空间使用比例限制测试总大小
- 支持多线程写,模拟真实使用场景
怎么用rwcheck
下载与编译
git clone https://github.com/gmpy/rwcheck.git rwcheck && make -C rwcheck
使用说明
rwcheck -h可以获取到使用说明
Usage: rwcheck [-h] [-d dir] [-t times] [-b size] [-e size]
[-s size] [-u size] [-p percent] [-i input] [-j jobs]
-h : show this massage and exit
-d # : the diretory to check [default currect path]
-t # : check times
-b # : [up mode] set begin size
-e # : [up mode] set end size
-s # : [same mode] set file size
-u # : set read/write buf size
-p # : set maximum ratio of total flash size to check. Eg. -p 95
-i # : input path of file [default <check_dir>/rwcheck.org]
if file don't existed, create 64K from /dev/urandom
-j # : multiple jobs
size trailing with k|m|g or not
rwcheck work in 3 mode:
1. -s # : files have the same size, keep testing until no enough space
2. -b # :
2. -e # : file size increase by The multiplier of 2, loop
from beginning to ending size until no enough space
3. none : file size is 50% of the free space, keep testing until
the less space is less than 64K
例如:
rwcheck -d /mnt/UDISK -b 128k -p 90 -j 2 -t 10000000
上面命令的含义:
- 在 /mnt/UDISK 目录下进行读写
- UP模式,测试从 128K 文件大小开始,使用默认最大文件大小(16G)
- 测试总大小为总容量的 90%
- 以 2个线程 同时写
- 循环测试 10000000次
1次循环
-t <次数>
可以指定循环测试次数,那么,怎样才是1次循环呢?
每一次循环,包含3个步骤:
- 写:按不同模式要求创建多个文件,循环创建直至空间使用率达到设定的百分比
- 校验:读取每一个文件,校验文件CRC值 (允许最后一个文件CRC校验值错误)
- 删除:删除测试文件
Q:为什么允许最后一个文件CRC校验值错误?
A:因为在随机掉电情况下,最后一个文件写入不完整,会导致校验值不准确,但实际上,这并不是错误
Q:为什么有时候没写任何文件直接跳入到校验环节?
A:当检查到已有文件存在的时候,写环节会跳过,进入到校验环节,以此实现检查上一次执行时创建的文件
随机数据
rwcheck写入的数据是从/dev/urandom
获取的随机数据,确保了测试覆盖到尽可能多的数据组合。但这样也存在个问题,当出现数据校验出错时,并没有原始数据对比分析,怎么办呢?
rwcheck是这么做的:
- 在每一次循环开始之前,从
/dev/urandom
读取一定大小的随机数据到 rwcheck.org - rwcheck.org 作为数据源,从 rwcheck.org 循环读,获取足够数据写入到测试文件
- 一次测试循环后,删除旧的 rwcheck.org 文件,以便下一次循环创建新的随机数据源
由于一旦出错rwcheck会即刻退出以保留现场,因此可以通过对比 rwcheck.org 与出错文件,分析错误情况
测试日志
root# rwcheck -d /mnt/UDISK -t 2 -b 128k -p 85 -j2
rwcheck: do read and write check
version: v0.1.0
build: Compiled in Aug 20 2019 at 02:32:41
date: Mon Aug 19 18:01:21 2019
free/total ddr: 33/53 MB
free/total flash: 62/63 MB
flash filesystem ubifs
set mode to Up Mode
set file begin size to 128 KB
set file end size to 1 GB
set times to 2
set max percent of total space to 85%
set buf size to 512 KB
set check diretory as /mnt/UDISK
set orgin file as /mnt/UDISK/rwcheck.org
set jobs as 2
--- CREATE ---
create : /mnt/UDISK/rwcheck.tmp.0_1 ... OK (64K)
create : /mnt/UDISK/rwcheck.tmp.0_0 ... OK (64K)
create : /mnt/UDISK/rwcheck.tmp.1_1 ... OK (128K)
create : /mnt/UDISK/rwcheck.tmp.1_0 ... OK (128K)
......
create : /mnt/UDISK/rwcheck.tmp.7_0 ... OK (64K)
create : /mnt/UDISK/rwcheck.tmp.7_1 ... OK (64K)
--- CHECK ---
check : /mnt/UDISK/rwcheck.tmp.0_0 ... OK
check : /mnt/UDISK/rwcheck.tmp.0_1 ... OK
......
check : /mnt/UDISK/rwcheck.tmp.7_0 ... OK
check : /mnt/UDISK/rwcheck.tmp.7_1 ... OK
--- REMOVE ---
remove : /mnt/UDISK/rwcheck.tmp.0_0 ... OK
remove : /mnt/UDISK/rwcheck.tmp.0_1 ... OK
......
remove : /mnt/UDISK/rwcheck.tmp.7_0 ... OK
remove : /mnt/UDISK/rwcheck.tmp.7_1 ... OK
一旦出现错误,会打印类似的错误信息
--- CREATE ---
--- CHECK ---
check : /mnt/UDISK/rwcheck.tmp.0_0 ... OK
check : /mnt/UDISK/rwcheck.tmp.0_1 ... OK
check : /mnt/UDISK/rwcheck.tmp.1_0 ... OK
check : /mnt/UDISK/rwcheck.tmp.1_1 ... OK
check : /mnt/UDISK/rwcheck.tmp.2_0 ... FAILED (crc error)
--- ERROR INFO ---
file: rwcheck.c (573)
errno: I/O error (5)
info: /mnt/UDISK/rwcheck.tmp.2_0 crc error
测试模式
rwcheck支持3种测试模式,分别是AUTO模式,UP模式,SAME模式
不同测试模式下,测试文件大小会不一样,测试文件大小策略可见函数 get_test_size() 。
模式 | 选项 | 特点 |
---|---|---|
AUTO | (default) | 每次测试取当前剩余空间的一半做测试文件大小 |
UP | -b/-e | 从设定的begin开始到设定的end结束,文件大小以2的倍数递增 |
SAME | -s | 固定每个测试文件的大小 |
AUTO模式
默认为 auto模式,在此模式下,每次测试的文件大小为剩余分区空间的 50%(最大不允许超过4G),直至测试文件大小 小于64K 或 剩余空间达到了设置的百分比。
因此,** auto模式 ** 也可以说是二分递减模式
例如,当前剩余空间为64M,测试百分比设置为95%,则创建的文件大小依次为:
32M -> 16M -> 8M -> 4M -> 1M
在最后一次测试中,由于剩余空间不足,因此跳过2M,直接测试1M大小文件
UP模式
与 auto模式 相反,up模式 是以2的倍数递增,通过选项-b <开始大小>
和-e <结束大小>
设置递增的范围,直至 剩余空间达到了设置的百分比 。
如果达到了设置的结束大小,但还有充足剩余空间,则从设置的开始大小重新循环。
例如,当前剩余空间为64M,测试百分比设置为95%,开始大小设置为128K,则创建的文件大小为:
128K -> 256K -> 512K -> 1M -> 2M -> 4M -> 8M -> 16M -> 128K -> 256K -> ...
SAME模式
same模式 是固定测试文件大小,通过选项-s <文件大小>
设置测试文件大小,循环创建文件直至 剩余空间达到了设置的百分比 或 **没有充足空间继续创建 **
例如,当前剩余空间为64M,测试百分比设置为95%,设置固定大小为5M,则创建的文件大小为:
5M -> 5M -> 5M -> 5M -> 5M -> 5M -> 5M -> 5M -> 5M -> 5M -> 5M -> 5M
rwcheck:为嵌入式设备设计的读写压测工具的更多相关文章
- python服务端多进程压测工具
本文描述一个python实现的多进程压测工具,这个压测工具的特点如下: 多进程 在大多数情况下,压测一般适用于IO密集型场景(如访问接口并等待返回),在这种场景下多线程多进程的区分并不明显(详情请参见 ...
- SuperBenchmarker一个用.NET编写的压测工具
0x01 前言 在这之前想必大家对ab(http)与abs(https)也有一些了解,我们今天不去看ab和abs,SuperBenchmarker(sb.exe)是一个压测工具,他是一个受Apache ...
- 018 磁盘 IO 性能监控/压测工具(sar、iotop、fio、iostat)
1 sar 命令查看当前磁盘 IO 读写 sar(System Activity Reporter 系统活动情况报告)是 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告 ...
- Http压测工具wrk使用指南
用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...
- web压测工具http_load原理分析
一.前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_load: http://www.acme.com/software/http_load/ ...
- [软件测试]网站压测工具Webbench源码分析
一.我与webbench二三事 Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能.Webbench ...
- Http压测工具wrk使用指南【转】
用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...
- 内存压测工具Memtester
在做压力测试时,发现一个内存压测工具Memtester,可以随意设置内存占用大小,非常方便 下载地址:http://pyropus.ca/software/memtester/old-versions ...
- Http 压测工具 wrk 基本使用
Http 压测工具 wrk 基本使用 Intro wrk 是一款现代HTTP基准测试工具,能够在单个多核CPU上运行时产生显着负载.它将多线程设计与可扩展事件通知系统(如epoll和kqueue)结合 ...
随机推荐
- 【06】Jenkins:Gitlab 自动触发构建以及钉钉通知
写在前面的话 在某些时候,我们希望能够实现这样一个功能,当用户提交东西到 gitlab 上的时候,希望它能够自动触发构建,发布到我们需要的环境. 目前我们内部有做类似的需求:产品提交原型到 gitla ...
- 网页学习:day1
初始准备: Write some function Write a titie Write a article Write some button Button function写法: functio ...
- RabbitMQ 从入门到精通(二)
目录 1. 消息如何保障百分之百的投递成功? 1.1 方案一:消息落库,对消息状态进行打标 1.2 方案二:消息的延迟投递,做二次确认,回调检查 2. 幂等性 2.1 幂等性是什么? 2.2 消息端幂 ...
- 关于ftp响应码的分析【转载】
转载地址: http://www.jb51.net/article/26649.htm 1开头-成功 2开头-成功 3开头-权限问题 4开头-文件问题 5开头-服务器问题 150 FILE: %s 1 ...
- Java多线程(七):ReentrantLock
加锁和解锁 我们来看下ReentrantLock的基本用法 ThreadDomain35类 public class ThreadDomain35 { private Lock lock = new ...
- Kafka配置信息
Kafka配置信息 broker配置信息 属性 默认值 描述 broker.id 必填参数,broker的唯一标识 log.dirs /tmp/kafka-logs Kafka数据存放的目录.可以指定 ...
- http面试笔试常考知识点(二)
接上一篇随笔 1. https协议为什么比http安全? 内容加密:建立一个信息安全通道,确保信息传输安全: 身份认证:确保网站的真实性: 数据完整性校验:防止内容被第三方冒充或者篡改 2.常见状态码 ...
- python使用kazoo操作zookeeper时候出现的"kazoo.exceptions.ConnectionLoss"错误
在往zk中写入数据的时候,突然遇到 “kazoo.exceptions.ConnectionLoss“错误,然而对zk链接进行检查,在set之前状态是”CONNECT“. 经过测试后发现是因为写入的字 ...
- CentOS7源码安装Nginx
系统平台:腾讯云服务器 CentOS 7.3 64位 一.安装编译工具及库文件 [root@VM_0_5_centos ~]# yum install -y make zlib zlib-devel ...
- IDEA自定义配置
目录 1 常规设置 1 修改字体大小 2 创建文件时 增加注释信息 3 项目编码为UTF-8 4 properties 文件编码为UTF-8且Transparent native-to-ascii c ...