Vdbench----文件系统IO,一致性校验,常见问题_weixin_33739541的博客-程序员宅基地

技术标签: python  运维  操作系统  

 

  • Linux环境----多客户联机运行

注意,此时会出现avahi-daemon服务的报错日志信息:

Linux system log avahi-daemon[3733]: Invalid query packet

关闭即可:systemctl stop avahi-daemon

avahi-daemon是一种Linux操作系统上运行在客户机上实施查找基于网络的Zeroconf service的服务守护进程。 该服务可以为Zeroconf网络实现DNS服务发现及DNS组播规范。 用户程序通过Linux D-Bus信息传递接收发现到网络服务和资源的通知。该守护进程配合缓存用户程序的答复,以帮助减少因答复而产生的网络流量。

  1. 每个客户的都需要安装vdbench,路径保持一致
  2. SSH互联,选一个客户的为父节点,把每个子节点都信任父节点

  父节点为93.93.41.5,子节点为93.93.41.6

  ssh-keygen -t rsa                           生成秘钥

  chmod 755 /root/.ssh/                    修改生成秘钥的权限

  scp /root/.ssh/id_rsa.pub 93.93.41.6:/root/.ssh/authorized_keys 拷贝公钥

  3.  验证SSH互信

  在父节点上ssh每一个子节点,如果不需要输入秘钥就能登录,则互信成功。

 4 多客户端配置文件

 hd=default,dbench=/home/Vdbench/,user=root,shell=ssh

 hd=hd1,system=93.93.31.7

 hd=hd2,system=93.93.41.8

 hd=hd3,system=93.93.41.9

 fsd=fsd1,anchor=/tmp/yht/client1,depth=2,width=100,files=2000,size=100m,shared=yes

 fsd=fsd2,anchor=/tmp/yht/client2,depth=1,width=1000,files=2000,zies=(20m,40,100m,60),shared=yes

 fsd=fsd3,anchor=/tmp/yht/client3,depth=1000,width=1,files2000,size=1m,shared=yes

 fwd=fwd1,fsd=fsd1,host=hd1,operation=read,xfersize=(1m,40,64k,60),fileio=random,fileselect=sequantial,threads=32

 fwd=fwd2,fsd=fsd2,host=hd2,operation=write,xfersize=64k,fileio=random,fileselect=sequantial,threads=32

 fwd=fwd3,fsd=fsd3,host=hd3,rdpct=60,xfersize=4k,fileio=random,fileselect=sequantial,threads=32

 rd=rd1,fwd=(fwd1-fwd3),fwdrate=max,format=restart,elapesed=600,interval=10

 注:fsd中shared,vdbench不允许不同的slave之间共享同一个目录结构下的所有文件,因为这样会带来很大的开销,但是它们允许共享同一个目录结构。加入设置了shared=yes,那么不同的slave可以平分一个目录下所有的文件来进行访问,相当于每个slave有各自等分的访问区域,因此不能测试多个客户的对同一个文件的读写。

  • vdbench的数据一致性校验参数

推荐参数:-jn

打开vdbench校验数据的参数为-v或-j,这个过程会为每一次写操作记录日志用于后续校验。

使用-v参数,则生成的校验日志直接保存于内存中,使用-j参数则生成一个校验日志的文件,第二次校验时,-jr即可进行日志恢复进行校验。-v直接记录于内存之中,速度更快,但如果存储系统出现重启或内存清理,那么-v参数记录的校验日志就丢失了;-j直接写到磁盘上,安全有保证但速度会慢一下,此时可选择-jn,异步写到磁盘上,速度和安全都有一定的保证。

  • 数据校验原理

数据校验的工作流程如下:每一个在存储系统中的第一次写操作记录在一个表中,假定写操作的块大小是1m,那么这个块大小中的每512字节中包含的两项–8字节的逻辑字节地址(LBA)和一个字节的数据校验key值(标记是第几次写,范围为0-125,00代表创建写,01代表第一次覆盖写,以此类推,当到达126后折返00,重新来一轮)会被记录,这个过程为生成校验日志;第二次重新运行脚本(使用参数-jr或者-vr)则根据第一次记录的日志进行数据校验

  • vdbench 过滤多余系统日志

messagescan=no

  • 参数说明---vdbench常见问题(转载整理)

1、-f参数后面多个配置文件是同时执行还是顺序执行;

   -f后面的配置文件里的参数通过parseParameterLines()函数进行顺序解析,写入并生成输出文件parmfile.html和parmscan.html(包含了完整的参数配置)。

执行时,首先运行rd,进入RD中调用的wd或fwd,然后进入WD或FWD中的sd或fsd(若有HD,同上调用)。

2、-v校验中逻辑字节地址/数据校验关键字是存储在哪个位置;

  数据块的大小是xfersize的值,数据校验时,每写入数据块512个字节包含一个8字节的lba和一个1字节的key值。

其中lba指的是字节地址,与文件系统的偏移量和文件的偏移量有关。

Key值记录了写入块的次数,每写入块一次,key值加1,加到126后直接返回1。

3、-v校验中的校验是发生在什么时候;

每写入一次数据块时,先读后写,写前写后内容进行校验。

进行数据校验需要执行-v,也可以在参数文件中写入Validate=yes,也就是说,在配置文件执行生成系统文件后,校验一直进行。

4、-vt时间戳显示在哪,是什么意思,是否可以查看;

内存中最后一次写入或读取成功的时间戳。可以在输出结果中查看:

5、逻辑地址有啥用。

Lba记录了每个数据块的地址,校验时根据lba方便查找校验错误的地方。

6、校验错输出script_name什么意思,data_errors参数的作用;

返回校验错误,描述出错的位置,方便测试人员定位查阅。如问题5,定位在fsd=fsd1文件系统中出错及第二行中显示的文件名字及出错的位置。

7、-v该末尾一个字节。是否能校验么,报错的位置是否正确;

在文件末尾插入字节,可以被校验出。报错位置正确,定位在文件的结尾位置。

8、lba后面的值有什么意思;

lba指的是逻辑字节地址,与文件系统的偏移量和文件的偏移量有关。校验错误返回的lba指的是在文件中的出错位置。

9、-j和-v之间的区别;

-v的数据校验,校验文件会输出到内存中,但是一旦vdbench关闭或者系统重启,校验就会失败。而-j能进行持续校验,等下次重启时,会恢复原始数据重新校验。如果只写-j而不加-v,也会进行-v操作。

10、-j中有几个fsd就有几个jnl文件map文件

是的

运行./vdbench –j –f testcount ,生成日志文件所在的目录如下:

11、jnl和map文件有什么区别么?

开始执行时,vdbench会生成两个文件Map backup file 和journal file。系统出现故障时(仅仅丢失了内存映射表中的数据),这两个文件由于保留了原始数据(恢复数据时首先读取journal文件的数据,如果失败,再从Map backup文件中写入),方便测试人员继续进行读写和校验。

(1)正常时:内存中数据校验映射表的内容写入到backup和journal文件。日志更新内容持续写入到journal文件结尾部分并生成日志记录。

(2)系统出现问题时: Vdbench重启并进行数据修复,从journal文件开始部分读出原始数据,并把数据更新到内存映射表中。一旦journal到达文件结尾,读取并验证用“modified” 标记的所有数据块。接着执行(1)过程。

如果由于系统崩溃,journal文件的原始数据写入内存映射表中失败,直接读取backup文件内容并写入。

综上,可以看出,map backup文件修复数据性能更高。

12、命令之间有没有冲突

没有,但是命令设置时必须-f后面加 parmfile文件,如果有-s命令则会模拟执行文件。如果命令中只有-j却无-v,则隐含着进行数据校验生成日志文件。

13、count参数的意思

count=nn,mm 快速创建SD序列(nn是开始数字,mm是数字个数)

如fsd=fsd,anchor=/ww,count=(1,5)在/ww1-/ww5中创建fsd1-fsd5

如运行:

/mnt目录下显示的目录结构如下:

若在wd中限定fsd1,则只显示wwz1一个目录:

若在fsd中限定fsd1,则会出错,如下

14、range的wd的寻找范围,是否可以运用到fsd中

文件系统中不可用, 测试过程如下:

15、rdpct-rhpct-whpct区别

Sd中:

rdpct=nn

读操作的比例,默认为100%。rdpct=80代表读写比例4:1。

rhpct=nn

只在读裸设备时使用,读缓存命中率,默认值为0。

whpct=nn

只在写裸设备时使用,写缓存命中率,默认值为0。

Fsd中不存在rhpct及whpct参数:

rdpct在文件上的读写操作比例。rdpct=80代表读写比例4:1。必须同时添加fileio=random参数,不能留空(系统默认fileio=sequential)

计算公式如下:

rdpct  = read.operations * 100. / (read.operations + write.operations);

16、缓存命中,rhpct部分,1M的意思。

只针对sd而言。

每一个存储体积被分成两部分:hit area指用于缓存命中部分(这由hitarea=nn设定,hitarea默认为1M),miss area 指SD剩下的部分缓存未命中的部分。

17、xfersize=(1-64k,d)执行顺序

   在文件系统中不支持这种方式。只支持xfersize=nn或xfersize=(x1,nn1,x2,nn2,…)其中nn1+nn2+…=100,报错如下:

18、xfersize=(1k,10)这种格式,是报错还是按照4k块大小执行剩余的90%

19、skew,IO倾斜比,没有IOrate参数时,参数是否生效;

直接会报错

在fsd中,fwdrate不存在时

20、skew对IOPS生效还是对带宽生效

iops生效,skew时对fwdrate或iorate的分配

21、iorate指的是带宽还是iops

iops

22、rd的名字是否有要求

没有要求,可以任意定义,只是个名字而已。

23、count中,是否创建多个fsd?还是创建了5个目录?

多个fsd,每个fsd下又存在多个目录,见问题13

24、count中,rd引入部分fsd是否可以?

可以,见问题13

转载于:https://my.oschina.net/linjiezang/blog/1801976

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33739541/article/details/92475022

智能推荐

随便推点