GlusterFs 分布式复制卷(Distributed-Replicate)性能测试

news2024/11/17 10:04:03

目录

fio工具参数解释

Glusterfs 和NFS 性能测试

顺序写:

随机写:

顺序读:

随机读:

随机读写:

参数说明:

测试结论:

与NFS对比

压测对比结果

NFS和GlusterFs的优缺点

NFS的优点

NFS的缺点

GlusterFS的优点

GlusterFS的缺点

NFS与GlusterFS对比

1. 功能对比

2. 吞吐量对比

3. 可靠性对比

4. 扩展性对比


fio工具参数解释

–filename

待测试的文件或块设备

若为文件,则代表测试文件系统的性能;例:–filename=/opt/test.img 若为块设备,则代表测试裸设备的性能; 例:–filename=/dev/sda

–bs

单次IO的块大小(测试磁盘的io,尽量使用小文件)

–ioengine

采用的文件读写方式

  • –sync:采用read,write,使用fseek定位读写位置。

  • –psync:采用pread、pwrite进行文件读写操作

  • –vsync:采用readv(2) orwritev(2)进行文件读写操作

read()和write()系统调用每次在文件和进程的地址空间之间传送一块连续的数据。但是,应用有时也需要将分散在内存多处地方的数据连续写到文件中,或者反之。在这种情况下,如果要从文件中读一片连续的数据至进程的不同区域,使用read()则要么一次将它们读至一个较大的缓冲区中,然后将它们分成若干部分复制到不同的区域,要么调用read()若干次分批将它们读至不同区域。同样,如果想将程序中不同区域的数据块连续地写至文件,也必须进行类似的处理。UNIX提供了另外两个函数—readv()和writev(),它们只需一次系统调用就可以实现在文件和进程的多个缓冲区之间传送数据,免除了多次系统调用或复制数据的开销。readv()称为散布读,即将文件中若干连续的数据块读入内存分散的缓冲区中。writev()称为聚集写,即收集内存中分散的若干缓冲区中的数据写至文件的连续区域中。

  • –libaio:Linux异步读写IO(Linuxnative asynchronous I/O)

  • –posixaio: glibc POSIX 异步IO读写,使用aio_read(3)and aio_write(3)实现IO读写。

–rw

读写模式。

  • read:顺序读测试,使用方式–rw=read

  • write:顺序写测试,使用方式–rw=write

  • randread:随机读测试,使用方式–rw=randread

  • randwrite:随机写测试,使用方式–rw=randwrite

  • randrw:随机读写,–rw=randrw;默认比率为5:5,通过参数–rwmixread设定读的比率,如–rw=randrw-rwmixread=70,说明读写比率为70:30。或rwmixwrite

–time_based

如果设置的job已被完全读写或写完,也会执行完runtime规定的时间。它是通过循环执行相同的负载来实现的。加上这个参数可以防止job提前结束。

–refill_buffers

每次提交后都重复填充io buffer

–norandommap

在进行随机 I/O 时,FIO 将覆盖文件的每个块。若给出此参数,则将选择新的偏移量而不查看 I/O 历史记录。

–group_reporting

关于显示结果的,汇总每个进程的信息

–name

测试结果输出的文件名称

–size

测试的文件大小

– nrfiles

每个进程生成的文件数量

– zero_buffers

用0初始化系统buffer

– randrepeat

随机序列是否可重复,True(1)表示随机序列可重复,False(0)表示随机序列不可重复。默认为 True(1)。

– sync

设置同步模式,同步–sync=1,异步–sync=0

– fsync

设置数据同步模式,同步-fsync=1,异步-fsync=0(有一个io就同步)

– numjobs

测试进程的并发数,默认为16(这个值和cpu数量有关)

Glusterfs 和NFS 性能测试

顺序写:

fio --filename=/mnt/test-volume/sunwenbo-testing --bs=4k --ioengine=libaio --iodepth=32 --direct=1 --rw=write --time_based --runtime=600 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-randwrite-iops --size=10G 

  

随机写:

fio --filename=/mnt/test-volume/sunwenbo-testing --bs=4k --ioengine=libaio --iodepth=32 --direct=1 --rw=randwrite  --time_based --runtime=200 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-randwrite-iops --size=10G 

顺序读:

fio --filename=/mnt/test-volume/sunwenbo-testing --bs=4k --ioengine=libaio --iodepth=32 --direct=1 --rw=read --time_based --runtime=600 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-randwrite-iops --size=10G

随机读:

fio --filename=/mnt/test-volume/sunwenbo-testing --bs=4k --ioengine=libaio --iodepth=32 --direct=1 --rw=randread --time_based --runtime=200 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-randread-iops --size=10G

随机读写:

fio --filename=/mnt/test-volume/sunwenbo-testing --bs=4k --ioengine=libaio --iodepth=32 --direct=1 --rw=randrw --time_based --runtime=300 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-randwriteread-iops --size=10G

参数说明:

bs:单次io的块文件大小为4k

size:本次的测试文件大小为10G,以每次4k的io进行测试。

runtime:测试时间 秒

rw:顺序写/读 随机读/写 随机读写

direct:=1 测试过程绕过机器自带的buffer。使测试结果更真实。

ioengine: =libaio Linux异步读写IO

iodepth:队列深度,只有使用libaio时才有意义。这是一个可以影响IOPS的参数。

numjobs: 测试进程的并发数,默认为16(这个值和cpu数量有关)

bs

4k

8k

32k

64k

256k

1024k

顺序写 iops/bw

22938/91753

113012/90513

2819/90223

1411/90363

352.15/90154

87.76/89919

随机写

iops/bw

1200/4802

1156/9251

1003/32116

825/52826

328/83997

87.87/90029

顺序读 iops/bw

26035/104140

26017/208140

8356/267403

4177/267387

1044/267401

261/267285

随机读

iops/bw

26105/104422

26222/209779

8390/268495

4193/268390

1055/270179

266/272840

随机读写 iops/bw

read:767/3071

write: 765/3061

717/5754

719/5758

589.22/18856

586/18775

465/29776

481/30839

182.79/46838

197/49789

55/57018

56/57953

测试结论:

顺序写:随着bs越大,iops每秒的读写次数越少。bw没有太大变化

随机写:随着bs越大,iops每秒的读写次数越少。bw增长一倍

顺序读:随着bs越大,iops每秒的读写次数越少。bw在bs 4k - 32k的情况下增长比较明显 32k以上达到了一定的瓶颈

随机读:随着bs越大,iops每秒的读写次数越少。bw在bs 4k - 32k的情况下增长比较明显 32k以上达到了一定的瓶颈

随机读写:随着bs越大,iops每秒的读写次数越少。bw随着bs的增大而增大

与NFS对比

10G文件

第一行是glusterfs的压测数据

第二行为nfs的压测数据

Iops: 每秒的读写次数

bw (KiB/s): 每秒读/写 KB

bs

4k

8k

32k

64k

256k

1024k

顺序写 iops/bw

22938/91753

7596/30384

113012/90513

6668/53347

2819/90223

4548/145558

1411/90363

3035/194252

352.15/90154

725/185792

87.76/89919

205/209920

随机写

iops/bw

1200/4802

7219/28876

1156/9251

7002/56018

1003/32116

5682/181839

825/52826

3009/192603

328/83997

744/190548

87.87/90029

176/181225

顺序读 iops/bw

26035/104140

72560/290242

26017/208140

65752/526017

8356/267403

53503/1671

4177/267387

40054/2503

1044/267401

16968/4242

261/267285

4735/4735

随机读

iops/bw

26105/104422

72663/290654

26222/209779

66809/534479

8390/268495

53342/1666

4193/268390

40213/2513

1055/270179

16770/4192

266/272840

4475/4475

随机读写 iops/bw

read:767/3071

write: 765/3061

read:5791/23164

write: 5793/23174

read: 717/5754

write: 719/5758

read: 5744/45956

write: 5733/45869

read: 589.22/18856

write: 586/18775

read: 5267/84282

write: 5273/84376

read: 465/29776

write: 481/30839

read: 2802/179387

write: 2811/179916

read:182.79/46838

write: 197/49789

read: 695/178129

write: 701/179471

read: 55/57018

write: 56/57953

read: 172/176817

write: 174/179043

压测对比结果

顺序写:bs在小于8k时 GlusterFS的iops和bw都高于NFS,bs一旦超过了8k iops 和bw都低于NFS

随机写:NFS整体高于GlusterFS

顺序读:bs低于8k时GlusterFS 每秒写入的字节数低于NFS ,大于8k时bw远远超过NFS。整体iops NFS高于glusterfs(读大文件时,glusterfs性能更优)

随机读:bs低于8k时GlusterFS 每秒写入的字节数低于NFS,大于8k时每秒读取的数据远远超过NFS,但是bw低于glusterfs意。整体iops NFS高于glusterfs (读大文件时,glusterfs性能更优)

随机读写:NFS高于GlusterFs

NFS和GlusterFs的优缺点

NFS

NFS的优点

NFS是Linux操作系统下最常用的网络文件系统之一,它通过网络将一个文件系统挂载在另一台主机上,使得多台主机可以共享同一个文件系统。NFS的优点如下:

(1) 简单易用:NFS的配置和使用都非常简单,只需要在服务端开启NFS服务,然后在客户端进行挂载即可。

(2) 效率高:NFS的数据传输采用RPC协议,传输效率高,数据传输速度快。

(3) 兼容性强:NFS支持跨平台,可以在Linux、Unix、Windows等不同操作系统间进行文件共享。

NFS的缺点

NFS也存在一些缺点,主要表现在以下几个方面:

(1) 安全性较差:由于NFS没有加密机制,所以在使用NFS进行文件共享时,可能会存在数据泄露的风险。

(2) 可靠性不高:NFS对网络环境的要求比较高,如果网络环境不稳定,容易导致文件共享出现故障。

(3) 扩展性差:NFS的扩展性比较差,当需要扩容时,需要手动进行配置,操作比较繁琐。

GlusterFS的优点

GlusterFS是一个分布式文件系统,它可以将多台计算机的硬盘空间组合成一个大的存储空间,并提供统一的访问接口。GlusterFS的优点如下:

(1) 可靠性高:GlusterFS可以将数据进行分布式备份,保证数据的可靠性。

(2) 扩展性强:GlusterFS支持在线扩容,不需要停止服务,可以方便地对存储空间进行扩容。

(3) 灵活性好:GlusterFS的架构设计比较灵活,可以根据不同的需求选择不同的存储方案。

GlusterFS的缺点

GlusterFS也存在一些缺点,主要表现在以下几个方面:

(1) 效率低:由于GlusterFS采用的是分布式存储方案,数据的读写需要通过网络通信,所以效率比较低。

(2) 配置复杂:GlusterFS的配置比较复杂,需要对系统和存储方案进行深入的了解,否则容易导致配置错误。

(3) 兼容性差:GlusterFS只支持Linux操作系统,对其他操作系统的支持比较差。

NFS与GlusterFS对比

1. 功能对比

NFS和GlusterFS都是用于虚拟化存储的解决方案,它们的核心功能都是实现文件共享。但是它们的实现方式不同,NFS是基于网络文件系统的协议实现文件共享,而GlusterFS是基于分布式文件系统的协议实现文件共享。

2. 吞吐量对比

在吞吐量方面,GlusterFS比NFS要慢,因为GlusterFS的数据读写需要经过网络通信,而NFS的数据读写直接在本地磁盘操作,所以相对来说,NFS的吞吐量要高一些。

3. 可靠性对比

在可靠性方面,GlusterFS比NFS要好。GlusterFS可以将数据进行分布式备份,保证数据的可靠性,而NFS没有这个功能,如果其中的某一台服务器出现问题,可能会导致共享文件系统无法正常访问。

4. 扩展性对比

在扩展性方面,GlusterFS比NFS要好。GlusterFS支持在线扩容,可以方便地对存储空间进行扩容,而NFS需要手动进行配置,操作比较繁琐。

综上所述,NFS和GlusterFS各有优缺点,在选择时需要根据自身需求进行选择。如果对吞吐量和操作复杂度有较高要求,可以选择NFS,如果对可靠性和扩展性有较高要求,可以选择GlusterFS。当然,也可以结合两个解决方案的优势,选择适合自己的混合存储方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/730383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于卷积神经网络VGG的猫狗识别

!有需要本项目的实验源码的可以私信博主! 摘要:随着大数据时代的到来,深度学习、数据挖掘、图像处理等已经成为了一个热门研究方向。深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远…

综合能源系统(1)——综合能源系统基本定义与内涵

综合能源系统关键技术与典型案例  何泽家,李德智主编 综合能源系统基本定义 综合能源系统(Integrated Energy System,IES)的概念最早产生于热电联产领域,侧重于热电系统的协同优化,而后逐渐扩展丰富,涉及电、热、冷…

DEVICENET转MODBUS-TCP网关应用案例

远创智控YC-DNT-TCP连接到DEVICENET总线中做为从站使用,连接到 MODBUS-TCP 总线中做为主站或从站使用。是自主研发的一款 DEVICENET 从站功能的通讯网关。 YC-DNT-TCP常用拓展图 技术指标 网关的 MODBUS 接口可通过拨码选择做为主站(客户端&#xff09…

QNAP威联通NAS搭建SFTP服务,并内网穿透实现公网远程访问

文章目录 前言1. 威联通NAS启用SFTP2. 测试局域网访问3. 内网穿透3.1 威联通安装cpolar内网穿透3.2 创建隧道3.3 测试公网远程访问 4. 配置固定公网TCP端口地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址4.3 测试使用固定TCP端口地址远程连接威联通SFTP 转载自远程内…

【算法集训之线性表篇】Day 05

文章目录 题目思路代码实现效果 题目 将两个有序顺序表合并为一个有序顺序表,函数结果返回值为顺序表。 思路 我们可以利用二路归并排序算法中的Merge函数思路,设置两个指针i,j,分别记录在顺序表a和b中的访问位置,再…

【未解决】No rule to make target ‘/usr/lib/x86_64-linux-gnu/libGL.so‘

测试ros自带的PCL1.8是否能用,网上找个测试代码,编译阶段报错: cmake .. -- Could NOT find ensenso (missing: ENSENSO_LIBRARY ENSENSO_INCLUDE_DIR) ** WARNING ** io features related to ensenso will be disabled -- Could NOT find …

Blender环境纹理材质贴图入门教程

推荐:将 NSDT场景编辑器 加入你的3D开发工具链 大家好,今天跟大家分享Blender材质贴图入门图文教程,一套blender的PBR材质包,和HDRI环境纹理贴图,在文末领取,希望能助到大家更高效完成场景练习。 据我了解…

Linux Deploy(一)Linux Deploy简介与软件安装

一、Linux Deploy简介 Linux Deploy可以在安卓机器上使用chroot容器技术运行arm或者x86的Linux系统,利用该技术可以搭建个人服务器,Linux Deploy可运行多种linux发行版的软件,不失为一个好的家庭微型服务系统,如果想把手机弄成微…

【Spark_BigData】期末复习考试——

复习题目 yarn框架中不包含的进程为 Yarn包括两个主要进程:资源管理器Resource-Manager,节点管理器Node-Manager。 Scheduler zookeeper spark SQL 前身 Shark 在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。 HiveContext继承自SQLCon…

安装最新版CMAK,处理报错java.util.NoSuchElementException: key not found: PLAINTEXT

安装最新版CMAK,处理报错java.util.NoSuchElementException: key not found: PLAINTEXT 一、下载CMAK二、解压CMAK三、修改配置文件四、安装jdk11五、启动CMAK六、CMAK界面设置Kafka集群信息七、完整报错八、报错原因九、解决方法 一、下载CMAK CMAK下载地址&#…

将本地项目上传至gitee

一、先去gitee新建仓库 点击新建仓库之后,跳转下图页面 点击创建之后,跳转下图页面 到此为止,这里仓库就创建好了,下面去提交代码 二、本地项目连接远程仓库 1、进入想上传的项目的文件夹,然后右键点击 Git Bash Her…

Stable Diffusion 模特换装 蒙版一键批量提取

有没有想过可以使用算法批量提取图片中模特的服装,然后通过SD进行换装。 一个一个的PS抠图是不是太累,可以使用算法批量提取。相对于 Segment Anything 方法这个比较简单。 文章目录 蒙版批量提取SD换装 蒙版批量提取 import osfrom tqdm import tqdm …

前台测试,工程督导及5G网络优化工程师的区别具体在哪里?

什么是通信? 北邮版《通信原理》教材的第一句话是--通信乃是互通信息。 其实,这句话就说出了通信的本质,通信的目标就是如何让世界的任何人在任何时间,任何地点都进行信息的互通。 大到卫星,小到SIM卡,通信技术覆盖于…

OpenCV实现一张图片的特定区域上添加另一张图片

#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv;int main( ){Mat image= imread

Vite是如何实现Esbuild打包的

前面文章说过&#xff08;Vite如何实现秒级依赖预构建的能力&#xff09;&#xff0c;在 Vite 依赖预构建的底层实现中&#xff0c;大量地使用到了 Esbuild 这款构建工具&#xff0c;实现了比较复杂的 Esbuild 插件功能和技巧。接下来&#xff0c;我就来带你揭开 Vite 预构建神…

【JVM进阶】JVM看这一篇就够了(类加载器、垃圾回收、JVM调优、内存泄漏、CPU飙高)

文章目录 1、JVM组成1.1、JVM组成及运行流程1.2、程序计数器什么是程序计数器&#xff1f; 1.3、Java堆你能给我详细的介绍Java堆吗? 1.4、虚拟机栈什么是虚拟机栈垃圾回收是否涉及栈内存&#xff1f;栈内存分配越大越好吗&#xff1f;方法内的局部变量是否线程安全&#xff1…

spring boot学习之自定义starter启动器

starter启动器的目标 引入maven包即可自动装配配置&#xff0c;个人理解&#xff0c;如jdbc引入即可操作数据库 实现 1新建springboot工程编写实现类 2编写配置类 3配置 4打包 4新建工程引入使用

【Linux】进程信号之信号的保存

进程信号 二 一、信号的保存1、信号其他相关常见概念2、信号在内核中表示3、系统内核中信号集sigset_t类型介绍 二、信号集操作函数1、sigset_t 类型的操作函数2、关于block表的系统调用3、关于pending表的系统调用 三、结语 一、信号的保存 1、信号其他相关常见概念 实际执行…

1、vscode+cmake c++环境配置

文章目录 1、安装2、开发环境 关于vscode c环境的配置&#xff0c;应该有两种一种是vscodec/c插件&#xff0c;另一种是vscodecmake插件&#xff0c;第一种没太多用过&#xff0c;感觉就像python那样&#xff0c;要写相关配置文件&#xff0c;有自己的一套规则&#xff1b;另一…

【雕爷学编程】Arduino动手做(155)---2262/2272四键无线遥控套件模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…