fio

灵活且不失高性能,这个 POSIX 共享文件系统值得一用

家住魔仙堡 提交于 2021-01-18 16:55:04
项目名称: JuiceFS 项目作者: Juicedata 开源许可协议: AGPL-3.0 项目地址: https://gitee.com/juicedata/JuiceFS 项目简介 JuiceFS 是一个建立在 Redis 和 S3 等对象存储之上的开源 POSIX 文件系统。它是为云原生环境设计,通过把元数据和数据分别持久化到 Redis 和对象存储中,它相当于一个无状态的中间件,帮助各种应用通过标准的文件系统接口来共享数据。 项目特性 完整 POSIX 兼容:已有应用可以无缝对接; 极致的性能:毫秒级的延迟,近乎无限的吞吐量(取决于对象存储规模); 云原生:完全弹性,很容易实现存储和计算分离架构; 共享:可以被多个客户端同时读写; 文件锁:支持 BSD 锁(flock)及 POSIX 锁(fcntl); 数据压缩:默认使用 LZ4 压缩数据,节省存储空间。 项目架构 JuiceFS 使用 Redis 来存储文件系统的元数据。Redis 是一个开源的内存数据库,可以保障元数据的高性能访问。所有文件的数据会通过客户端存储到对象存储中,以下是它的架构图: JuiceFS 中的文件格式,如下图所示。一个文件首先被拆分成固定大小的 "Chunk",默认 64 MiB。每个 Chunk 可以由一个或者多个 "Slice" 组成,它们是变长的。对于每一个 Slice

记一次TCP全队列溢出问题排查过程

女生的网名这么多〃 提交于 2021-01-13 18:54:33
1. 前言 本文排查的问题是经典的TCP队列溢出问题,因TCP队列问题在操作系统层面没有明显的指标异常,容易被忽略,故把排查过程分享给大家。 2. 问题描述 A服务调用B服务接口超时,B服务主机IOWAIT高,具体超时情况分为两种: A服务的请求在B服务日志中可查到,但B服务的响应时间超过了A服务的等待超时时间3S。 A服务的请求在B服务日志中无法查到。 3. 问题分析 此种超时请求集中在很短的一段时间(通常在2分钟之内),过后便恢复正常,所以很难抓到问题现场分析原因,只能搭建测试环境,A服务持续请求B服务,在B服务主机上通过DD命令写入大量数据造成主机IOWAIT高,同时通过TCPDUMP在两端抓包分析。 部分服务超时日志: 服务A:Get http://xxx&id=593930: net/http: request canceled (Client.Timeout exceeded while awaiting headers) 服务B: "GET xxx&id=593930 HTTP/1.1" 200 64 "-" "Go-http-client/1.1" "-" "-" 165000(单位微秒) 服务A发起请求3S后没有收到服务B响应,断开连接,服务B日志显示处理时长为0.165S,远低于3S,服务A侧看服务B的响应时间为网络传输时间

Ceph 压力测试

淺唱寂寞╮ 提交于 2020-12-29 07:34:06
ceph 挂载的快设备 [root@node1 ~]# df -h /mnt/rbd/ 文件系统 容量 已用 可用 已用% 挂载点 /dev/rbd0 15G 241M 14G 2% /mnt/rbd 安装压测工具和查看磁盘 IO 性能工具 fio [root@node1 ~]# yum install fio sysstat -y 打开一个 shell 终端查看块设备 IO [root@node1 ~]# iostat -x 1 查看 rbd 延迟相应时间 [root@node1 ~]# ceph osd perf 4K 随机写 -IOPS [root@node1 ~]# fio -filename=/mnt/rbd/fio.img -direct=1 -iodepth 32 -thread -rw=randwrite -ioengine=libaio -bs=4k -size=200m -numjobs=8 -runtime=60 -group_reporting -name=mytest mytest: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=32 ... fio-3.7 Starting 8 threads

记一次 TCP 全队列溢出问题排查过程

半腔热情 提交于 2020-12-28 16:01:35
1. 前言 本文排查的问题是经典的TCP队列溢出问题,因TCP队列问题在操作系统层面没有明显的指标异常,容易被忽略,故把排查过程分享给大家。 2. 问题描述 A服务调用B服务接口超时,B服务主机IOWAIT高,具体超时情况分为两种: A服务的请求在B服务日志中可查到,但B服务的响应时间超过了A服务的等待超时时间3S。 A服务的请求在B服务日志中无法查到。 3. 问题分析 此种超时请求集中在很短的一段时间(通常在2分钟之内),过后便恢复正常,所以很难抓到问题现场分析原因,只能搭建测试环境,A服务持续请求B服务,在B服务主机上通过DD命令写入大量数据造成主机IOWAIT高,同时通过TCPDUMP在两端抓包分析。 部分服务超时日志: 服务A:Get http:// xxx &id=593930: net/http: request canceled (Client.Timeout exceeded while awaiting headers) 服务B: "GET xxx&id=593930 HTTP/1.1" 200 64 "-" "Go-http-client/1.1" "-" "-" 165000(单位微秒) 服务A发起请求3S后没有收到服务B响应,断开连接,服务B日志显示处理时长为0.165S,远低于3S,服务A侧看服务B的响应时间为网络传输时间

hdparm 命令使用;关闭硬盘 HDD cache; 硬盘读写性能测试;

半世苍凉 提交于 2020-12-21 07:54:59
最新需要使用硬盘做一些测试,需要使用到hdparm工具,并进行了解,并进行简要记录; hdparm、dd、fio、都是很好的硬盘测试软件;通常使用其对硬盘信息做基本了解; 关闭硬盘写Cache用例: hdparm -W /dev/ sdh # 查看写缓存状态; hdparm -W 0 /dev/ sdh # 关闭Cache,保证数据强一致性;放置断电时数据未落盘; hdparm -W 1 /dev/sdh # 打开 测试磁盘和磁盘缓存读取速度: 查看磁盘信息: fdisk -l /dev/ sdh hdparm /dev/sdh 评估磁盘读取速度: hdparm -t /dev/sdh 评估磁盘缓存读取速度: hdparm -T /dev/sdh 直接测试硬盘的读性能(绕过内核页缓存): hdparm -tT --direct /dev/sdh 顺序写测试: time -p bash -c "dd if=/dev/urandom of=./dd.log bs=1M count=50000" 随机写测试(使用direct标识,绕过页缓存): fio -filename=randw-singlethread -fallocate=none -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=32k -size

磁盘I/O性能优化的几个思路

被刻印的时光 ゝ 提交于 2020-10-07 07:21:11
本文已收录 GitHub ,更有互联网大厂面试真题,面试攻略,高效学习资料等 虽然 I/O 的性能指标很多,相应的性能分析工具也有好几个,但理解了各种指标的含义后,你就会发现它们其实都有一定的关联。 顺着这些关系往下理解,你就会发现,掌握这些常用的瓶颈分析思路,其实并不难。 找出了 I/O 的性能瓶颈后,下一步要做的就是优化了,也就是如何以最快的速度完成 I/O操作,或者换个思路,减少甚至避免磁盘的 I/O 操作。 本文,我就来说说,优化 I/O 性能问题的思路和注意事项。 I/O基准测试 按照我的习惯,优化之前,我会先问自己, I/O 性能优化的目标是什么?换句话说,我们观察的这些 I/O 性能指标(比如 IOPS、吞吐量、延迟等),要达到多少才合适呢? 事实上,I/O 性能指标的具体标准,每个人估计会有不同的答案,因为我们每个人的应用场景、使用的文件系统和物理磁盘等,都有可能不一样。 为了更客观合理地评估优化效果,我们首先应该对磁盘和文件系统进行基准测试,得到文件系统或者磁盘 I/O 的极限性能。 fio(Flexible I/O Tester)正是最常用的文件系统和磁盘 I/O 性能基准测试工具。它提供了大量的可定制化选项,可以用来测试,裸盘或者文件系统在各种场景下的 I/O 性能,包括了不同块大小、不同 I/O 引擎以及是否使用缓存等场景。 fio 的安装比较简单

fio测试和分析

痴心易碎 提交于 2020-08-15 03:25:14
fio测试脚本 #!/bin/bash set -e ioengine="libaio" iodepth=128 direct=1 fsync=1 runtime=600 size="10G" mntdir="/mnt/fio-data/" mkdir -p /mnt/fio-data mount /dev/vdb /mnt/fio-data || true for m in seq rand do prefix="" if [ "$m" == "seq" ] ; then bs="1024K" else bs="4K" prefix="rand" fi for op in read write do cat <<EOF >$mntdir/fio-$m-$op.fio [global] fsync=$fsync name=fio-$m-$op filename=fio-$m-$op rw=$prefix$op bs=$bs direct=$direct numjobs=1 time_based=1 runtime=$runtime [file1] size=$size ioengine=$ioengine iodepth=$iodepth EOF done done docker rm -f $(docker ps -a -q) >/dev/null 2>&1|| true

集群搭建完成简要测试集群(性能)带宽与IOPS

这一生的挚爱 提交于 2020-08-13 07:02:47
集群搭建好之后网络,raid卡策略,磁盘都会影响集群的性能。为了避免因上述问题使得集群的性能受到影响,我们依次进行测试,最后得到基本的集群性能。 网络 首先是网络,ceph集群一大堆让人摸不着头脑的问题都出在网络上,所以我们在建立集群之前就可以测试网络,看其是否有问题,可以通过ping命令来测试网络的连通性,但最好使用iperf,测试下网络传输速度。 遇到有不少现场情况,因为光模块导致万兆网络只有百兆的速度,如果等集群建好之后性能不如意,花费大量时间排查发现是这个问题就太冤了。 iperf命令 选择一个节点作为iperf server iperf -s 选择其他节点作为iperf client,比如server IP地址为192.168.12.4 iperf -c 192.168.12.4 -i 1 -t 5 # -i: 间隔多少秒报告一次结果 # -t: 向服务器发送多少秒 # 结果如下 [ 3] 0.0- 1.0 sec 575 MBytes 4.83 Gbits/sec [ 3] 1.0- 2.0 sec 361 MBytes 3.03 Gbits/sec [ 3] 2.0- 3.0 sec 618 MBytes 5.18 Gbits/sec [ 3] 3.0- 4.0 sec 423 MBytes 3.55 Gbits/sec [ 3] 4.0- 5.0 sec 519

centos7用fio测试磁盘io

冷暖自知 提交于 2020-08-12 16:56:44
我在centos7系统里,直接执行yum install -y fio就能把工具装上。 测写入的时候-filename=绝对不能写/dev/sdX,否则盘上数据损坏!随便一搜,很多文章都是filename=/dev/开头的,我觉得这些人不是无脑搬运工就是故意害人的! 下面这命令测试写入效果,将生成单个文件在/tmp/中 fio -filename=/tmp/fio_randwrite -name=ihatefio -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=1G -numjobs=20 -runtime=3 -group_reporting 下面这命令将在指定目录下,生成20个1G文件,是多线程并发执行的。 fio -directory=/tmp/fio/ -name=readtest -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=1G -numjobs=20 -runtime=3 -group_reporting 其中 numjobs=20表示20个并发 -rw=可供选择的有read单测读write单测写rw读写同时测randrw随机读写同时测randread单测随机读randwrite单测随机写

centos7用fio测试磁盘io

两盒软妹~` 提交于 2020-08-12 14:48:56
我在centos7系统里,直接执行yum install -y fio就能把工具装上。 测写入的时候-filename=绝对不能写/dev/sdX,否则盘上数据损坏!随便一搜,很多文章都是filename=/dev/开头的,我觉得这些人不是无脑搬运工就是故意害人的! 下面这命令测试写入效果,将生成单个文件在/tmp/中 fio -filename=/tmp/fio_randwrite -name=ihatefio -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=1G -numjobs=20 -runtime=3 -group_reporting 下面这命令将在指定目录下,生成20个1G文件,是多线程并发执行的。 fio -directory=/tmp/fio/ -name=readtest -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=4k -size=1G -numjobs=20 -runtime=3 -group_reporting 其中 numjobs=20表示20个并发 -rw=可供选择的有read单测读write单测写rw读写同时测randrw随机读写同时测randread单测随机读randwrite单测随机写