ViveNAS性能调试笔记(一)

ViveNAS是一个开源的NAS文件服务软件,有一套独立自创的架构,ViveNAS希望能做到下面的目标:

 - 能支持混合使用高性能的介质(NVMe SSD)和低性能介质(HDD,甚至磁带)。做到性能、成本动态均衡。因此ViveNAS使用了LSM tree结构,使用其带来的分层能力。
- 能提供文件接口,对象接口统一访问。ViveNAS的中间层 libvivenas 提供了用户态文件语义,方便对象存储对接开发。
- 要方便使用EC进一步降低数据存储的成本,底层数要避免随机写。此目标通过PureFlash的Append only file达到。
- 分布式存储的其他横向扩展、高可用能力,通过底层的PureFlash系统达到。

 其结构介绍祥见ViveNAS - 一个基于LSM tree的文件存储实现 (一)_pureflash 元数据-CSDN博客

简单讲,ViveNAS包括了PureFlash后端存储,rocksdb引擎,vivenas文件系统,以及ganesha前端接口四个部分。

                        

本文记录的是调整rocksdb 的num_levels参数对最终性能的影响。

测试硬件为: 阿里云虚机 ecs.hfr7.3xlarge  12C96G。

为避免后端存储对性能的影响,使用ramdisk代替SSD作为PureFlash的物理盘。

测试操作:

本次进行了三次测试,分别设置data column family 的num_levels 为7,4,2 进行测试(meta column family 一直保持为缺省的7);

测试负载用fio产生,用NFS将ViveNAS文件系统挂载到同一个主机上,对nfs文件系统进行读写。首先 进行一次4K随机写(RW), 然后换不同IO大小进行随机读(RR), fio每次运行30s.

测试脚本详见:ViveNAS/testing/perf-stat.sh at master · cocalele/ViveNAS (github.com)

得到如下的测试结果:

可以看到有这么几个现象:

1) num_levels对初始写的性能影响不大。

2) num_levels对实际造成的底层存储写入量影响也不大,这个还是比较诧异的。

3)num_levels对读操作的影响明显。特别是32K 随机读表现的更为明显。

简单分析一下,

ViveNAS处理大IO读(16K) 比 小IO(4K)性能要好的多。这一点可能跟ViveNAS保存数据以64KB为一个extent有关。无论客户端请求的数据块是4K还是16K,底层都要读取最少64KB数据。

算一下读放大倍数也证实了这点,4K随机读伴随着43倍写放大。32K随机读只有1.7倍,64K随机读更是降低到了0.5倍,也就是大部分数据都在rocksdb或者PureFlash AOF cache处得到了复用。

这个测试结果还是揭示了很多问题,接下来的研究以及改进方向如下:

1. 修改ganesha了worker thread的数量,看其对结果的影响
2. 修改libvivenas的vn_read/vn_write操作为异步的,看其对结果的影响
3. 修改rocksdb Get函数,提供随机读能力,去掉不必要的读放大。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++--类的定义

一.类的定义 class 类名 { private:成员属性或成员函数 protected:成员属性或成员函数 public:成员属性或成员函数 };补充: (1)class是声明类的关键字,class后跟类名。类名一般首字母大写。 (2)类包括成员…

怎样在Linux搭建NTP服务器

搭建 NTP(Network Time Protocol)服务器可以帮助你在局域网内提供时间同步服务,让网络中的设备都使用统一的时间。以下是在 Linux 系统上搭建 NTP 服务器的基本步骤: 安装 NTP 服务器软件: 在终端中执行以下命令安装 N…

【爬虫框架Scrapy】02 Scrapy入门案例

接下来介绍一个简单的项目,完成一遍 Scrapy 抓取流程。通过这个过程,我们可以对 Scrapy 的基本用法和原理有大体了解。 1. 本节目标 本节要完成的任务如下。 创建一个 Scrapy 项目。 创建一个 Spider 来抓取站点和处理数据。 通过命令行将抓取的内容…

Gemini即将收费,GPT无需注册?GPT3.5白嫖和升级教程

🌐Gemini 即将开始收费 开发者“白嫖”的好日子到头了 - Gemini将开始收费,影响使用Google AI for Developers提供的Gemini API的用户。 - Gemini API将引入按量付费定价,需要注意新的服务条款。 - 用户需在5月2日之前停止使用Gemini API和Go…

redis事务(redis features)

redis支持事务,也就是可以在一次请求中执行多个命令。redis中的事务主要是通过MULTI和EXEC这两个命令来实现的。 MULTI命令用来开启一个事务,事务开启之后,所有的命令就都会被放入到一个队列中,最后通过一个EXEC命令来执行事务中…

【现代C++】委托构造函数

现代C中的委托构造函数(Delegating Constructors)是C11引入的特性,它允许一个构造函数调用同一个类中的另一个构造函数,以避免代码重复。这种特性在初始化对象时提高了代码的复用性和清晰性。 1. 基本用法 在同一个类中&#xf…

dhcp中继代理

不同过路由器分配ip了,通过一台服务器来代替,路由器充当中继代理功能,如下图 服务器地址:172.10.1.1/24 配置流程: 1.使能dhcp功能 2.各个接口网关地址,配置dhcp中继功能 dhcp select relay &#xff0…

Markdown介绍

一.Markdown基本介绍🍗 Markdown 是一种轻量级标记语言,用于简单、易读易写的文本格式编写。它设计初衷是让人们能够使用普通文本编辑器编写格式简单的文档,并且可以转换成有效的HTML。Markdown 的语法非常简洁直观,通过使用特定…

VS2022配置boost库-Windows为例

1. boost库下载 1)下载boost库源码:https://www.boost.org/ 2)以1.81版本为例,安装包如下 3)下载后解压 比如我是放在E盘下面的boost文件夹 2. 安装配置 1)打开VS2022命令行 2)切换安装…

OpenHarmony实战:Makefile方式组织编译的库移植

以yxml库为例,其移植过程如下文所示。 源码获取 从仓库获取yxml源码,其目录结构如下表: 表1 源码目录结构 名称描述yxml/bench/benchmark相关代码yxml/test/测试输入输出文件,及测试脚本yxml/Makefile编译组织文件yxml/.gitat…

nginx配置多vue项目

1. 找到linux docker安装好的nginx目录文件 进入nginx内 把打包好的vue项目放在html文件下 如上 三个文件夹下对应着三个不同的vue项目 2. 配置default.conf的配置文件, 一个nginx配置文件可以多个项目进行代理 进入到conf 找到conf.d下面的default.conf 文件…

解决虚拟机centos8无法连接外网,ping: www.baidu.com: 未知的名称或服务

设置的虚拟机刚开还是好好的,改完hostname重启后就连不上网了 ping百度时显示未知的名称或服务。 1.找到虚拟机的IP(NAT模式的) 编辑-->虚拟网络编辑器 可以看到我的子网IP为192.168.47.0 2.编辑网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-XXXXX…