使用 mdtest 测试文件系统元数据性能
1. 什么是 IOR 和 mdtest ?IOR(Integrated Benchmark of Parallel I/O)是一种基准测试应用程序,旨在测试并评估并行文件系统的性能。它包含多个测试模式,可以测量一系列文件 I / O 操作的速度和可扩展性。IOR 主要使用 MPI 软件库来实现并行 I/O 操作。它可以测试并行读取和写入各种文件访问模式(例如单个大文件、多个小文件)时的并行文件系统性能。
mdtest 是一款基准测试程序,用来测试文件系统元数据操作的性能。它可以模拟大规模目录和文件的创建、重命名、删除等操作,通常是在高性能计算环境中使用。使用 mdtest 可以帮助用户评估存储系统文件操作的性能,以便更好地优化存储系统的设计和配置。它通常作为文件系统测试套件中的一部分,如 IOR、IOZone 和 FIO 等工具。
IOR 通常被用来测试大文件的读写性能。例如,可以使用 IOR 测试并行文件系统的顺序读写能力、随机访问能力、并行度和带宽。这对于优化大规模应用程序和大规模数据中心中存储层的性能非常重要。
MDTest 通常被用来测试并行文件系统在处理许多小文件时的性 ...
fio 测试存储系统 I/O 性能
1. 什么是 fio ?fio(Flexible I/O Tester)是一个用于测试和评估 I/O 负载和性能的工具,具有高度的可配置性和灵活性。它可以模拟不同类型的负载,包括随机和顺序读写,随机和顺序混合读写,随机和顺序的深度嵌套目录结构等,同时可以产生各种不同的 I/O 负载模式,例如随机性、对齐和分配大小、顺序性等特征,以便更好地模拟实际应用程序中的 I/O 负载。fio 在评估和比较存储系统方面非常有用,例如硬盘驱动器、固态硬盘、闪存存储器、网络存储器等。 - ChatGPT
本文主要介绍在 Linux 上使用 fio 测试磁盘/文件系统的性能,fio 的其他功能本文不关注。对磁盘和文件系统的测试可以认为是一回事,因为文件系统挂载后在使用方面与本地磁盘没有什么区别,所以本文不会仔细区分这两个场景。
本文所使用的是系统为 CentOS 8.4.2105,其他发行版与本文可能会有出入,本文不做解释,可自行查看文档 fio - Flexible I/O tester。
2. 安装 fio安装 fio 有几种常用方法,可以直接通过包管理工具(如 yum、dnf 等)安装,或者是手动 ...
CubeFS 快速单机部署试用
注意:
CubeFS 是一个分布式文件系统,是应当部署在集群上的。
本文仅针对纯小白第一次上手,目的是让纯小白可以快速部署好 CubeFS 并使用。
本文不会对 CubeFS 的各种配置项做说明解释,只是给出一个固定的操作过程,使 CubeFS 快速运转起来。
真实的集群中的 CubeFS 的配置要复杂一些,但不会在本文中介绍。
本文也是我作为纯小白,第一次试用 CubeFS 的过程记录。
1. 编译 CubeFS1.1. 安装依赖123456yum install -y gcc-c++ \ go \ cmake \ zlib-devel \ bzip2-devel \ maven
这些依赖 yum 中的版本已经足够了,所以就直接这样装了,自己手动装更高版本也可以。
1.2. 克隆源码仓库克隆 CubeFS 源码仓库:
1git clone https://github.com/cubefs/cubefs.git
进入 CubeFS 源码 ...
Golang 分割字符串的几种方法
1. 按单个分隔字符串分割按单个分隔符或分隔字符串分割可使用 Split() 函数,声明如下:
1func Split(s, sep string) []string
1func Split(s, sep []byte) [][]byte
两个方法是一样的,只是操作的字符串类型一个是 string 一个是 []byte。
我们以操作 string 的方法为例:
1234567891011121314package mainimport ( "fmt" "strings")func main() { fmt.Printf("%q\n", strings.Split("a,b,,,c", ",")) fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a ")) fmt.Printf("%q\n", strings.Split ...
Golang 中正则表达式 regexp 的基本用法
Golang 中使用正则一般就是使用 regexp 包。
这里只介绍一些常用操作,已经可以满足大部分开发需求,更多内容请详见官方文档 regexp package。
1. 正则表达式的语法我们知道想要使用正则匹配,就需要严格按照正则语法设定正则匹配字符串,即 Pattern。
正则语法篇幅较长,这里就不介绍了,并且 Golang 官方的正则语法文档已经非常全面了,可以自己看看 regexp/syntax。
2. regexp 的用法regexp 包的主要使用方式有两种:
直接使用 regexp 包内的全局函数进行模式匹配。
先将 Pattern 封装进 Regexp 类中,再通过 Regexp 类提供的方法来进行正则匹配相关操作。
第 1 种方式能做的事很少,一共仅有 4 个方法,但却是正则操作里很常用方法。第 2 种方式相对复杂,但提供了非常多的方法,几乎能够满足正则匹配各种场景下的所有需求。
两种方式没有优劣之分,一般来说,简单需求用方式 1,方式 1 无法满足的时候用方式 2,就可以了。
下面第 3 小节对应方式 1,第 4小节对应方式 2。
3. 使用 regexp 包内的 ...
Linux 中限制用户的可用资源 - ulimit 详解
1. ulimit 命令的作用ulimit 命令是系统自带的,用于修改 Shell 的资源限制。
具体来说,ulimit 命令用于限制一个 Shell 以及由这个 Shell 创建的所有进程的可用资源总量。
注意是限制一个 Shell,不是一个用户。比如你 SSH 登录到服务器,你当前所处的就是一个 Shell,退出后这个限制就失效了。
2. ulimit 命令的用法ulimit 命令的用法如下:
1ulimit [Options] [limit]
options:选项。除了 -S、-H、-a,每个选项代表一个资源,具体在下面说。
limit:指定资源的限制值。
-
选项 options 可取值如下:
有三个选项是通用的:
-S:使用软资源限制,允许资源超出,资源超出后仅警告。
-H:使用硬资源限制,资源严格控制,不允许超出。
-a:列出当前所有的资源限制。
其他选项,每个代表一种系统资源:
-b:Socket 的 buffer 大小。
-c:创建的核心文件(core files)的最大大小
-d:进程的数据段(data segment)最大大小。
-e:最大调度优先级(即命 ...
Linux 修改 SELinux 设定
1. 为什么要修改防火墙设定我们有些时候做一些操作会遇到一些莫名其妙的问题 ~
比如使用 systemctl 启动某些服务时被拒绝(root 用户也不行):
1Failed to enable unit: Access denied
或者有些时候直接提示找不到 unit:
1Failed to start xxx.service: Unit not found
但是查看 /etc/systemd/system/ 等 unit 存放目录,我们的 xxx.service 就安静的躺在那里。。。
-
这些问题可能是由于 Linux 防火墙 SELinux 的设定引起的。
2. SELinux 的工作模式SELinux 有三种工作模式,分别为:
enforcing:强制模式,一切违背 SELinux 政策的行为都将被禁止。
permissive:宽容模式,违背 SELinux 政策的行为可以进行,但会被记录到日志中。
disbaled:完全禁用 SELinux。
3. 修改 SELinux 的设定3.1. 临时修改临时修改可使用 setenforce 命令:
1setenforce [ E ...
Linux 创建新用户并赋权
本文所述内容需要在 root 用户或有 root 权限的用户下操作。
这里假定你已经以 root 用户登录到了 Linux。
1. 创建新用户新建一个用户:
1adduser <new_username>
给新用户设置密码:
1passwd <new_username>
-
例如我这里创建一个名为 gukaifeng 的用户,那么命令如下:
1adduser gukaifeng # 新建一个名为 gukaifeng 的用户
1passwd gukaifeng # 为 gukaifeng 用户设置密码
-
上面的命令已经自动创建好用户目录了,例如我这里的 /home/gukaifeng。
这一步完成后,我们的新用户就可以正常登录使用了。
-
为了说起来方便,下面的步骤我都以新用户名为 “gukaifeng” 为例。
2. 给新用户添加 sudo 权限这里给出两个方法可以做到这一点,我建议使用方法二。
2.1. (不推荐)直接修改 /etc/sudoers权限配置文件为 /etc/sudoers,这个文件默认是没有写权限的,所以我们需要先给其添加写权限: ...
VSCode 在编辑器中显示垂直标尺
我们知道一行代码不宜过长,不同的公司、团队、项目通常有不同的规范。
最常见的行最大字符数的规范比如:
每行字符数最大不得超过 80。
每行字符数最大不得超过 120。
每行建议不超过 80 字符,最大不得超过 120 字符。
……
VSCode 支持设定垂直标尺,即在编辑器中,在指定字符数的位置给你画一条竖线。
例如下面这样,就是分别在 80 字符处和 120 字符处分别花了一条竖线,这样方便我们在写代码的时候控制每行字符数。
设置方法也很简单,我们依次点击 File -> Perferences -> Setting:
然后在上面的搜索栏里搜索 “Editor.rulers”:
点击 “Edit in setting.json”,在里面修改 editor.rulers 字段,像下面这样就是在 80 和 120 字符处显示垂直标尺:
然后保存就 OK 了。
Linux 使用 crontab 设定定时任务
1. crontab 命令的作用Linux 中可以使用 crontab 命令来设定定时任务,例如每小时执行一次某个脚本。
具体来说,Linux 中有一个程序 crond(几乎所有发行版都自带),用于执行计划命令的守护程序。crontab 命令帮助我们快速设定这些任务,实际是修改 crontab 文件,crond 程序会定期检查这些 crontab 文件,执行其中需要执行的命令。
crontab 文件主要存储在三个地方:
/etc/crontab: 是一个文件,存储主要的系统 crontab 文件。
/etc/cron.d/: 是一个目录,也是存储了一些系统 crontab 文件。
/var/spool/cron/: 是一个目录,里面存着各个用户定义的 crontab 文件,这个目录是我们自定义定时任务主要需要关注的。
需要注意的是,crond 的检查间隔是 1 分钟,也就是我们定时任务的执行最小间隔是 1 分钟。如果我们有更小间隔的定时任务需要执行,那么 crontab 命令是无法满足的,可能需要自己写一个专门的守护程序。
2. 如何设定 crontab 定时任务前面说过,我们定义 ...